emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Errors get suppressed by org-babel-execute-src-block


From: Aaron Ecay
Subject: Re: [O] Errors get suppressed by org-babel-execute-src-block
Date: Sun, 14 Feb 2016 16:07:18 +0000
User-agent: Notmuch/0.21+33~g570c0ae (http://notmuchmail.org) Emacs/25.0.50.2 (x86_64-unknown-linux-gnu)

Hi Nick,

2016ko otsailak 12an, Nick Dokos-ek idatzi zuen:
>> AFAICS my patch does not affect the work Michael did.  I will test some
>> simple remote execution scenarios before I push the patch, just in case.
>> 
> 
> OK - good!

I’ve tested, and remote execution seems to work (when tramp works for
me, which it does not do consistently – a known problem)

> 
>>> BTW, I tried to test, but applying the patch to current master
>>> (8eff64cffee8627578edc33de485201ae579fafe) fails:
>> 
>> Nicolas pushed some big changes to babel just after I sent my patch.
>> (Big in terms of the diff to the code, not necessarily in terms of
>> changing user behavior).  I haven’t looked in detail, but it’s almost
>> guaranteed that the patch now needs to be rebased, which I’ll do as
>> soon as I can.
> 
> Thanks! If you post the patch, I'll try out some simple tests over the
> weekend too.

It’s now split into two patches, attached to this message.

-- 
Aaron Ecay
>From 1e0f0e335bf594c6fe50581deb0775971a97f4f4 Mon Sep 17 00:00:00 2001
From: Aaron Ecay <address@hidden>
Date: Sun, 14 Feb 2016 15:14:30 +0000
Subject: [PATCH 1/2] Add org-babel-make-language-alias function.

* lisp/ob-core.el (org-babel-make-language-alias): New function.
* lisp/ob-emacs-lisp.el: Use it.

Previously this was accomplished via org-src-lang-modes, but that is a
poor solution, as it conflates the remapping of language mode names with
the creation of aliases.
---
 lisp/ob-core.el       | 20 ++++++++++++++++++++
 lisp/ob-emacs-lisp.el |  2 ++
 2 files changed, 22 insertions(+)

diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index 96296e0..7bd1156 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -3152,6 +3152,26 @@ plus the parameter value."
   (and (member "graphics" (cdr (assq :result-params params)))
        (cdr (assq :file params))))
 
+(defun org-babel-make-language-alias (new old)
+  "Make source blocks of type NEW aliases for those of type OLD.
+
+NEW and OLD should be strings.  This function should be called
+after the babel API for OLD-type source blocks is fully defined.
+
+Callers of this function will probably want to add an entry to
+`org-src-lang-modes' as well."
+  (dolist (fn '("execute" "expand-body" "prep-session"
+               "variable-assignments" "load-session"))
+    (let ((sym (intern-soft (concat "org-babel-" fn ":" old))))
+      (when (and sym (fboundp sym))
+       (defalias (intern (concat "org-babel-" fn ":" new)) sym))))
+  ;; Technically we don't need a `dolist' for just one variable, but
+  ;; we keep it for symmetry/ease of future expansion.
+  (dolist (var '("default-header-args"))
+    (let ((sym (intern-soft (concat "org-babel-" var ":" old))))
+      (when (and sym (boundp sym))
+       (defvaralias (intern (concat "org-babel-" var ":" new)) sym)))))
+
 (provide 'ob-core)
 
 ;; Local variables:
diff --git a/lisp/ob-emacs-lisp.el b/lisp/ob-emacs-lisp.el
index 18936a6..2eb2721 100644
--- a/lisp/ob-emacs-lisp.el
+++ b/lisp/ob-emacs-lisp.el
@@ -72,6 +72,8 @@
          (org-babel-pick-name (cdr (assoc :rowname-names params))
                               (cdr (assoc :rownames params))))))))
 
+(org-babel-make-language-alias "elisp" "emacs-lisp")
+
 (provide 'ob-emacs-lisp)
 
 
-- 
2.7.1

>From c5cf453d6f0c590dd99e9f607b2897965460f33f Mon Sep 17 00:00:00 2001
From: Aaron Ecay <address@hidden>
Date: Sun, 14 Feb 2016 15:20:39 +0000
Subject: [PATCH 2/2] ob-core: remove cruft
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* lisp/ob-core.el (org-babel-execute-src-block): Simplify.
(org-babel-tramp-handle-call-process-region): Remove.

Commit 57104f9f changed an org-flet to a let, rendering the whole
apparatus of modifying call-process-region inoperative.  Supposedly this
was put in place to work around a bug in
tramp-handle-call-process-region, which was removed from tramp in
2012 (after being renamed to tramp-sh-call-process-region).  *shrug*
This commit just removes the whole thing.

It also no longer consults ‘org-src-lang-modes’, following on from
commit 6287416.
---
 lisp/ob-core.el | 132 ++++++++++++++++++++------------------------------------
 1 file changed, 46 insertions(+), 86 deletions(-)

diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index 7bd1156..14226bf 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -35,7 +35,6 @@
       ".exe"
     nil))
 
-(defvar org-babel-call-process-region-original nil)
 (defvar org-babel-library-of-babel)
 (defvar org-edit-src-content-indentation)
 (defvar org-src-lang-modes)
@@ -547,7 +546,6 @@ match group 9.  Other match groups are defined in
   (concat org-babel-name-regexp (regexp-quote name) "[ \t]*$"))
 
 ;;; functions
-(defvar call-process-region)
 (defvar org-babel-current-src-block-location nil
   "Marker pointing to the src block currently being executed.
 This may also point to a call line or an inline code block.  If
@@ -678,71 +676,52 @@ block."
                 (default-directory
                   (or (and dir (file-name-as-directory (expand-file-name dir)))
                       default-directory))
-                (org-babel-call-process-region-original ;; for tramp handler
-                 (or (org-bound-and-true-p
-                      org-babel-call-process-region-original)
-                     (symbol-function 'call-process-region)))
-                result cmd)
-           (unwind-protect
-               (let ((call-process-region
-                      (lambda (&rest args)
-                        (apply 'org-babel-tramp-handle-call-process-region
-                               args))))
-                 (let ((lang-check
-                        (lambda (f)
-                          (let ((f (intern (concat "org-babel-execute:" f))))
-                            (when (fboundp f) f)))))
-                   (setq cmd
-                         (or (funcall lang-check lang)
-                             (funcall lang-check
-                                      (symbol-name
-                                       (cdr (assoc lang org-src-lang-modes))))
-                             (error "No org-babel-execute function for %s!"
-                                    lang))))
-                 (message "executing %s code block%s..."
-                          (capitalize lang)
-                          (if (nth 4 info) (format " (%s)" (nth 4 info)) ""))
-                 (if (member "none" result-params)
-                     (progn
-                       (funcall cmd body params)
-                       (message "result silenced")
-                       (setq result nil))
-                   (setq result
-                         (let ((result (funcall cmd body params)))
-                            (if (and (eq (cdr (assoc :result-type params))
-                                         'value)
-                                     (or (member "vector" result-params)
-                                         (member "table" result-params))
-                                     (not (listp result)))
-                                (list (list result)) result)))
-                   ;; If non-empty result and :file then write to :file.
-                   (when (cdr (assoc :file params))
-                     (when result
-                       (with-temp-file (cdr (assoc :file params))
-                         (insert
-                          (org-babel-format-result
-                           result (cdr (assoc :sep (nth 2 info)))))))
-                     (setq result (cdr (assoc :file params))))
-                   ;; Possibly perform post process provided its appropriate.
-                   (when (cdr (assoc :post params))
-                     (let ((*this* (if (cdr (assoc :file params))
-                                       (org-babel-result-to-file
-                                        (cdr (assoc :file params))
-                                        (when (assoc :file-desc params)
-                                          (or (cdr (assoc :file-desc params))
-                                              result)))
-                                     result)))
-                       (setq result (org-babel-ref-resolve
-                                     (cdr (assoc :post params))))
-                       (when (cdr (assoc :file params))
-                         (setq result-params
-                               (remove "file" result-params)))))
-                   (org-babel-insert-result
-                    result result-params info new-hash lang))
-                  (run-hooks 'org-babel-after-execute-hook)
-                 result)
-             (setq call-process-region
-                   'org-babel-call-process-region-original)))))))))
+                (cmd (intern (concat "org-babel-execute:" lang)))
+                result)
+           (unless (fboundp cmd)
+             (error "No org-babel-execute function for %s!" lang))
+           (message "executing %s code block%s..."
+                    (capitalize lang)
+                    (if (nth 4 info) (format " (%s)" (nth 4 info)) ""))
+           (if (member "none" result-params)
+               (progn
+                 (funcall cmd body params)
+                 (message "result silenced")
+                 (setq result nil))
+             (setq result
+                   (let ((result (funcall cmd body params)))
+                     (if (and (eq (cdr (assoc :result-type params))
+                                  'value)
+                              (or (member "vector" result-params)
+                                  (member "table" result-params))
+                              (not (listp result)))
+                         (list (list result)) result)))
+             ;; If non-empty result and :file then write to :file.
+             (when (cdr (assoc :file params))
+               (when result
+                 (with-temp-file (cdr (assoc :file params))
+                   (insert
+                    (org-babel-format-result
+                     result (cdr (assoc :sep (nth 2 info)))))))
+               (setq result (cdr (assoc :file params))))
+             ;; Possibly perform post process provided its appropriate.
+             (when (cdr (assoc :post params))
+               (let ((*this* (if (cdr (assoc :file params))
+                                 (org-babel-result-to-file
+                                  (cdr (assoc :file params))
+                                  (when (assoc :file-desc params)
+                                    (or (cdr (assoc :file-desc params))
+                                        result)))
+                               result)))
+                 (setq result (org-babel-ref-resolve
+                               (cdr (assoc :post params))))
+                 (when (cdr (assoc :file params))
+                   (setq result-params
+                         (remove "file" result-params)))))
+             (org-babel-insert-result
+              result result-params info new-hash lang))
+           (run-hooks 'org-babel-after-execute-hook)
+           result)))))))
 
 (defun org-babel-expand-body:generic (body params &optional var-lines)
   "Expand BODY with PARAMS.
@@ -2974,25 +2953,6 @@ character of the string."
    (org-reverse-string
     (org-babel-chomp (org-reverse-string string) regexp)) regexp))
 
-(defun org-babel-tramp-handle-call-process-region
-  (start end program &optional delete buffer display &rest args)
-  "Use Tramp to handle `call-process-region'.
-Fixes a bug in `tramp-handle-call-process-region'."
-  (if (and (featurep 'tramp) (file-remote-p default-directory))
-      (let ((tmpfile (tramp-compat-make-temp-file "")))
-       (write-region start end tmpfile)
-       (when delete (delete-region start end))
-       (unwind-protect
-           ;;  (apply 'call-process program tmpfile buffer display args)
-            ;; bug in tramp
-           (apply 'process-file program tmpfile buffer display args)
-         (delete-file tmpfile)))
-    ;; org-babel-call-process-region-original is the original emacs
-    ;; definition.  It is in scope from the let binding in
-    ;; org-babel-execute-src-block
-    (apply org-babel-call-process-region-original
-           start end program delete buffer display args)))
-
 (defun org-babel-local-file-name (file)
   "Return the local name component of FILE."
   (or (file-remote-p file 'localname) file))
-- 
2.7.1


reply via email to

[Prev in Thread] Current Thread [Next in Thread]