"Sebastien Vauban" <sva-n...@mygooglest.com>
writes:

> Glenn Morris wrote:
>> Apparently this is fixed:
>>
>> http://lists.gnu.org/archive/html/emacs-orgmode/2013-11/msg00682.html
>
> Sadly, it's only partially fixed: if it is WELL fixed for the original code,
> the problem comes BACK with the following minimized Emacs file:
>
> (add-to-list 'load-path "~/Public/Repositories/org-mode/testing")
> (add-to-list 'load-path "~/Public/Repositories/org-mode/contrib/lisp")
> (add-to-list 'load-path "~/Public/Repositories/org-mode/lisp")
>
> ;; getting started
> (require 'org-loaddefs)
> (add-to-list 'auto-mode-alist '("\\.txt\\'" . org-mode))
> (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
>
> (with-eval-after-load "ob-lob"
>   ;; load some code blocks into the library of Babel
>   (let ((lob-file (concat (file-name-directory (locate-library "org"))
>                           "../doc/library-of-babel.org")))
>     (when (file-exists-p lob-file)
>       (org-babel-lob-ingest lob-file))))
>
> (with-eval-after-load "org"
>   (message "Eval this when Org is loaded")
>   (sit-for 3)
>   (message ""))
>
> (message "End of minimal .emacs")
>
> FYI, I just added the lines 10-15 (expression with `ob-lob').
>
> That's only reproducible with a development branch of Org mode, as
> library-of-babel.org is not copied into the official Emacs release.
>

Well, Nicolas warned us that we are not out of the woods yet. I repeated
the previous exercise, this time with the following file:

--8<---------------cut here---------------start------------->8---
(add-to-list 'load-path (expand-file-name "~/src/emacs/org/org-mode/lisp"))
(add-to-list 'load-path (expand-file-name 
"~/src/emacs/org/org-mode/contrib/lisp"))

(add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\|txt\\)$" . org-mode))

(require 'org-loaddefs)

(with-eval-after-load "ob-lob"
  ;; load some code blocks into the library of Babel
  (let ((lob-file (concat (file-name-directory (locate-library "org"))
                          "../doc/library-of-babel.org")))
    (when (file-exists-p lob-file)
      (org-babel-lob-ingest lob-file))))

(defun foobar ()
  (message "LOADED") (sit-for 3) (message ""))

(setq org-load-hook (function foobar))
--8<---------------cut here---------------end--------------->8---

started emacs with

  emacs -Q -l ./double-load.el

edebugged foobar and C-x C-f foo.org. It stopped at foobar twice
and I got the following backtraces at the two stopping points.

The first backtrace looks like this:

--8<---------------cut here---------------start------------->8---
  foobar()
  run-hooks(org-load-hook)
  eval-buffer(#<buffer  *load*-648596> nil 
"/home/nick/src/emacs/org/org-mode/lisp/org.el" nil t)
  load-with-code-conversion("/home/nick/src/emacs/org/org-mode/lisp/org.el" 
"/home/nick/src/emacs/org/org-mode/lisp/org.el" nil t)
  org-mode()
  set-auto-mode-0(org-mode nil)
  set-auto-mode()
  normal-mode(t)
  after-find-file(nil t)
  find-file-noselect-1(#<buffer library-of-babel.org> 
"~/src/emacs/org/org-mode/doc/library-of-babel.org" nil nil 
"~/src/emacs/org/org-mode/doc/library-of-babel.org" (16393680 2097))
  
find-file-noselect("/home/nick/src/emacs/org/org-mode/lisp/../doc/library-of-babel.org"
 nil nil nil)
  
find-file("/home/nick/src/emacs/org/org-mode/lisp/../doc/library-of-babel.org")
  (progn (find-file file))
  (if file (progn (find-file file)))
  (progn (if file (progn (find-file file))) (setq to-be-removed 
(current-buffer)) (goto-char (point-min)) (while (re-search-forward 
org-babel-src-block-regexp nil t) (if (org-babel-active-location-p) (progn 
(goto-char (match-beginning 0)) (let ((full-block (match-string 0)) (beg-block 
(match-beginning 0)) (end-block (match-end 0)) (lang (match-string 2)) 
(beg-lang (match-beginning 2)) (end-lang (match-end 2)) (switches (match-string 
3)) (beg-switches (match-beginning 3)) (end-switches (match-end 3)) 
(header-args (match-string 4)) (beg-header-args (match-beginning 4)) 
(end-header-args (match-end 4)) (body (match-string 5)) (beg-body 
(match-beginning 5)) (end-body (match-end 5))) (let* ((info ...) (source-name 
...)) (if source-name (progn ...))) (goto-char end-block))))))
  (unwind-protect (progn (if file (progn (find-file file))) (setq to-be-removed 
(current-buffer)) (goto-char (point-min)) (while (re-search-forward 
org-babel-src-block-regexp nil t) (if (org-babel-active-location-p) (progn 
(goto-char (match-beginning 0)) (let ((full-block ...) (beg-block ...) 
(end-block ...) (lang ...) (beg-lang ...) (end-lang ...) (switches ...) 
(beg-switches ...) (end-switches ...) (header-args ...) (beg-header-args ...) 
(end-header-args ...) (body ...) (beg-body ...) (end-body ...)) (let* (... ...) 
(if source-name ...)) (goto-char end-block)))))) (set-window-configuration 
wconfig))
  (let ((wconfig (current-window-configuration))) (unwind-protect (progn (if 
file (progn (find-file file))) (setq to-be-removed (current-buffer)) (goto-char 
(point-min)) (while (re-search-forward org-babel-src-block-regexp nil t) (if 
(org-babel-active-location-p) (progn (goto-char (match-beginning 0)) (let (... 
... ... ... ... ... ... ... ... ... ... ... ... ... ...) (let* ... ...) 
(goto-char end-block)))))) (set-window-configuration wconfig)))
  (let* ((file file) (visited-p (or (null file) (get-file-buffer 
(expand-file-name file)))) (point (point)) to-be-removed) (let ((wconfig 
(current-window-configuration))) (unwind-protect (progn (if file (progn 
(find-file file))) (setq to-be-removed (current-buffer)) (goto-char 
(point-min)) (while (re-search-forward org-babel-src-block-regexp nil t) (if 
(org-babel-active-location-p) (progn (goto-char ...) (let ... ... ...))))) 
(set-window-configuration wconfig))) (if visited-p nil (kill-buffer 
to-be-removed)) (goto-char point))
  (let ((lob-ingest-count 0)) (let* ((file file) (visited-p (or (null file) 
(get-file-buffer (expand-file-name file)))) (point (point)) to-be-removed) (let 
((wconfig (current-window-configuration))) (unwind-protect (progn (if file 
(progn (find-file file))) (setq to-be-removed (current-buffer)) (goto-char 
(point-min)) (while (re-search-forward org-babel-src-block-regexp nil t) (if 
(org-babel-active-location-p) (progn ... ...)))) (set-window-configuration 
wconfig))) (if visited-p nil (kill-buffer to-be-removed)) (goto-char point)) 
(message "%d src block%s added to Library of Babel" lob-ingest-count (if (> 
lob-ingest-count 1) "s" "")) lob-ingest-count)
  
org-babel-lob-ingest("/home/nick/src/emacs/org/org-mode/lisp/../doc/library-of-babel.org")
  (progn (org-babel-lob-ingest lob-file))
  (if (file-exists-p lob-file) (progn (org-babel-lob-ingest lob-file)))
  (let ((lob-file (concat (file-name-directory (locate-library "org")) 
"../doc/library-of-babel.org"))) (if (file-exists-p lob-file) (progn 
(org-babel-lob-ingest lob-file))))
  (lambda nil (let ((lob-file (concat (file-name-directory (locate-library 
"org")) "../doc/library-of-babel.org"))) (if (file-exists-p lob-file) (progn 
(org-babel-lob-ingest lob-file)))))()
  funcall((lambda nil (let ((lob-file (concat (file-name-directory 
(locate-library "org")) "../doc/library-of-babel.org"))) (if (file-exists-p 
lob-file) (progn (org-babel-lob-ingest lob-file))))))
  mapc(funcall ((lambda nil (let ((lob-file (concat (file-name-directory 
(locate-library "org")) "../doc/library-of-babel.org"))) (if (file-exists-p 
lob-file) (progn (org-babel-lob-ingest lob-file)))))))
  do-after-load-evaluation("/home/nick/src/emacs/org/org-mode/lisp/ob-lob.el")
  load-with-code-conversion("/home/nick/src/emacs/org/org-mode/lisp/ob-lob.el" 
"/home/nick/src/emacs/org/org-mode/lisp/ob-lob.el" nil t)
  require(ob-lob)
  eval-buffer(#<buffer  *load*-685075> nil 
"/home/nick/src/emacs/org/org-mode/lisp/ob.el" nil t)
  load-with-code-conversion("/home/nick/src/emacs/org/org-mode/lisp/ob.el" 
"/home/nick/src/emacs/org/org-mode/lisp/ob.el" nil t)
  require(ob)
  eval-buffer(#<buffer  *load*-632088> nil 
"/home/nick/src/emacs/org/org-mode/lisp/ob-emacs-lisp.el" nil t)
  
load-with-code-conversion("/home/nick/src/emacs/org/org-mode/lisp/ob-emacs-lisp.el"
 "/home/nick/src/emacs/org/org-mode/lisp/ob-emacs-lisp.el" nil t)
  require(ob-emacs-lisp)
  (progn (require (intern (concat "ob-" lang))))
  (if active (progn (require (intern (concat "ob-" lang)))) (progn (funcall 
(quote fmakunbound) (intern (concat "org-babel-execute:" lang))) (funcall 
(quote fmakunbound) (intern (concat "org-babel-expand-body:" lang)))))
  (let ((active (cdr pair)) (lang (symbol-name (car pair)))) (if active (progn 
(require (intern (concat "ob-" lang)))) (progn (funcall (quote fmakunbound) 
(intern (concat "org-babel-execute:" lang))) (funcall (quote fmakunbound) 
(intern (concat "org-babel-expand-body:" lang))))))
  (lambda (pair) (let ((active (cdr pair)) (lang (symbol-name (car pair)))) (if 
active (progn (require (intern (concat "ob-" lang)))) (progn (funcall (quote 
fmakunbound) (intern (concat "org-babel-execute:" lang))) (funcall (quote 
fmakunbound) (intern (concat "org-babel-expand-body:" lang)))))))((emacs-lisp . 
t))
  mapc((lambda (pair) (let ((active (cdr pair)) (lang (symbol-name (car 
pair)))) (if active (progn (require (intern (concat "ob-" lang)))) (progn 
(funcall (quote fmakunbound) (intern (concat "org-babel-execute:" lang))) 
(funcall (quote fmakunbound) (intern (concat "org-babel-expand-body:" 
lang))))))) ((emacs-lisp . t)))
  org-babel-do-load-languages(org-babel-load-languages ((emacs-lisp . t)))
  custom-initialize-reset(org-babel-load-languages (quote ((emacs-lisp . t))))
  custom-declare-variable(org-babel-load-languages (quote ((emacs-lisp . t))) 
"Languages which can be evaluated in Org-mode buffers.\nThis list can be used 
to load support for any of the languages\nbelow, note that each language will 
depend on a different set of\nsystem executables and/or Emacs modes.  When a 
language is\n\"loaded\", then code blocks in that language can be 
evaluated\nwith `org-babel-execute-src-block' bound by default to C-c\nC-c 
(note the `org-babel-no-eval-on-ctrl-c-ctrl-c' variable can\nbe set to remove 
code block evaluation from the C-c C-c\nkeybinding.  By default only Emacs Lisp 
(which has no\nrequirements) is loaded." :group org-babel :set 
org-babel-do-load-languages :version "24.1" :type (alist :tag "Babel Languages" 
:key-type (choice (const :tag "Awk" awk) (const :tag "C" C) (const :tag "R" R) 
(const :tag "Asymptote" asymptote) (const :tag "Calc" calc) (const :tag 
"Clojure" clojure) (const :tag "CSS" css) (const :tag "Ditaa" ditaa) (const 
:tag "Dot" dot) (const :tag "Emacs Lisp" emacs-lisp) (const :tag "Fortran" 
fortran) (const :tag "Gnuplot" gnuplot) (const :tag "Haskell" haskell) (const 
:tag "IO" io) (const :tag "Java" java) (const :tag "Javascript" js) (const :tag 
"LaTeX" latex) (const :tag "Ledger" ledger) (const :tag "Lilypond" lilypond) 
(const :tag "Lisp" lisp) (const :tag "Makefile" makefile) (const :tag "Maxima" 
maxima) (const :tag "Matlab" matlab) (const :tag "Mscgen" mscgen) (const :tag 
"Ocaml" ocaml) (const :tag "Octave" octave) (const :tag "Org" org) (const :tag 
"Perl" perl) (const :tag "Pico Lisp" picolisp) (const :tag "PlantUML" plantuml) 
(const :tag "Python" python) (const :tag "Ruby" ruby) (const :tag "Sass" sass) 
(const :tag "Scala" scala) (const :tag "Scheme" scheme) (const :tag "Screen" 
screen) (const :tag "Shell Script" sh) (const :tag "Shen" shen) (const :tag 
"Sql" sql) (const :tag "Sqlite" sqlite) (const :tag "ebnf2ps" ebnf2ps)) 
:value-type (boolean :tag "Activate" :value t)))
  eval-buffer(#<buffer  *load*> nil 
"/home/nick/src/emacs/org/org-mode/lisp/org.el" nil t)
  load-with-code-conversion("/home/nick/src/emacs/org/org-mode/lisp/org.el" 
"/home/nick/src/emacs/org/org-mode/lisp/org.el" nil t)
  org-mode()
  set-auto-mode-0(org-mode nil)
  set-auto-mode()
  normal-mode(t)
  after-find-file(t t)
  find-file-noselect-1(#<buffer foo.org> "~/src/emacs/org/org-mode/foo.org" nil 
nil "~/src/emacs/org/org-mode/foo.org" nil)
  find-file-noselect("~/src/emacs/org/org-mode/foo.org" nil nil t)
  find-file("~/src/emacs/org/org-mode/foo.org" t)
  call-interactively(find-file nil nil)
  command-execute(find-file)
--8<---------------cut here---------------end--------------->8---

The second backtrace is "normal":

--8<---------------cut here---------------start------------->8---
  foobar()
  run-hooks(org-load-hook)
  eval-buffer(#<buffer  *load*> nil 
"/home/nick/src/emacs/org/org-mode/lisp/org.el" nil t)
  load-with-code-conversion("/home/nick/src/emacs/org/org-mode/lisp/org.el" 
"/home/nick/src/emacs/org/org-mode/lisp/org.el" nil t)
  org-mode()
  set-auto-mode-0(org-mode nil)
  set-auto-mode()
  normal-mode(t)
  after-find-file(t t)
  find-file-noselect-1(#<buffer foo.org> "~/src/emacs/org/org-mode/foo.org" nil 
nil "~/src/emacs/org/org-mode/foo.org" nil)
  find-file-noselect("~/src/emacs/org/org-mode/foo.org" nil nil t)
  find-file("~/src/emacs/org/org-mode/foo.org" t)
  call-interactively(find-file nil nil)
  command-execute(find-file)
--8<---------------cut here---------------end--------------->8---

HTH.

-- 
Nick


Reply via email to