* [babel] ob-octave does not catch EOE from matlabShell on MS Windows @ 2012-05-24 21:02 Mikhail Titov 2012-05-24 21:30 ` Mikhail Titov 0 siblings, 1 reply; 10+ messages in thread From: Mikhail Titov @ 2012-05-24 21:02 UTC (permalink / raw) To: emacs-orgmode 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----- ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [babel] ob-octave does not catch EOE from matlabShell on MS Windows 2012-05-24 21:02 [babel] ob-octave does not catch EOE from matlabShell on MS Windows Mikhail Titov @ 2012-05-24 21:30 ` Mikhail Titov 2012-05-25 16:31 ` Mikhail Titov 0 siblings, 1 reply; 10+ messages in thread From: Mikhail Titov @ 2012-05-24 21:30 UTC (permalink / raw) To: emacs-orgmode > -----Original Message----- > From: emacs-orgmode-bounces+mlt=gmx.us@gnu.org [mailto:emacs-orgmode- > bounces+mlt=gmx.us@gnu.org] On Behalf Of Mikhail Titov > Sent: Thursday, May 24, 2012 4:02 PM > To: emacs-orgmode@gnu.org > Subject: [O] [babel] ob-octave does not catch EOE from matlabShell on MS > Windows > > ... > > 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. > > ... > > 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----- I feel like it is about (defvar org-babel-octave-eoe-output "ans = org_babel_eoe") as Matlab's return has newlines. I'm not sure so far how to make universal regex for re-search-forward in org-babel-comint-with-output . Mikhail ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [babel] ob-octave does not catch EOE from matlabShell on MS Windows 2012-05-24 21:30 ` Mikhail Titov @ 2012-05-25 16:31 ` Mikhail Titov 2012-05-25 16:52 ` [babel, patch] " Mikhail Titov 0 siblings, 1 reply; 10+ messages in thread From: Mikhail Titov @ 2012-05-25 16:31 UTC (permalink / raw) To: emacs-orgmode > -----Original Message----- > From: emacs-orgmode-bounces+mlt=gmx.us@gnu.org [mailto:emacs-orgmode- > bounces+mlt=gmx.us@gnu.org] On Behalf Of Mikhail Titov > Sent: Thursday, May 24, 2012 4:31 PM > To: emacs-orgmode@gnu.org > Subject: Re: [O] [babel] ob-octave does not catch EOE from matlabShell on MS > Windows > > > ... > > > > 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. It looks like org-babel-octave-eoe-output and org-babel-octave-eoe-indicator were swapped around in org-babel-octave-evaluate-session . I have the following in dot emacs (setq org-babel-octave-eoe-output " ans = org_babel_eoe ") M. > > > > ... > > > > 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----- > > I feel like it is about > > (defvar org-babel-octave-eoe-output "ans = org_babel_eoe") > > as Matlab's return has newlines. I'm not sure so far how to make universal > regex for re-search-forward in org-babel-comint-with-output . > > Mikhail > > > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows 2012-05-25 16:31 ` Mikhail Titov @ 2012-05-25 16:52 ` Mikhail Titov 2012-05-28 15:56 ` Eric Schulte 0 siblings, 1 reply; 10+ messages in thread From: Mikhail Titov @ 2012-05-25 16:52 UTC (permalink / raw) To: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 1287 bytes --] > -----Original Message----- > From: emacs-orgmode-bounces+mlt=gmx.us@gnu.org [mailto:emacs-orgmode- > bounces+mlt=gmx.us@gnu.org] On Behalf Of Mikhail Titov > Sent: Friday, May 25, 2012 11:31 AM > To: emacs-orgmode@gnu.org > Subject: Re: [O] [babel] ob-octave does not catch EOE from matlabShell on MS > Windows > > > > ... > > > > > > 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. > > It looks like org-babel-octave-eoe-output and org-babel-octave-eoe-indicator > were swapped around in org-babel-octave-evaluate-session . > > I have the following in dot emacs > > (setq org-babel-octave-eoe-output " > ans = > > org_babel_eoe > > ") For the sake of completeness I'm attaching the patch. Also one should override (setq org-babel-matlab-emacs-link-wrapper-method "%s if ischar(ans), fid = fopen('%s', 'w'); fprintf(fid, '%%s\\n', ans); fclose(fid); else, save -ascii %s ans ; end delete('%s') ") as matlabShell does not like commands split across multiple lines. M. [-- Attachment #2: ob-octave_matlab.patch --] [-- Type: application/octet-stream, Size: 537 bytes --] diff --git a/lisp/ob-octave.el b/lisp/ob-octave.el index 9e85757..8bc48bc 100644 --- a/lisp/ob-octave.el +++ b/lisp/ob-octave.el @@ -231,8 +231,8 @@ value of the last statement in BODY, as elisp." (org-babel-comint-with-output (session (if matlabp - org-babel-octave-eoe-indicator - org-babel-octave-eoe-output) + org-babel-octave-eoe-output + org-babel-octave-eoe-indicator) t full-body) (insert full-body) (comint-send-input nil t)))) results) (case result-type ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows 2012-05-25 16:52 ` [babel, patch] " Mikhail Titov @ 2012-05-28 15:56 ` Eric Schulte 2012-05-28 18:23 ` Achim Gratz 2012-05-29 17:00 ` Mikhail Titov 0 siblings, 2 replies; 10+ messages in thread From: Eric Schulte @ 2012-05-28 15:56 UTC (permalink / raw) To: Mikhail Titov; +Cc: emacs-orgmode "Mikhail Titov" <mlt@gmx.us> writes: >> -----Original Message----- >> From: emacs-orgmode-bounces+mlt=gmx.us@gnu.org [mailto:emacs-orgmode- >> bounces+mlt=gmx.us@gnu.org] On Behalf Of Mikhail Titov >> Sent: Friday, May 25, 2012 11:31 AM >> To: emacs-orgmode@gnu.org >> Subject: Re: [O] [babel] ob-octave does not catch EOE from matlabShell on MS >> Windows >> >> > > ... >> > > >> > > 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. >> >> It looks like org-babel-octave-eoe-output and org-babel-octave-eoe-indicator >> were swapped around in org-babel-octave-evaluate-session . >> >> I have the following in dot emacs >> >> (setq org-babel-octave-eoe-output " >> ans = >> >> org_babel_eoe >> >> ") > > For the sake of completeness I'm attaching the patch. Also one should override > > (setq org-babel-matlab-emacs-link-wrapper-method > "%s > if ischar(ans), fid = fopen('%s', 'w'); fprintf(fid, '%%s\\n', ans); fclose(fid); else, save -ascii %s ans ; end > delete('%s') > ") > > as matlabShell does not like commands split across multiple lines. > > M. > > Hi Mikhail, Thanks for sending along the patch and the variable re-definition. If I understand correctly then the patch should be applied for any system, but the variable definition need only be applied on windows systems. Is that correct? Can anyone confirm that matlab/octave code blocks are still functional on a GNU/Linux machine after the above patch and redefinition have been applied? I do not use octave/matlab myself and can't verify this. If they don't break anything I'm happy to apply these patches. Thanks, -- Eric Schulte http://cs.unm.edu/~eschulte ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows 2012-05-28 15:56 ` Eric Schulte @ 2012-05-28 18:23 ` Achim Gratz 2012-05-30 15:58 ` Mikhail Titov 2012-05-29 17:00 ` Mikhail Titov 1 sibling, 1 reply; 10+ messages in thread From: Achim Gratz @ 2012-05-28 18:23 UTC (permalink / raw) To: emacs-orgmode Eric Schulte writes: > Thanks for sending along the patch and the variable re-definition. If I > understand correctly then the patch should be applied for any system, > but the variable definition need only be applied on windows systems. Is > that correct? The variable re-definition seems to be be needed for matlab-shell, I don't know if that would be restricted to Windows. > Can anyone confirm that matlab/octave code blocks are still functional > on a GNU/Linux machine after the above patch and redefinition have been > applied? I do not use octave/matlab myself and can't verify this. The octave tests still pass on openSUSE with the patch applied along with all the other tests (except R, since I'm missing ESS). Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Wavetables for the Waldorf Blofeld: http://Synth.Stromeko.net/Downloads.html#BlofeldUserWavetables ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows 2012-05-28 18:23 ` Achim Gratz @ 2012-05-30 15:58 ` Mikhail Titov 2012-05-30 16:05 ` Eric Schulte 2012-05-30 16:58 ` Achim Gratz 0 siblings, 2 replies; 10+ messages in thread From: Mikhail Titov @ 2012-05-30 15:58 UTC (permalink / raw) To: 'Eric Schulte', 'Achim Gratz'; +Cc: emacs-orgmode > -----Original Message----- > From: emacs-orgmode-bounces+mlt=gmx.us@gnu.org [mailto:emacs-orgmode- > bounces+mlt=gmx.us@gnu.org] On Behalf Of Achim Gratz > Sent: Monday, May 28, 2012 1:24 PM > To: emacs-orgmode@gnu.org > Subject: Re: [O] [babel, patch] ob-octave does not catch EOE from matlabShell > on MS Windows > > Eric Schulte writes: > > Thanks for sending along the patch and the variable re-definition. If I > > understand correctly then the patch should be applied for any system, > > but the variable definition need only be applied on windows systems. Is > > that correct? > > The variable re-definition seems to be be needed for matlab-shell, I > don't know if that would be restricted to Windows. > > > Can anyone confirm that matlab/octave code blocks are still functional > > on a GNU/Linux machine after the above patch and redefinition have been > > applied? I do not use octave/matlab myself and can't verify this. > > The octave tests still pass on openSUSE with the patch applied along > with all the other tests (except R, since I'm missing ESS). I wonder how it still passes the test... I think my patch unintentionally breaks octave. It probably should have been just org-babel-octave-eoe-output instead of (if matlabp org-babel-octave-eoe-output org-babel-octave-eoe-indicator) or other way around. I apologize for bringing it all over to the list as I'm not proficient in elisp yet. I feel like ob-octave needs an overhaul in general as it does not respect many header arguments like :width, :height, and graphics format (always png). Also it would be nice if it removed extra prompts left in results as does ob-R.el . I'll post improved patch once I feel it is ready. Eric, so for now, just hold on with the application of what I've sent. Mikhail ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows 2012-05-30 15:58 ` Mikhail Titov @ 2012-05-30 16:05 ` Eric Schulte 2012-05-30 16:58 ` Achim Gratz 1 sibling, 0 replies; 10+ messages in thread From: Eric Schulte @ 2012-05-30 16:05 UTC (permalink / raw) To: Mikhail Titov Cc: 'Achim Gratz', emacs-orgmode, 'Eric Schulte' "Mikhail Titov" <mlt@gmx.us> writes: >> -----Original Message----- >> From: emacs-orgmode-bounces+mlt=gmx.us@gnu.org [mailto:emacs-orgmode- >> bounces+mlt=gmx.us@gnu.org] On Behalf Of Achim Gratz >> Sent: Monday, May 28, 2012 1:24 PM >> To: emacs-orgmode@gnu.org >> Subject: Re: [O] [babel, patch] ob-octave does not catch EOE from > matlabShell >> on MS Windows >> >> Eric Schulte writes: >> > Thanks for sending along the patch and the variable re-definition. If I >> > understand correctly then the patch should be applied for any system, >> > but the variable definition need only be applied on windows systems. Is >> > that correct? >> >> The variable re-definition seems to be be needed for matlab-shell, I >> don't know if that would be restricted to Windows. >> >> > Can anyone confirm that matlab/octave code blocks are still functional >> > on a GNU/Linux machine after the above patch and redefinition have been >> > applied? I do not use octave/matlab myself and can't verify this. >> >> The octave tests still pass on openSUSE with the patch applied along >> with all the other tests (except R, since I'm missing ESS). > > I wonder how it still passes the test... > > I think my patch unintentionally breaks octave. It probably should have been > just > > org-babel-octave-eoe-output > > instead of > > (if matlabp > org-babel-octave-eoe-output > org-babel-octave-eoe-indicator) > > or other way around. > > I apologize for bringing it all over to the list as I'm not proficient in > elisp yet. > > I feel like ob-octave needs an overhaul in general as it does not respect > many header arguments like :width, :height, and graphics format (always > png). Also it would be nice if it removed extra prompts left in results as > does ob-R.el . > > I'll post improved patch once I feel it is ready. > > Eric, so for now, just hold on with the application of what I've sent. > Will do, Thanks for following up on this. The original author of the Octave and Matlab support for Org-mode code blocks (Dan Davison) is no longer following the Org-mode mailing list, so it would be good to have a new pair of eyes on this. If you run into elisp questions I'm sure there are many experts on this list who would be happy to help provide answers. Best, > > Mikhail > > > -- Eric Schulte http://cs.unm.edu/~eschulte ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows 2012-05-30 15:58 ` Mikhail Titov 2012-05-30 16:05 ` Eric Schulte @ 2012-05-30 16:58 ` Achim Gratz 1 sibling, 0 replies; 10+ messages in thread From: Achim Gratz @ 2012-05-30 16:58 UTC (permalink / raw) To: emacs-orgmode Mikhail Titov writes: >> The octave tests still pass on openSUSE with the patch applied along >> with all the other tests (except R, since I'm missing ESS). > > I wonder how it still passes the test... If you know how it breaks and why the tests don't catch it, please add a test that does... Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ SD adaptations for Waldorf Q V3.00R3 and Q+ V3.54R2: http://Synth.Stromeko.net/Downloads.html#WaldorfSDada ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [babel, patch] ob-octave does not catch EOE from matlabShell on MS Windows 2012-05-28 15:56 ` Eric Schulte 2012-05-28 18:23 ` Achim Gratz @ 2012-05-29 17:00 ` Mikhail Titov 1 sibling, 0 replies; 10+ messages in thread From: Mikhail Titov @ 2012-05-29 17:00 UTC (permalink / raw) To: 'Eric Schulte'; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 2983 bytes --] > -----Original Message----- > From: Eric Schulte [mailto:eric.schulte@gmx.com] > Sent: Monday, May 28, 2012 10:57 AM > To: Mikhail Titov > Cc: emacs-orgmode@gnu.org > Subject: Re: [O] [babel, patch] ob-octave does not catch EOE from matlabShell > on MS Windows > > ... > >> > >> It looks like org-babel-octave-eoe-output and org-babel-octave-eoe- > indicator > >> were swapped around in org-babel-octave-evaluate-session . > >> > >> I have the following in dot emacs > >> > >> (setq org-babel-octave-eoe-output " > >> ans = > >> > >> org_babel_eoe > >> > >> ") > > > > For the sake of completeness I'm attaching the patch. Also one should > override > > > > (setq org-babel-matlab-emacs-link-wrapper-method > > "%s > > if ischar(ans), fid = fopen('%s', 'w'); fprintf(fid, '%%s\\n', ans); > fclose(fid); else, save -ascii %s ans ; end > > delete('%s') > > ") > > > > as matlabShell does not like commands split across multiple lines. > > > > Thanks for sending along the patch and the variable re-definition. I was in the hurry and the second variable should have been (setq org-babel-octave-wrapper-method "%s if ischar(ans), fid = fopen('%s', 'w'); fprintf(fid, '%%s\\n', ans); fclose(fid); else, dlmwrite('%s', ans, '\\t'); end") and not org-babel-matlab-emacs-link-wrapper-method . The only difference from what is already in there, is that it should be a single line (with ; delimiters). It might be a limitation of matlabShell. From what I understand EmacsLink is something outdated and not supported anymore as there is matlab-emacs mode. Also the patch was missing yet another change to use single quotes instead of double quotes when making default figures invisible. I'm attaching the patch I ended up using. > If I > understand correctly then the patch should be applied for any system, > but the variable definition need only be applied on windows systems. Is > that correct? Unfortunately I don't have Matlab installed on my home GNU/Linux computer, I'll see if I'm eligible and can get one. What bugs me though is that I can't use both octave and matlab as they use same variable (org-babel-octave-eoe-output) which should be set to different values. In org-babel-comint-with-output macro (ob-comint.el) it is used to check if shell/REPL is done with evaluation and ready for input. I wonder if it is possible to generalize org-babel-octave-eoe-output for both matlab and octave as the only difference is the bunch of newlines in Matlab output. One may write a regexp that matches both, however "(regexp-quote ,eoe-indicator)" in aforementioned macro confuses me. So it got to be a plain string. M. > Can anyone confirm that matlab/octave code blocks are still functional > on a GNU/Linux machine after the above patch and redefinition have been > applied? I do not use octave/matlab myself and can't verify this. > > If they don't break anything I'm happy to apply these patches. > > Thanks, > > -- > Eric Schulte > http://cs.unm.edu/~eschulte [-- Attachment #2: ob-octave_matlab_updated.patch --] [-- Type: application/octet-stream, Size: 882 bytes --] diff --git a/lisp/ob-octave.el b/lisp/ob-octave.el index 9e85757..6428c8c 100644 --- a/lisp/ob-octave.el +++ b/lisp/ob-octave.el @@ -90,7 +90,7 @@ end") (if (org-babel-octave-graphical-output-file params) (mapconcat 'identity (list - "set (0, \"defaultfigurevisible\", \"off\");" + "set (0, 'defaultfigurevisible', 'off');" full-body (format "print -dpng %s" (org-babel-octave-graphical-output-file params))) "\n") @@ -231,8 +231,8 @@ value of the last statement in BODY, as elisp." (org-babel-comint-with-output (session (if matlabp - org-babel-octave-eoe-indicator - org-babel-octave-eoe-output) + org-babel-octave-eoe-output + org-babel-octave-eoe-indicator) t full-body) (insert full-body) (comint-send-input nil t)))) results) (case result-type ^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2012-05-30 16:59 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-05-24 21:02 [babel] ob-octave does not catch EOE from matlabShell on MS Windows Mikhail Titov 2012-05-24 21:30 ` Mikhail Titov 2012-05-25 16:31 ` Mikhail Titov 2012-05-25 16:52 ` [babel, patch] " Mikhail Titov 2012-05-28 15:56 ` Eric Schulte 2012-05-28 18:23 ` Achim Gratz 2012-05-30 15:58 ` Mikhail Titov 2012-05-30 16:05 ` Eric Schulte 2012-05-30 16:58 ` Achim Gratz 2012-05-29 17:00 ` Mikhail Titov
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).