emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [Orgmode] Org Babel Bug


From: Eric Schulte
Subject: Re: [Orgmode] Org Babel Bug
Date: Tue, 09 Feb 2010 09:54:55 -0700
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.90 (gnu/linux)

Hi Ian,

The implementation of our block exportation has been bothering me for
some time now.  The attached patch *greatly* simplifies the exportation
code.  Could you please give it a try and let me know if it fixes your
bug?

If so I will apply it to the main repository.

Thanks -- Eric

diff --git a/contrib/babel/lisp/org-babel-exp.el 
b/contrib/babel/lisp/org-babel-exp.el
index 8ce52b6..b299d57 100644
--- a/contrib/babel/lisp/org-babel-exp.el
+++ b/contrib/babel/lisp/org-babel-exp.el
@@ -73,20 +73,10 @@ results - just like none only the block is run on export 
ensuring
 none ----- do not display either code or results upon export"
   (interactive)
   (message "org-babel-exp processing...")
-  (flet ((cond-progress-marker () (when (and progress-marker (< 
progress-marker (point)))
-                                   progress-marker)))
-    (or (and (re-search-backward org-babel-src-block-regexp 
(cond-progress-marker) t)
-             (setq progress-marker (match-end 0))
-             (org-babel-exp-do-export (org-babel-get-src-block-info) 'block))
-        (save-excursion
-          (forward-line 0)
-          (and (org-babel-where-is-src-block-head)
-               (goto-char (org-babel-where-is-src-block-head))
-               (org-babel-exp-do-export (org-babel-get-src-block-info) 
'block)))
-        (and (re-search-backward org-block-regexp (cond-progress-marker) t)
-             (setq progress-marker (match-end 0))
-             (match-string 0))
-        (error "Unmatched block [bug in `org-babel-exp-src-blocks']."))))
+  (when (member (first headers) org-babel-interpreters)
+    (save-excursion
+      (goto-char (match-beginning 0))
+      (org-babel-exp-do-export (org-babel-get-src-block-info) 'block))))
 
 (defun org-babel-exp-inline-src-blocks (start end)
   "Process inline src blocks between START and END for export.
diff --git a/lisp/org-exp-blocks.el b/lisp/org-exp-blocks.el
index 1d43d3a..af53b60 100644
--- a/lisp/org-exp-blocks.el
+++ b/lisp/org-exp-blocks.el
@@ -183,13 +183,15 @@ specified in BLOCKS which default to the value of
            (setq body (save-match-data (org-remove-indentation body))))
          (unless (memq type types) (setq types (cons type types)))
          (save-match-data (interblock start (match-beginning 0)))
-         (if (setq func (cadr (assoc type org-export-blocks)))
-             (progn
-                (replace-match (save-match-data
+         (when (setq func (cadr (assoc type org-export-blocks)))
+            (let ((replacement (save-match-data
                                  (if (memq type org-export-blocks-witheld) ""
-                                   (apply func body headers))) t t)
+                                   (apply func body headers)))))
+              (when replacement
+                (replace-match replacement t t)
                 (unless preserve-indent
-                 (indent-code-rigidly (match-beginning 0) (match-end 0) 
indentation))))
+                  (indent-code-rigidly
+                   (match-beginning 0) (match-end 0) indentation)))))
          (setq start (match-end 0)))
        (interblock start (point-max))))))
 
Ian Barton <address@hidden> writes:

> I am using Babel to maintein my .emacs file. When I try to publish I
> am getting a Babel error from one of my org files. The offending
> section of the org file seems to be:
>
> #+BEGIN_SRC emacs-shell
>   127.0.0.1 mail.wilkesley.org localhost
>
>   # The following lines are desirable for IPv6 capable hosts
>   ::1 ip6-localhost ip6-loopback
>   fe00::0 ip6-localnet
>   ff00::0 ip6-mcastprefix
>   ff02::1 ip6-allnodes
>   ff02::2 ip6-allrouters
>   ff02::3 ip6-allhosts
>
> #+END_SRC
>
> I am using a recent git checkout of org and GNU Emacs 23.1.50.1
> (x86_64-pc-linux-gnu, GTK+ Version 2.18.0).
>
> The backtrace is:
>
> Debugger entered--Lisp error: (error "Unmatched block [bug in
> org-babel-exp-src-blocks'].")
>   signal(error ("Unmatched block [bug in `org-babel-exp-src-blocks']."))
>   error("Unmatched block [bug in `org-babel-exp-src-blocks'].")
>   (or (and (re-search-backward org-babel-src-block-regexp ... t) (setq
> progress-marker ...) (org-babel-exp-do-export ... ...))
> (save-excursion (forward-line 0) (and ... ... ...)) (and
> (re-search-backward org-block-regexp ... t) (setq progress-marker ...)
> (match-string 0)) (error "Unmatched block [bug in
> org-babel-exp-src-blocks']."))
>   (progn (fset (quote cond-progress-marker) (function* ...)) (or (and
> ... ... ...) (save-excursion ... ...) (and ... ... ...) (error
> "Unmatched block [bug in `org-babel-exp-src-blocks'].")))
>   (unwind-protect (progn (fset ... ...) (or ... ... ... ...)) (if
> --cl-letf-bound-- (fset ... --cl-letf-save--) (fmakunbound ...)))
>   (let* ((--cl-letf-bound-- ...) (--cl-letf-save-- ...))
> (unwind-protect (progn ... ...) (if --cl-letf-bound-- ... ...)))
>   (letf ((... ...)) (or (and ... ... ...) (save-excursion ... ...)
> (and ... ... ...) (error "Unmatched block [bug in
> org-babel-exp-src-blocks'].")))
>   (letf* ((... ...)) (or (and ... ... ...) (save-excursion ... ...)
> (and ... ... ...) (error "Unmatched block [bug in
> org-babel-exp-src-blocks'].")))
>   (flet ((cond-progress-marker nil ...)) (or (and ... ... ...)
> (save-excursion ... ...) (and ... ... ...) (error "Unmatched block
> [bug in `org-babel-exp-src-blocks'].")))
>   org-babel-exp-src-blocks(#("127.0.0.1 mail.wilkesley.org
> localhost\n\n# The following lines are desirable for IPv6 capable
> hosts\n::1 ip6-localhost ip6-loopback\nfe00::0 ip6-localnet\nff00::0
> ip6-mcastprefix\nff02::1 ip6-allnodes\nff02::2 ip6-allrouters\nff02::3
> ip6-allhosts\n" 0 240 (fontified nil)) #("emacs-shell" 0 11 (fontified
> nil)))
>   apply(org-babel-exp-src-blocks #("127.0.0.1 mail.wilkesley.org
> localhost\n\n# The following lines are desirable for IPv6 capable
> hosts\n::1 ip6-localhost ip6-loopback\nfe00::0 ip6-localnet\nff00::0
> ip6-mcastprefix\nff02::1 ip6-allnodes\nff02::2 ip6-allrouters\nff02::3
> ip6-allhosts\n" 0 240 (fontified nil)) #("emacs-shell" 0 11 (fontified
> nil)))
>
> byte-code("\306\307\211\211\211\211\211\211\211\211....#.$.%.&\310\311!\211.'\205#
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> address@hidden
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

reply via email to

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