Hi, On Sat, Mar 12, 2011 at 22:26, Martyn Jago <martyn.j...@btinternet.com> wrote: > --8<---------------cut here---------------start------------->8--- > * Unmatched #+end-src bug > > #+end_src > --8<---------------cut here---------------end--------------->8--- > > With the above simple org file, placing the cursor at the end of > #+end_src and hitting return causes emacs to hang. > > The bug can be replicated with the following simple test which also > causes emacs to hang... > > [snip] > > It appears to be related to the following in 'org-in-item-p > (org-list.el)... > > --8<---------------cut here---------------start------------->8--- > ((looking-at "^[ \t]*#\\+end_") > (re-search-backward "^[ \t]*#\\+begin_" nil t)) > --8<---------------cut here---------------end--------------->8--- > > I've tried to pin down the bug but its left me perplexed, so I'm going > to defer to more experienced org lispers!
The =cond= is part of a =while= loop; it just keeps looping, entering that branch and doing nothing (rather than moving point and picking up again from there). Going by the other branches, I think the correct thing to do is just exit the loop: --8<---------------cut here---------------start------------->8--- diff --git a/lisp/org-list.el b/lisp/org-list.el --- a/lisp/org-list.el +++ b/lisp/org-list.el @@ -450,17 +450,19 @@ This checks `org-list-ending-method'." ;; At upper bound of search or looking at the end of a ;; previous list: search is over. ((<= (point) lim-up) (throw 'exit nil)) ((and (not (eq org-list-ending-method 'indent)) (looking-at org-list-end-re)) (throw 'exit nil)) ;; Skip blocks, drawers, inline-tasks, blank lines ((looking-at "^[ \t]*#\\+end_") - (re-search-backward "^[ \t]*#\\+begin_" nil t)) + (condition-case nil + (re-search-backward "^[ \t]*#\\+begin_" nil) + (search-failed (throw 'exit nil)))) ((looking-at "^[ \t]*:END:") (re-search-backward org-drawer-regexp nil t) (beginning-of-line)) ((and inlinetask-re (looking-at inlinetask-re)) (org-inlinetask-goto-beginning) (forward-line -1)) ((looking-at "^[ \t]*$") (forward-line -1)) ;; Text at column 0 cannot belong to a list: stop. --8<---------------cut here---------------end--------------->8--- Hope this helps, Aankhen