[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[O] [babel] ob-octave does not catch EOE from matlabShell on MS Windows
From: |
Mikhail Titov |
Subject: |
[O] [babel] ob-octave does not catch EOE from matlabShell on MS Windows |
Date: |
Thu, 24 May 2012 16:02:11 -0500 |
Hello!
I was trying hard to set up Matlab R2011a to work with my Emacs 24.1.50.1 (org
version is release_7.8.09-532-gb797c8.dirty) and finally I was able to use it
from M-shell but not from orgmode yet. I've edited emacs wiki [1] to reflect
somewhat working matlab-mode setup on win32. Namely I use [2] as matlab shell.
I have a simple test block like
#+begin_src matlab :session *MATLAB*
a=2
#+end_src
When I try to execute it with C-c C-c , emacs never returns unless I hit C-g.
If I do M-x toggle-debug-on-quit RET I see that for some reason it keeps
waiting for EOE.
I'd appreciate any suggestion as what to try (other than Octave which has its
own tricks on Win32). I'm lost.
[1] http://www.emacswiki.org/emacs/MatlabMode#toc3
[2] http://www.cs.umb.edu/~ram/matlabShell/index.html
--
Mikhail
Here is what I see in *MATLAB* buffer:
----8<-----------------*MATLAB*------------------>8-----
>> a=2
if ischar(ans), fid =
fopen('c:/DOCUME~1/user/LOCALS~1/Temp/babel-7560HUp/matlab-7560PPd', 'w');
fprintf(fid, '%s\n', ans); fclose(fid); else,
dlmwrite('c:/DOCUME~1/user/LOCALS~1/Temp/babel-7560HUp/matlab-7560PPd', ans,
'\t'); end
'org_babel_eoe'
a =
2
>> >>
ans =
org_babel_eoe
>>
----8<-----------------*MATLAB*------------------>8-----
----8<-----------------*Bactrace*------------------>8-----
Debugger entered--Lisp error: (quit)
accept-process-output(#<process MATLAB>)
(while (progn (goto-char comint-last-input-end) (not (save-excursion (and
(re-search-forward (regexp-quote (if matlabp org-babel-octave-eoe-indicator
org-babel-octave-eoe-output)) nil t) (re-search-forward comint-prompt-regexp
nil t))))) (accept-process-output (get-buffer-process (current-buffer))))
(progn (goto-char (process-mark (get-buffer-process (current-buffer)))) (let
((start (point)) (end (point-max))) (setq dangling-text (buffer-substring start
end)) (delete-region start end)) (insert full-body) (comint-send-input nil t)
(while (progn (goto-char comint-last-input-end) (not (save-excursion (and
(re-search-forward (regexp-quote ...) nil t) (re-search-forward
comint-prompt-regexp nil t))))) (accept-process-output (get-buffer-process
(current-buffer)))) (goto-char (process-mark (get-buffer-process
(current-buffer)))) (insert dangling-text))
(unwind-protect (progn (goto-char (process-mark (get-buffer-process
(current-buffer)))) (let ((start (point)) (end (point-max))) (setq
dangling-text (buffer-substring start end)) (delete-region start end)) (insert
full-body) (comint-send-input nil t) (while (progn (goto-char
comint-last-input-end) (not (save-excursion (and (re-search-forward ... nil t)
(re-search-forward comint-prompt-regexp nil t))))) (accept-process-output
(get-buffer-process (current-buffer)))) (goto-char (process-mark
(get-buffer-process (current-buffer)))) (insert dangling-text)) (remove-hook
(quote comint-output-filter-functions) (quote my-filt)))
(progn (fset (quote my-filt) (function* (lambda (text) (block my-filt (setq
string-buffer (concat string-buffer text)))))) (add-hook (quote
comint-output-filter-functions) (quote my-filt)) (unwind-protect (progn
(goto-char (process-mark (get-buffer-process (current-buffer)))) (let ((start
(point)) (end (point-max))) (setq dangling-text (buffer-substring start end))
(delete-region start end)) (insert full-body) (comint-send-input nil t) (while
(progn (goto-char comint-last-input-end) (not (save-excursion (and ... ...))))
(accept-process-output (get-buffer-process (current-buffer)))) (goto-char
(process-mark (get-buffer-process (current-buffer)))) (insert dangling-text))
(remove-hook (quote comint-output-filter-functions) (quote my-filt))))
(unwind-protect (progn (fset (quote my-filt) (function* (lambda (text) (block
my-filt (setq string-buffer (concat string-buffer text)))))) (add-hook (quote
comint-output-filter-functions) (quote my-filt)) (unwind-protect (progn
(goto-char (process-mark (get-buffer-process (current-buffer)))) (let ((start
(point)) (end (point-max))) (setq dangling-text (buffer-substring start end))
(delete-region start end)) (insert full-body) (comint-send-input nil t) (while
(progn (goto-char comint-last-input-end) (not (save-excursion ...)))
(accept-process-output (get-buffer-process (current-buffer)))) (goto-char
(process-mark (get-buffer-process (current-buffer)))) (insert dangling-text))
(remove-hook (quote comint-output-filter-functions) (quote my-filt)))) (if
--cl-letf-bound-- (fset (quote my-filt) --cl-letf-save--) (fmakunbound (quote
my-filt))))
(let* ((--cl-letf-bound-- (fboundp (quote my-filt))) (--cl-letf-save-- (and
--cl-letf-bound-- (symbol-function (quote my-filt))))) (unwind-protect (progn
(fset (quote my-filt) (function* (lambda (text) (block my-filt (setq
string-buffer ...))))) (add-hook (quote comint-output-filter-functions) (quote
my-filt)) (unwind-protect (progn (goto-char (process-mark (get-buffer-process
...))) (let ((start ...) (end ...)) (setq dangling-text (buffer-substring start
end)) (delete-region start end)) (insert full-body) (comint-send-input nil t)
(while (progn (goto-char comint-last-input-end) (not ...))
(accept-process-output (get-buffer-process ...))) (goto-char (process-mark
(get-buffer-process ...))) (insert dangling-text)) (remove-hook (quote
comint-output-filter-functions) (quote my-filt)))) (if --cl-letf-bound-- (fset
(quote my-filt) --cl-letf-save--) (fmakunbound (quote my-filt)))))
(letf (((symbol-function (quote my-filt)) (function* (lambda (text) (block
my-filt (setq string-buffer (concat string-buffer text))))))) (add-hook (quote
comint-output-filter-functions) (quote my-filt)) (unwind-protect (progn
(goto-char (process-mark (get-buffer-process (current-buffer)))) (let ((start
(point)) (end (point-max))) (setq dangling-text (buffer-substring start end))
(delete-region start end)) (insert full-body) (comint-send-input nil t) (while
(progn (goto-char comint-last-input-end) (not (save-excursion (and ... ...))))
(accept-process-output (get-buffer-process (current-buffer)))) (goto-char
(process-mark (get-buffer-process (current-buffer)))) (insert dangling-text))
(remove-hook (quote comint-output-filter-functions) (quote my-filt))))
(letf* (((symbol-function (quote my-filt)) (function* (lambda (text) (block
my-filt (setq string-buffer (concat string-buffer text))))))) (add-hook (quote
comint-output-filter-functions) (quote my-filt)) (unwind-protect (progn
(goto-char (process-mark (get-buffer-process (current-buffer)))) (let ((start
(point)) (end (point-max))) (setq dangling-text (buffer-substring start end))
(delete-region start end)) (insert full-body) (comint-send-input nil t) (while
(progn (goto-char comint-last-input-end) (not (save-excursion (and ... ...))))
(accept-process-output (get-buffer-process (current-buffer)))) (goto-char
(process-mark (get-buffer-process (current-buffer)))) (insert dangling-text))
(remove-hook (quote comint-output-filter-functions) (quote my-filt))))
(flet ((my-filt (text) (setq string-buffer (concat string-buffer text))))
(add-hook (quote comint-output-filter-functions) (quote my-filt))
(unwind-protect (progn (goto-char (process-mark (get-buffer-process
(current-buffer)))) (let ((start (point)) (end (point-max))) (setq
dangling-text (buffer-substring start end)) (delete-region start end)) (insert
full-body) (comint-send-input nil t) (while (progn (goto-char
comint-last-input-end) (not (save-excursion (and ... ...))))
(accept-process-output (get-buffer-process (current-buffer)))) (goto-char
(process-mark (get-buffer-process (current-buffer)))) (insert dangling-text))
(remove-hook (quote comint-output-filter-functions) (quote my-filt))))
(let ((string-buffer "") dangling-text raw) (flet ((my-filt (text) (setq
string-buffer (concat string-buffer text)))) (add-hook (quote
comint-output-filter-functions) (quote my-filt)) (unwind-protect (progn
(goto-char (process-mark (get-buffer-process (current-buffer)))) (let ((start
(point)) (end (point-max))) (setq dangling-text (buffer-substring start end))
(delete-region start end)) (insert full-body) (comint-send-input nil t) (while
(progn (goto-char comint-last-input-end) (not (save-excursion ...)))
(accept-process-output (get-buffer-process (current-buffer)))) (goto-char
(process-mark (get-buffer-process (current-buffer)))) (insert dangling-text))
(remove-hook (quote comint-output-filter-functions) (quote my-filt)))) (if (and
t full-body (string-match (replace-regexp-in-string "\n" "[
\n]+" (regexp-quote (or full-body ""))) string-buffer)) (setq raw (substring
string-buffer (match-end 0)))) (split-string string-buffer
comint-prompt-regexp))
(progn (unless (org-babel-comint-buffer-livep session) (error "buffer %s
doesn't exist or has no process" session)) (set-buffer session) (let
((string-buffer "") dangling-text raw) (flet ((my-filt (text) (setq
string-buffer (concat string-buffer text)))) (add-hook (quote
comint-output-filter-functions) (quote my-filt)) (unwind-protect (progn
(goto-char (process-mark (get-buffer-process ...))) (let ((start ...) (end
...)) (setq dangling-text (buffer-substring start end)) (delete-region start
end)) (insert full-body) (comint-send-input nil t) (while (progn (goto-char
comint-last-input-end) (not ...)) (accept-process-output (get-buffer-process
...))) (goto-char (process-mark (get-buffer-process ...))) (insert
dangling-text)) (remove-hook (quote comint-output-filter-functions) (quote
my-filt)))) (if (and t full-body (string-match (replace-regexp-in-string "\n" "[
\n]+" (regexp-quote (or full-body ""))) string-buffer)) (setq raw (substring
string-buffer (match-end 0)))) (split-string string-buffer
comint-prompt-regexp)))
(unwind-protect (progn (unless (org-babel-comint-buffer-livep session) (error
"buffer %s doesn't exist or has no process" session)) (set-buffer session) (let
((string-buffer "") dangling-text raw) (flet ((my-filt (text) (setq
string-buffer (concat string-buffer text)))) (add-hook (quote
comint-output-filter-functions) (quote my-filt)) (unwind-protect (progn
(goto-char (process-mark ...)) (let (... ...) (setq dangling-text ...)
(delete-region start end)) (insert full-body) (comint-send-input nil t) (while
(progn ... ...) (accept-process-output ...)) (goto-char (process-mark ...))
(insert dangling-text)) (remove-hook (quote comint-output-filter-functions)
(quote my-filt)))) (if (and t full-body (string-match (replace-regexp-in-string
"\n" "[
\n]+" (regexp-quote ...)) string-buffer)) (setq raw (substring string-buffer
(match-end 0)))) (split-string string-buffer comint-prompt-regexp)))
(set-match-data save-match-data-internal (quote evaporate)))
(let ((save-match-data-internal (match-data))) (unwind-protect (progn (unless
(org-babel-comint-buffer-livep session) (error "buffer %s doesn't exist or has
no process" session)) (set-buffer session) (let ((string-buffer "")
dangling-text raw) (flet ((my-filt (text) (setq string-buffer ...))) (add-hook
(quote comint-output-filter-functions) (quote my-filt)) (unwind-protect (progn
(goto-char ...) (let ... ... ...) (insert full-body) (comint-send-input nil t)
(while ... ...) (goto-char ...) (insert dangling-text)) (remove-hook (quote
comint-output-filter-functions) (quote my-filt)))) (if (and t full-body
(string-match (replace-regexp-in-string "\n" "[
\n]+" ...) string-buffer)) (setq raw (substring string-buffer (match-end 0))))
(split-string string-buffer comint-prompt-regexp))) (set-match-data
save-match-data-internal (quote evaporate))))
(save-match-data (unless (org-babel-comint-buffer-livep session) (error
"buffer %s doesn't exist or has no process" session)) (set-buffer session) (let
((string-buffer "") dangling-text raw) (flet ((my-filt (text) (setq
string-buffer (concat string-buffer text)))) (add-hook (quote
comint-output-filter-functions) (quote my-filt)) (unwind-protect (progn
(goto-char (process-mark (get-buffer-process ...))) (let ((start ...) (end
...)) (setq dangling-text (buffer-substring start end)) (delete-region start
end)) (insert full-body) (comint-send-input nil t) (while (progn (goto-char
comint-last-input-end) (not ...)) (accept-process-output (get-buffer-process
...))) (goto-char (process-mark (get-buffer-process ...))) (insert
dangling-text)) (remove-hook (quote comint-output-filter-functions) (quote
my-filt)))) (if (and t full-body (string-match (replace-regexp-in-string "\n" "[
\n]+" (regexp-quote (or full-body ""))) string-buffer)) (setq raw (substring
string-buffer (match-end 0)))) (split-string string-buffer
comint-prompt-regexp)))
(save-excursion (save-match-data (unless (org-babel-comint-buffer-livep
session) (error "buffer %s doesn't exist or has no process" session))
(set-buffer session) (let ((string-buffer "") dangling-text raw) (flet
((my-filt (text) (setq string-buffer (concat string-buffer text)))) (add-hook
(quote comint-output-filter-functions) (quote my-filt)) (unwind-protect (progn
(goto-char (process-mark ...)) (let (... ...) (setq dangling-text ...)
(delete-region start end)) (insert full-body) (comint-send-input nil t) (while
(progn ... ...) (accept-process-output ...)) (goto-char (process-mark ...))
(insert dangling-text)) (remove-hook (quote comint-output-filter-functions)
(quote my-filt)))) (if (and t full-body (string-match (replace-regexp-in-string
"\n" "[
\n]+" (regexp-quote ...)) string-buffer)) (setq raw (substring string-buffer
(match-end 0)))) (split-string string-buffer comint-prompt-regexp))))
(org-babel-comint-in-buffer session (let ((string-buffer "") dangling-text
raw) (flet ((my-filt (text) (setq string-buffer (concat string-buffer text))))
(add-hook (quote comint-output-filter-functions) (quote my-filt))
(unwind-protect (progn (goto-char (process-mark (get-buffer-process ...))) (let
((start ...) (end ...)) (setq dangling-text (buffer-substring start end))
(delete-region start end)) (insert full-body) (comint-send-input nil t) (while
(progn (goto-char comint-last-input-end) (not ...)) (accept-process-output
(get-buffer-process ...))) (goto-char (process-mark (get-buffer-process ...)))
(insert dangling-text)) (remove-hook (quote comint-output-filter-functions)
(quote my-filt)))) (if (and t full-body (string-match (replace-regexp-in-string
"\n" "[
\n]+" (regexp-quote (or full-body ""))) string-buffer)) (setq raw (substring
string-buffer (match-end 0)))) (split-string string-buffer
comint-prompt-regexp)))
(org-babel-comint-with-output (session (if matlabp
org-babel-octave-eoe-indicator org-babel-octave-eoe-output) t full-body)
(insert full-body) (comint-send-input nil t))
(if (and matlabp org-babel-matlab-with-emacs-link) (save-window-excursion
(with-temp-buffer (insert full-body) (write-region "" (quote ignored) wait-file
nil nil nil (quote excl)) (matlab-shell-run-region (point-min) (point-max))
(message "Waiting for Matlab Emacs Link") (while (file-exists-p wait-file)
(sit-for 0.01)) "")) (org-babel-comint-with-output (session (if matlabp
org-babel-octave-eoe-indicator org-babel-octave-eoe-output) t full-body)
(insert full-body) (comint-send-input nil t)))
(let* ((tmp-file (org-babel-temp-file (if matlabp "matlab-" "octave-")))
(wait-file (org-babel-temp-file "matlab-emacs-link-wait-signal-")) (full-body
(case result-type (output (mapconcat (function org-babel-chomp) (list body
org-babel-octave-eoe-indicator) "\n")) (value (if (and matlabp
org-babel-matlab-with-emacs-link) (concat (format
org-babel-matlab-emacs-link-wrapper-method body ... ... wait-file) "\n")
(mapconcat (function org-babel-chomp) (list ... org-babel-octave-eoe-indicator)
"\n"))))) (raw (if (and matlabp org-babel-matlab-with-emacs-link)
(save-window-excursion (with-temp-buffer (insert full-body) (write-region ""
(quote ignored) wait-file nil nil nil (quote excl)) (matlab-shell-run-region
(point-min) (point-max)) (message "Waiting for Matlab Emacs Link") (while
(file-exists-p wait-file) (sit-for 0.01)) "")) (org-babel-comint-with-output
(session (if matlabp org-babel-octave-eoe-indicator
org-babel-octave-eoe-output) t full-body) (insert full-body) (comint-send-input
nil t)))) results) (case result-type (value
(org-babel-octave-import-elisp-from-file tmp-file)) (output (progn (setq
results (if matlabp (cdr (reverse ...)) (cdr (member
org-babel-octave-eoe-output ...)))) (mapconcat (function identity) (reverse
results) "\n")))))
org-babel-octave-evaluate-session("*MATLAB*" "a=2" value matlab)
(if session (org-babel-octave-evaluate-session session body result-type
matlabp) (org-babel-octave-evaluate-external-process body result-type matlabp))
org-babel-octave-evaluate("*MATLAB*" "a=2" value matlab)
(let* ((session (funcall (intern (format "org-babel-%s-initiate-session" (if
matlabp "matlab" "octave"))) (cdr (assoc :session params)) params)) (vars
(mapcar (function cdr) (org-babel-get-header params :var))) (result-params (cdr
(assoc :result-params params))) (result-type (cdr (assoc :result-type params)))
(out-file (cdr (assoc :file params))) (full-body (org-babel-expand-body:generic
body params (org-babel-variable-assignments:octave params))) (result
(org-babel-octave-evaluate session (if (org-babel-octave-graphical-output-file
params) (mapconcat (quote identity) (list "set (0, \"defaultfigurevisible\",
\"off\");" full-body (format "print -dpng %s" ...)) "\n") full-body)
result-type matlabp))) (if (org-babel-octave-graphical-output-file params) nil
(org-babel-reassemble-table result (org-babel-pick-name (cdr (assoc
:colname-names params)) (cdr (assoc :colnames params))) (org-babel-pick-name
(cdr (assoc :rowname-names params)) (cdr (assoc :rownames params))))))
org-babel-execute:octave("a=2" ((:comments . "") (:shebang . "") (:cache .
"no") (:padline . "") (:noweb . "no") (:tangle . "no") (:exports . "code")
(:results . "replace") (:hlines . "no") (:padnewline . "yes") (:session .
"*MATLAB*") (:result-type . value) (:result-params "replace") (:rowname-names)
(:colname-names)) matlab)
org-babel-execute:matlab("a=2" ((:comments . "") (:shebang . "") (:cache .
"no") (:padline . "") (:noweb . "no") (:tangle . "no") (:exports . "code")
(:results . "replace") (:hlines . "no") (:padnewline . "yes") (:session .
"*MATLAB*") (:result-type . value) (:result-params "replace") (:rowname-names)
(:colname-names)))
org-babel-execute-src-block(nil ("matlab" "a=2" ((:comments . "") (:shebang .
"") (:cache . "no") (:padline . "") (:noweb . "no") (:tangle . "no") (:exports
. "code") (:results . "replace") (:hlines . "no") (:padnewline . "yes")
(:session . "*MATLAB*") (:result-type . value) (:result-params "replace")
(:rowname-names) (:colname-names)) "" nil 0))
org-babel-execute-src-block-maybe()
org-babel-execute-maybe()
org-babel-execute-safely-maybe()
run-hook-with-args-until-success(org-babel-execute-safely-maybe)
org-ctrl-c-ctrl-c(nil)
call-interactively(org-ctrl-c-ctrl-c nil nil)
----8<-----------------*Bactrace*------------------>8-----
- [O] [babel] ob-octave does not catch EOE from matlabShell on MS Windows,
Mikhail Titov <=
- Re: [O] [babel] ob-octave does not catch EOE from matlabShell on MS Windows, Mikhail Titov, 2012/05/24
- Re: [O] [babel] ob-octave does not catch EOE from matlabShell on MS Windows, Mikhail Titov, 2012/05/25
- Re: [O] [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows, Mikhail Titov, 2012/05/25
- Re: [O] [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows, Eric Schulte, 2012/05/28
- Re: [O] [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows, Achim Gratz, 2012/05/28
- Re: [O] [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows, Mikhail Titov, 2012/05/30
- Re: [O] [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows, Eric Schulte, 2012/05/30
- Re: [O] [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows, Achim Gratz, 2012/05/30
- Re: [O] [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows, Mikhail Titov, 2012/05/29