Re: [O] Bug: tangling with elisp as lang in a noweb reference doesn't work [9.1.9 (release_9.1.9-65-g5e4542 @ /usr/local/share/emacs/26.2/lisp/org/)]
No problem! I have some more coming up :-) I've been looking at getting org-babel to add line directives for languages that support it. (c, c++, haskell...). It would make literate programming for these kinds of languages much better, and other people have been complaining e.g. https://paulbatchelor.github.io/blog/posts/2018-09-21-org-babel-impressions.html Unfortunately there is no easy way to hook this into org-babel now without doing some rather intrusive work. 1) The language specific expansions don't know the file or the line a block comes from, and noweb references have already been expanded. 2) The tangle-body-hook is useless since it runs in a temp buffer that doesn't even have the major mode set for the language you're tangling to. 3) The :comments mechanism is not strong enough to allow language specific comments and it 's different for noweb vs. normal block expansion. Would there be interest in such a feature, if it doesn't change current behaviour? Immanuel On Fri, Aug 30, 2019 at 11:37 PM Nicolas Goaziou wrote: > > Hello, > > immanuel writes: > > > #+NAME: this is a test > > #+BEGIN_SRC elisp :tangle no > > > > (message \"aha\") #+END_SRC > > > > #+BEGIN_SRC elisp :noweb yes :comments noweb :tangle out.el > > first > > <> > > second > > #+END_SRC > > > > #+BEGIN_SRC elisp :tangle no > > (progn > > (org-babel-tangle) > > (with-temp-buffer > > (insert-file-contents "out.el") > > (buffer-string) > > #+END_SRC > > > > > > Doesn't work. The reason is that the function > > org-babel-expand-noweb-references uses > > > > #+BEGIN_SRC emacs-lisp > > (c-wrap (lambda (text) > > (with-temp-buffer > > (funcall (intern (concat lang "-mode"))) > > ... > > #+END_SRC > > Fixed! Thank you for the report and the analysis. > > Regards, > > -- > Nicolas Goaziou
Re: [O] Bug: tangling with elisp as lang in a noweb reference doesn't work [9.1.9 (release_9.1.9-65-g5e4542 @ /usr/local/share/emacs/26.2/lisp/org/)]
Hello, immanuel writes: > #+NAME: this is a test > #+BEGIN_SRC elisp :tangle no > > (message \"aha\") #+END_SRC > > #+BEGIN_SRC elisp :noweb yes :comments noweb :tangle out.el > first > <> > second > #+END_SRC > > #+BEGIN_SRC elisp :tangle no > (progn > (org-babel-tangle) > (with-temp-buffer > (insert-file-contents "out.el") > (buffer-string) > #+END_SRC > > > Doesn't work. The reason is that the function > org-babel-expand-noweb-references uses > > #+BEGIN_SRC emacs-lisp > (c-wrap (lambda (text) > (with-temp-buffer > (funcall (intern (concat lang "-mode"))) > ... > #+END_SRC Fixed! Thank you for the report and the analysis. Regards, -- Nicolas Goaziou
[O] Bug: tangling with elisp as lang in a noweb reference doesn't work [9.1.9 (release_9.1.9-65-g5e4542 @ /usr/local/share/emacs/26.2/lisp/org/)]
Remember to cover the basics, that is, what you expected to happen and what in fact did happen. You don't know how to make a good report? See https://orgmode.org/manual/Feedback.html#Feedback Your bug report will be posted to the Org mailing list. #+NAME: this is a test #+BEGIN_SRC elisp :tangle no (message \"aha\") #+END_SRC #+BEGIN_SRC elisp :noweb yes :comments noweb :tangle out.el first <> second #+END_SRC #+BEGIN_SRC elisp :tangle no (progn (org-babel-tangle) (with-temp-buffer (insert-file-contents "out.el") (buffer-string) #+END_SRC Doesn't work. The reason is that the function org-babel-expand-noweb-references uses #+BEGIN_SRC emacs-lisp (c-wrap (lambda (text) (with-temp-buffer (funcall (intern (concat lang "-mode"))) ... #+END_SRC Instead of the possibly more correct turning on of the major mode that is found in org-babel-tangle: #+BEGIN_SRC emacs-lisp (lang-f (intern (concat (or (and (cdr (assoc lang org-src-lang-modes)) (symbol-name (cdr (assoc lang org-src-lang-modes lang) "-mode"))) #+END_SRC Immanuel Emacs : GNU Emacs 26.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30) of 2019-07-17 Package: Org mode version 9.1.9 (release_9.1.9-65-g5e4542 @ /usr/local/share/emacs/26.2/lisp/org/) current state: == (setq org-src-mode-hook '(org-src-babel-configure-edit-buffer org-src-mode-configure-edit-buffer) org-after-todo-state-change-hook '(org-clock-out-if-current) org-latex-listings t org-metadown-hook '(org-babel-pop-to-session-maybe) org-clock-out-hook '(org-clock-remove-empty-clock-drawer) org-html-format-inlinetask-function 'org-html-format-inlinetask-default-function org-odt-format-headline-function 'org-odt-format-headline-default-function org-ascii-format-inlinetask-function 'org-ascii-format-inlinetask-default org-reveal-start-hook '(org-decrypt-entry) org-plantuml-jar-path "/home/immanuel/bin/plantuml.jar" org-mode-hook '(#[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-show-block-all append local] 5] #[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-babel-show-result-all append local] 5] org-babel-result-hide-spec org-babel-hide-all-hashes auto-fill-mode) org-odt-format-drawer-function #[514 "\207" [] 3 "\n\n(fn NAME CONTENTS)"] org-archive-hook '(org-attach-archive-delete-maybe) org-confirm-elisp-link-function 'yes-or-no-p org-agenda-before-write-hook '(org-agenda-add-entry-text) org-metaup-hook '(org-babel-load-in-session-maybe) org-bibtex-headline-format-function #[257 "\300\236A\207" [:title] 3 "\n\n(fn ENTRY)"] org-from-is-user-regexp "|\\" org-latex-format-drawer-function #[514 "\207" [] 3 "\n\n(fn _ CONTENTS)"] org-babel-pre-tangle-hook '(save-buffer) org-tab-first-hook '(org-babel-hide-result-toggle-maybe org-babel-header-arg-expand) org-babel-load-languages '((emacs-lisp . t) (C . t) (python . t) (lilypond . t) (shell . t) (plantuml . t)) org-log-done 'time org-ascii-format-drawer-function #[771 "\207" [] 4 "\n\n(fn NAME CONTENTS WIDTH)"] org-babel-python-command "ipython --simple-prompt -i --pylab" org-src-preserve-indentation t org-occur-hook '(org-first-headline-recenter) org-structure-template-alist '(("r" "#+BEGIN_SRC rust\n?\n#+END_SRC") ("p" "#+BEGIN_SRC plantuml\n?\n#+END_SRC") ("ha" "#+BEGIN_SRC haskell\n?\n#+END_SRC") ("ly" "#+LaTeX: \\linebreak\n#+ATTR_LaTeX: width=17cm\n#+BEGIN_SRC lilypond :file ?.png :noweb yes\n#+END_SRC") ("bnf" "#+BEGIN_SRC abnf\n?\n#+END_SRC") ("cpp" "#+NAME:\n#+HEADER: :tangle\n#+HEADER: :main no\n#+HEADER: :noeval\n#+HEADER: :noweb yes\n#+BEGIN_SRC cpp\n?\n#+END_SRC") ("yp" "#+END_SRC\n?\n#+BEGIN_SRC python :noweb yes") ("py" "#+BEGIN_SRC python :noweb yes\n?\n#+END_SRC") ("ab" "#+END_SRC\n#+BEGIN_SRC bash") ("ba" "#+BEGIN_SRC bash?\n#+END_SRC") ("le" "#+END_SRC\n#+BEGIN_SRC emacs-lisp?") ("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC") ("s" "#+BEGIN_SRC ?\n\n#+END_SRC") ("e" "#+BEGIN_EXAMPLE\n?\n#+END_EXAMPLE") ("q" "#+BEGIN_QUOTE\n?\n#+END_QUOTE") ("v" "#+BEGIN_VERSE\n?\n#+END_VERSE") ("V" "#+BEGIN_VERBATIM\n?\n#+END_VERBATIM") ("c" "#+BEGIN_CENTER\n?\n#+END_CENTER") ("C" "#+BEGIN_COMMENT\n?\n#+END_COMMENT") ("l" "#+BEGIN_EXPORT latex\n?\n#+END_EXPORT") ("L" "#+LaTeX: ") ("h" "#+BEGIN_EXPORT html\n?\n#+END_EXPORT") ("H" "#+HTML: ")