emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [BUG] Reference chains (C refers to B refers to A) in tangle do not behave as expected [9.5.5 (release_9.5.5 @ /usr/local/share/emacs/28.2/lisp/org/)]
@ 2024-05-20 16:44 C. M. Sperberg-McQueen
  2024-05-21 12:09 ` Ihor Radchenko
  0 siblings, 1 reply; 4+ messages in thread
From: C. M. Sperberg-McQueen @ 2024-05-20 16:44 UTC (permalink / raw)
  To: emacs-orgmode



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.
------------------------------------------------------------------------

My thanks to those who made and maintain org-mode.

Consider the following literate program in org mode:

................ make-abc.org:
#+title: Minimal example
#+date: 20 May 2024

The first letter is A.
#+name: Able
#+begin_src txt
A is for application.
#+end_src

The second letter is B.  It follows A.
#+name: Baker 
#+begin_src txt :noweb tangle
<<Able>>
B is for beta-tester.
#+end_src

The third letter is C.  We'll stop here.
#+name: Charlie
#+begin_src txt :tangle abc.txt :noweb tangle
<<Baker>>
C is for coder.
#+end_src

Bottom line: two-level inclusions work only if the middle layer (here,
/Baker/) has ~:noweb yes~.  Using ~:noweb tangle~ on /Baker/ produces
the same results as using ~:noweb no~.
................ end make-abc.org:

When I run org-babel-tangle (C-c C-v t) to produce abc.txt, what I
expect is a file containing the three lines

  A is for application.
  B is for beta-tester.
  C is for coder.

in that order.  What I get is a file containing:

  <<Able>>
  B is for beta-tester.
  C is for coder.

When I change the noweb header argument on source code block Baker from
:noweb tangle to :noweb yes, I get the expected result when tangling.
Unfortunately, :noweb yes also means that the reference from Baker to
Able is expanded in the HTML export, which is not (here) what I want.

In the org-mode manual [1], the meaning of :noweb tangle is described
as: "Expansion of noweb syntax references in the body of the code block
when tangling. No expansion when evaluating or exporting."  I think that
running org-babel-tangle counts as tangling, so I expect the noweb
syntax references inside of code block Baker to be expanded.

If I've misunderstood the documentation, a clarification would be
welcome.  If there are other work-arounds, I would be glad to hear of
them.

Thanks.

[1] https://orgmode.org/manual/Noweb-Reference-Syntax.html

Emacs  : GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.33, cairo version 1.16.0)
 of 2023-07-17
Package: Org mode version 9.5.5 (release_9.5.5 @ /usr/local/share/emacs/28.2/lisp/org/)

current state:
==============
(setq
 org-link-elisp-confirm-function 'yes-or-no-p
 org-bibtex-headline-format-function #[257 "\300%1\236A\207" [:title] 3 "\n\n(fn ENTRY)"]
 org-log-done 'time
 org-agenda-files '("/home/cmsmcq/2024/tlrr/A/todo-tlrr.org"
                    "/home/cmsmcq/2024/ixml/A/todo-ixml.org"
                    "/home/cmsmcq/2024/mlcd/A/todo-mlcd.org"                    
                    "/home/cmsmcq/2024/A/todo-oop.org")
 org-export-before-parsing-hook '(org-attach-expand-links)
 org-archive-hook '(org-attach-archive-delete-maybe)
 org-odt-format-inlinetask-function 'org-odt-format-inlinetask-default-function
 org-ascii-format-drawer-function #[771 "%1\207" [] 4 "\n\n(fn NAME CONTENTS WIDTH)"]
 org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-hide-drawers
                  org-cycle-show-empty-lines
                  org-optimize-window-after-visibility-change)
 org-link-from-user-regexp "\\<cmsmcq@gemma\\>\\|\\<C\\. M\\. Sperberg-McQueen\\>"
 org-mode-hook '((lambda nil
                  (progn (modify-syntax-entry 60 "_" org-mode-syntax-table)
                   (modify-syntax-entry 62 "_" org-mode-syntax-table))
                  )
                 #[0 "\301\211%10\207"
                   [imenu-create-index-function org-imenu-get-tree] 2]
                 #[0 "\300\301\302\303\304$\207"
                   [add-hook change-major-mode-hook org-show-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)
 org-babel-load-languages '((shell . t) (emacs-lisp . t))
 org-latex-format-drawer-function #[514 "\207" [] 3 "\n\n(fn _ CONTENTS)"]
 org-latex-format-headline-function 'org-latex-format-headline-default-function
 org-confirm-shell-link-function 'yes-or-no-p
 org-reveal-start-hook '(org-decrypt-entry)
 org-html-format-drawer-function #[514 "\207" [] 3 "\n\n(fn NAME CONTENTS)"]
 outline-isearch-open-invisible-function 'outline-isearch-open-invisible
 org-odt-format-headline-function 'org-odt-format-headline-default-function
 org-agenda-before-write-hook '(org-agenda-add-entry-text)
 org-babel-tangle-lang-exts '(("D" . "d") ("C++" . "cpp") ("awk" . "awk")
                              ("clojurescript" . "cljs") ("clojure" . "clj")
                              ("fortran" . "F90") ("groovy" . "groovy")
                              ("haskell" . "hs") ("java" . "java")
                              ("julia" . "jl") ("latex" . "tex")
                              ("LilyPond" . "ly") ("lisp" . "lisp")
                              ("lua" . "lua") ("maxima" . "max")
                              ("ocaml" . "ml") ("perl" . "pl")
                              ("processing" . "pde") ("python" . "py")
                              ("ruby" . "rb") ("sed" . "sed")
                              ("emacs-lisp" . "el") ("elisp" . "el"))
 org-src-mode-hook '(org-src-babel-configure-edit-buffer
                     org-src-mode-configure-edit-buffer)
 org-confirm-elisp-link-function 'yes-or-no-p
 org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "PROG(p)" "INTERRUPT(i)"
                      "DONE(d)")
                     )
 org-speed-command-hook '(org-speed-command-activate
                          org-babel-speed-command-activate)
 org-html-format-inlinetask-function 'org-html-format-inlinetask-default-function
 org-ascii-format-inlinetask-function 'org-ascii-format-inlinetask-default
 org-odt-format-drawer-function #[514 "\207" [] 3 "\n\n(fn NAME CONTENTS)"]
 org-latex-format-inlinetask-function 'org-latex-format-inlinetask-default-function
 org-emphasis-alist '(("*" bold) ("/" italic) ("=" org-verbatim verbatim)
                      ("~" org-code verbatim) ("+" (:strike-through t)))
 org-tab-first-hook '(org-babel-hide-result-toggle-maybe
                      org-babel-header-arg-expand)
 org-link-shell-confirm-function 'yes-or-no-p
 org-babel-pre-tangle-hook '(save-buffer)
 org-agenda-loop-over-headlines-in-active-region nil
 org-occur-hook '(org-first-headline-recenter)
 org-metadown-hook '(org-babel-pop-to-session-maybe)
 org-link-parameters '(("attachment" :follow org-attach-follow :complete
                        org-attach-complete-link)
                       ("id" :follow org-id-open)
                       ("eww" :follow org-eww-open :store org-eww-store-link)
                       ("rmail" :follow org-rmail-open :store
                        org-rmail-store-link)
                       ("mhe" :follow org-mhe-open :store org-mhe-store-link)
                       ("irc" :follow org-irc-visit :store org-irc-store-link
                        :export org-irc-export)
                       ("info" :follow org-info-open :export org-info-export
                        :store org-info-store-link)
                       ("gnus" :follow org-gnus-open :store org-gnus-store-link)
                       ("docview" :follow org-docview-open :export
                        org-docview-export :store org-docview-store-link)
                       ("bibtex" :follow org-bibtex-open :store
                        org-bibtex-store-link)
                       ("bbdb" :follow org-bbdb-open :export org-bbdb-export
                        :complete org-bbdb-complete-link :store
                        org-bbdb-store-link)
                       ("w3m" :store org-w3m-store-link)
                       ("doi" :follow org-link-doi-open :export
                        org-link-doi-export)
                       ("mu4e" :follow mu4e-org-open :store mu4e-org-store-link)
                       ("file+sys") ("file+emacs")
                       ("shell" :follow org-link--open-shell)
                       ("news" :follow
                        #[514 "\301\300\302%4Q%2\"\207" ["news" browse-url ":"]
                          6 "\n\n(fn URL ARG)"]
                        )
                       ("mailto" :follow
                        #[514 "\301\300\302%4Q%2\"\207"
                          ["mailto" browse-url ":"] 6 "\n\n(fn URL ARG)"]
                        )
                       ("https" :follow
                        #[514 "\301\300\302%4Q%2\"\207"
                          ["https" browse-url ":"] 6 "\n\n(fn URL ARG)"]
                        )
                       ("http" :follow
                        #[514 "\301\300\302%4Q%2\"\207" ["http" browse-url ":"]
                          6 "\n\n(fn URL ARG)"]
                        )
                       ("ftp" :follow
                        #[514 "\301\300\302%4Q%2\"\207" ["ftp" browse-url ":"]
                          6 "\n\n(fn URL ARG)"]
                        )
                       ("help" :follow org-link--open-help :store
                        org-link--store-help)
                       ("file" :complete org-link-complete-file)
                       ("elisp" :follow org-link--open-elisp))
 org-html-format-headline-function 'org-html-format-headline-default-function
 org-metaup-hook '(org-babel-load-in-session-maybe)
 org-agenda-include-diary t
 )
-- 
C. M. Sperberg-McQueen
Black Mesa Technologies LLC
http://blackmesatech.com


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [BUG] Reference chains (C refers to B refers to A) in tangle do not behave as expected [9.5.5 (release_9.5.5 @ /usr/local/share/emacs/28.2/lisp/org/)]
  2024-05-20 16:44 [BUG] Reference chains (C refers to B refers to A) in tangle do not behave as expected [9.5.5 (release_9.5.5 @ /usr/local/share/emacs/28.2/lisp/org/)] C. M. Sperberg-McQueen
@ 2024-05-21 12:09 ` Ihor Radchenko
  2024-05-21 13:55   ` C. M. Sperberg-McQueen
  0 siblings, 1 reply; 4+ messages in thread
From: Ihor Radchenko @ 2024-05-21 12:09 UTC (permalink / raw)
  To: C. M. Sperberg-McQueen; +Cc: emacs-orgmode

"C. M. Sperberg-McQueen" <cmsmcq@blackmesatech.com> writes:

> Consider the following literate program in org mode:
>
> ................ make-abc.org:
> #+title: Minimal example
> #+date: 20 May 2024
>
> The first letter is A.
> #+name: Able
> #+begin_src txt
> A is for application.
> #+end_src
>
> The second letter is B.  It follows A.
> #+name: Baker 
> #+begin_src txt :noweb tangle
> <<Able>>
> B is for beta-tester.
> #+end_src
>
> The third letter is C.  We'll stop here.
> #+name: Charlie
> #+begin_src txt :tangle abc.txt :noweb tangle
> <<Baker>>
> C is for coder.
> #+end_src
>
> Bottom line: two-level inclusions work only if the middle layer (here,
> /Baker/) has ~:noweb yes~.  Using ~:noweb tangle~ on /Baker/ produces
> the same results as using ~:noweb no~.

Yes, and it is expected.

> ...
> In the org-mode manual [1], the meaning of :noweb tangle is described
> as: "Expansion of noweb syntax references in the body of the code block
> when tangling. No expansion when evaluating or exporting."  I think that
> running org-babel-tangle counts as tangling, so I expect the noweb
> syntax references inside of code block Baker to be expanded.

They are indeed expanded - there is a single noweb reference in Charlie
block - <<Baker>>. It is expanded to the code contained in the Baker
block. When retrieving the code for Baker block, Org mode goes to that
block and cleans up its text according to that block's
expansion. However, for Baker block, when it does not have :noweb
tangle, the <<...>> in the code are treated literally.

In other words, each noweb reference is expanded in its own context,
according to each block's own header arguments.

Not a bug.
Canceled.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [BUG] Reference chains (C refers to B refers to A) in tangle do not behave as expected [9.5.5 (release_9.5.5 @ /usr/local/share/emacs/28.2/lisp/org/)]
  2024-05-21 12:09 ` Ihor Radchenko
@ 2024-05-21 13:55   ` C. M. Sperberg-McQueen
  2024-05-21 14:16     ` Ihor Radchenko
  0 siblings, 1 reply; 4+ messages in thread
From: C. M. Sperberg-McQueen @ 2024-05-21 13:55 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

Thank you for the response.  I am sorry to say I do not understand it.

You say that non-expansion of references in the code block Baker is
expected "when it does not have :noweb tangle".

> ... When retrieving the code for Baker block, Org mode goes to that
> block and cleans up its text according to that block's
> expansion. However, for Baker block, when it does not have :noweb
> tangle, the <<...>> in the code are treated literally.

The problem I am reporting is that the <<...>> in the code of Baker are
treated literally even when Baker DOES have :noweb tangle.

Thanks.

Michael Sperberg-McQueen



Ihor Radchenko <yantar92@posteo.net> writes:

> "C. M. Sperberg-McQueen" <cmsmcq@blackmesatech.com> writes:
>
>> Consider the following literate program in org mode:
>>
>> ................ make-abc.org:
>> #+title: Minimal example
>> #+date: 20 May 2024
>>
>> The first letter is A.
>> #+name: Able
>> #+begin_src txt
>> A is for application.
>> #+end_src
>>
>> The second letter is B.  It follows A.
>> #+name: Baker 
>> #+begin_src txt :noweb tangle
>> <<Able>>
>> B is for beta-tester.
>> #+end_src
>>
>> The third letter is C.  We'll stop here.
>> #+name: Charlie
>> #+begin_src txt :tangle abc.txt :noweb tangle
>> <<Baker>>
>> C is for coder.
>> #+end_src
>>
>> Bottom line: two-level inclusions work only if the middle layer (here,
>> /Baker/) has ~:noweb yes~.  Using ~:noweb tangle~ on /Baker/ produces
>> the same results as using ~:noweb no~.
>
> Yes, and it is expected.
>
>> ...
>> In the org-mode manual [1], the meaning of :noweb tangle is described
>> as: "Expansion of noweb syntax references in the body of the code block
>> when tangling. No expansion when evaluating or exporting."  I think that
>> running org-babel-tangle counts as tangling, so I expect the noweb
>> syntax references inside of code block Baker to be expanded.
>
> They are indeed expanded - there is a single noweb reference in Charlie
> block - <<Baker>>. It is expanded to the code contained in the Baker
> block. When retrieving the code for Baker block, Org mode goes to that
> block and cleans up its text according to that block's
> expansion. However, for Baker block, when it does not have :noweb
> tangle, the <<...>> in the code are treated literally.
>
> In other words, each noweb reference is expanded in its own context,
> according to each block's own header arguments.
>
> Not a bug.
> Canceled.


-- 
C. M. Sperberg-McQueen
Black Mesa Technologies LLC
http://blackmesatech.com


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [BUG] Reference chains (C refers to B refers to A) in tangle do not behave as expected [9.5.5 (release_9.5.5 @ /usr/local/share/emacs/28.2/lisp/org/)]
  2024-05-21 13:55   ` C. M. Sperberg-McQueen
@ 2024-05-21 14:16     ` Ihor Radchenko
  0 siblings, 0 replies; 4+ messages in thread
From: Ihor Radchenko @ 2024-05-21 14:16 UTC (permalink / raw)
  To: C. M. Sperberg-McQueen; +Cc: emacs-orgmode

"C. M. Sperberg-McQueen" <cmsmcq@blackmesatech.com> writes:

>> ... When retrieving the code for Baker block, Org mode goes to that
>> block and cleans up its text according to that block's
>> expansion. However, for Baker block, when it does not have :noweb
>> tangle, the <<...>> in the code are treated literally.
>
> The problem I am reporting is that the <<...>> in the code of Baker are
> treated literally even when Baker DOES have :noweb tangle.

Confirmed.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-05-21 14:15 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-20 16:44 [BUG] Reference chains (C refers to B refers to A) in tangle do not behave as expected [9.5.5 (release_9.5.5 @ /usr/local/share/emacs/28.2/lisp/org/)] C. M. Sperberg-McQueen
2024-05-21 12:09 ` Ihor Radchenko
2024-05-21 13:55   ` C. M. Sperberg-McQueen
2024-05-21 14:16     ` Ihor Radchenko

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).