* [BUG] Cannot tangle src block in capture buffer [9.7.6]
@ 2024-07-26 16:29 Dilip
2024-08-05 14:03 ` Ihor Radchenko
0 siblings, 1 reply; 9+ messages in thread
From: Dilip @ 2024-07-26 16:29 UTC (permalink / raw)
To: emacs-orgmode@gnu.org
[-- Attachment #1: Type: text/plain, Size: 752 bytes --]
You get ~Wrong type argument: stringp, nil~ error when you
=org-babel-tangle= on a source block in capture buffer.
To reproduce:
1. set a template
(setq org-capture-templates
'(("t" "Test" entry (file "/tmp/debug.org")
"* TODO %?\n %i\n %a")))
2. Create a source block (C-c C-, s) add :tangle header
3. Tangle it. (C-u C-c C-v C-t)
In fact,at the same time with capture buffer active if you go the file
(/tmp/debug.org) and do tangle on so far written src block it tangles
properly.
Emacs : GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.42, cairo version 1.18.0)
Package: Org mode version 9.7.6 (9.7.6-7a4527 @ /nix/store/w3f4jzqljh96z8axnp7fc814vg47879b-emacs-packages-deps/share/emacs/site-lisp/elpa/org-9.7.6/)
Best,
Dilip
[-- Attachment #2: Type: text/html, Size: 1445 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] Cannot tangle src block in capture buffer [9.7.6]
2024-07-26 16:29 [BUG] Cannot tangle src block in capture buffer [9.7.6] Dilip
@ 2024-08-05 14:03 ` Ihor Radchenko
2024-12-16 3:26 ` Derek Chen-Becker
0 siblings, 1 reply; 9+ messages in thread
From: Ihor Radchenko @ 2024-08-05 14:03 UTC (permalink / raw)
To: Dilip; +Cc: emacs-orgmode@gnu.org
Dilip <iDLip@protonmail.com> writes:
> You get ~Wrong type argument: stringp, nil~ error when you
> =org-babel-tangle= on a source block in capture buffer.
>
> To reproduce:
>
> 1. set a template
> (setq org-capture-templates
> '(("t" "Test" entry (file "/tmp/debug.org")
> "* TODO %?\n %i\n %a")))
>
> 2. Create a source block (C-c C-, s) add :tangle header
> 3. Tangle it. (C-u C-c C-v C-t)
>
> In fact,at the same time with capture buffer active if you go the file
> (/tmp/debug.org) and do tangle on so far written src block it tangles
> properly.
That's because capture buffer is an indirect buffer and indirect buffers
are technically not associated with any file.
We should probably fix handling indirect buffers across Org mode.
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] 9+ messages in thread
* Re: [BUG] Cannot tangle src block in capture buffer [9.7.6]
2024-08-05 14:03 ` Ihor Radchenko
@ 2024-12-16 3:26 ` Derek Chen-Becker
2024-12-16 17:39 ` Ihor Radchenko
0 siblings, 1 reply; 9+ messages in thread
From: Derek Chen-Becker @ 2024-12-16 3:26 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 1982 bytes --]
On Mon, Aug 05, 2024 at 02:03:50PM +0000, Ihor Radchenko wrote:
> That's because capture buffer is an indirect buffer and indirect buffers
> are technically not associated with any file.
>
> We should probably fix handling indirect buffers across Org mode.
>
> Confirmed.
>
OK, after some debugging it looks like the primary culprit is the assignment of source-file from buffer-file-name. A quick
patch seems to fix it, but I can definitely see a pattern here if org functions are trying to get the filename of the current
buffer (I can submit an official patch if this looks right):
modified lisp/ob-tangle.el
@@ -269,7 +269,7 @@ matching a regular expression."
(or (cdr (assq :tangle (nth 2 (org-babel-get-src-block-info 'no-eval))))
(user-error "Point is not in a source code block"))))
path-collector
- (source-file buffer-file-name))
+ (source-file (buffer-file-name (buffer-base-buffer))))
(mapc ;; map over file-names
(lambda (by-fn)
(let ((file-name (car by-fn)))
There are 339 uses of buffer-file-name that I can find, but most are just bare (buffer-file-name). Are there any other cases
besides indirect buffers that we would need to handle? Would it be worth creating a new function "org-buffer-file-name" that
could properly handle indirect buffers and any other special cases, or is it just a search and replace throughout?
Cheers,
Derek
--
+---------------------------------------------------------------+
| Derek Chen-Becker |
| http://chen-becker.org |
| |
| GPG Key available at https://keybase.io/dchenbecker and |
| https://pgp.mit.edu/pks/lookup?search=derek%40chen-becker.org |
| Fngrprnt: EB8A 6480 F0A3 C8EB C1E7 7F42 AFC5 AFEE 96E4 6ACC |
+---------------------------------------------------------------+
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] Cannot tangle src block in capture buffer [9.7.6]
2024-12-16 3:26 ` Derek Chen-Becker
@ 2024-12-16 17:39 ` Ihor Radchenko
2024-12-19 17:56 ` Derek Chen-Becker
0 siblings, 1 reply; 9+ messages in thread
From: Ihor Radchenko @ 2024-12-16 17:39 UTC (permalink / raw)
To: Derek Chen-Becker; +Cc: emacs-orgmode
Derek Chen-Becker <derek@chen-becker.org> writes:
> OK, after some debugging it looks like the primary culprit is the assignment of source-file from buffer-file-name. A quick
> patch seems to fix it, but I can definitely see a pattern here if org functions are trying to get the filename of the current
> buffer (I can submit an official patch if this looks right):
>
> modified lisp/ob-tangle.el
> @@ -269,7 +269,7 @@ matching a regular expression."
> (or (cdr (assq :tangle (nth 2 (org-babel-get-src-block-info 'no-eval))))
> (user-error "Point is not in a source code block"))))
> path-collector
> - (source-file buffer-file-name))
> + (source-file (buffer-file-name (buffer-base-buffer))))
> (mapc ;; map over file-names
> (lambda (by-fn)
> (let ((file-name (car by-fn)))
This looks right, yes.
> There are 339 uses of buffer-file-name that I can find, but most are just bare (buffer-file-name). Are there any other cases
> besides indirect buffers that we would need to handle? Would it be worth creating a new function "org-buffer-file-name" that
> could properly handle indirect buffers and any other special cases, or is it just a search and replace throughout?
I can think of two scenarios:
1. indirect Org buffer, as you pointed
2. a new Org buffer not yet associated with file. Even base buffer will
then have buffer-file-name returning nil
May we have a special function? If it is going to be used 339 times,
definitely yes ;) Although, I'd prefer more telling name like
`org-base-buffer-file-name' (akin the existing `org-with-base-buffer' macro)
--
Ihor Radchenko // yantar92,
Org mode maintainer,
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] 9+ messages in thread
* Re: [BUG] Cannot tangle src block in capture buffer [9.7.6]
2024-12-16 17:39 ` Ihor Radchenko
@ 2024-12-19 17:56 ` Derek Chen-Becker
2024-12-19 19:17 ` Ihor Radchenko
0 siblings, 1 reply; 9+ messages in thread
From: Derek Chen-Becker @ 2024-12-19 17:56 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 2893 bytes --]
OK, I can start working on the new function and plumb it in. I agree that
"org-base-buffer-file-name" would be better. For the case you mentioned
about an Org buffer not yet associated with a file, that seems like a
complication that we can't solve at this level. Do we leave that as a known
issue, or are there straightforward ways to maybe deal with that? It feels
like that may be case-by-case.
Thanks,
Derek
On Mon, Dec 16, 2024 at 10:37 AM Ihor Radchenko <yantar92@posteo.net> wrote:
> Derek Chen-Becker <derek@chen-becker.org> writes:
>
> > OK, after some debugging it looks like the primary culprit is the
> assignment of source-file from buffer-file-name. A quick
> > patch seems to fix it, but I can definitely see a pattern here if org
> functions are trying to get the filename of the current
> > buffer (I can submit an official patch if this looks right):
> >
> > modified lisp/ob-tangle.el
> > @@ -269,7 +269,7 @@ matching a regular expression."
> > (or (cdr (assq :tangle (nth 2 (org-babel-get-src-block-info
> 'no-eval))))
> > (user-error "Point is not in a source code block"))))
> > path-collector
> > - (source-file buffer-file-name))
> > + (source-file (buffer-file-name (buffer-base-buffer))))
> > (mapc ;; map over file-names
> > (lambda (by-fn)
> > (let ((file-name (car by-fn)))
>
> This looks right, yes.
>
> > There are 339 uses of buffer-file-name that I can find, but most are
> just bare (buffer-file-name). Are there any other cases
> > besides indirect buffers that we would need to handle? Would it be worth
> creating a new function "org-buffer-file-name" that
> > could properly handle indirect buffers and any other special cases, or
> is it just a search and replace throughout?
>
> I can think of two scenarios:
>
> 1. indirect Org buffer, as you pointed
> 2. a new Org buffer not yet associated with file. Even base buffer will
> then have buffer-file-name returning nil
>
> May we have a special function? If it is going to be used 339 times,
> definitely yes ;) Although, I'd prefer more telling name like
> `org-base-buffer-file-name' (akin the existing `org-with-base-buffer'
> macro)
>
> --
> Ihor Radchenko // yantar92,
> Org mode maintainer,
> 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>
>
--
+---------------------------------------------------------------+
| Derek Chen-Becker |
| GPG Key available at https://keybase.io/dchenbecker and |
| https://pgp.mit.edu/pks/lookup?search=derek%40chen-becker.org |
| Fngrprnt: EB8A 6480 F0A3 C8EB C1E7 7F42 AFC5 AFEE 96E4 6ACC |
+---------------------------------------------------------------+
[-- Attachment #2: Type: text/html, Size: 4963 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] Cannot tangle src block in capture buffer [9.7.6]
2024-12-19 17:56 ` Derek Chen-Becker
@ 2024-12-19 19:17 ` Ihor Radchenko
2024-12-23 23:36 ` Derek Chen-Becker
0 siblings, 1 reply; 9+ messages in thread
From: Ihor Radchenko @ 2024-12-19 19:17 UTC (permalink / raw)
To: Derek Chen-Becker; +Cc: emacs-orgmode
Derek Chen-Becker <derek@chen-becker.org> writes:
> OK, I can start working on the new function and plumb it in. I agree that
> "org-base-buffer-file-name" would be better.
Thanks in advance!
Do note that we still cannot blindly replace every instance of
buffer-file-name with the new function. At least a cursory case-by-case
check is necessary to make sure that logic will not be broken.
> ... For the case you mentioned
> about an Org buffer not yet associated with a file, that seems like a
> complication that we can't solve at this level. Do we leave that as a known
> issue, or are there straightforward ways to maybe deal with that? It feels
> like that may be case-by-case.
It will certainly be case-by-case. Sometimes, the code can only be
evaluated in a file buffer. Ever. Sometimes not.
This one is rather theoretical.
--
Ihor Radchenko // yantar92,
Org mode maintainer,
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] 9+ messages in thread
* Re: [BUG] Cannot tangle src block in capture buffer [9.7.6]
2024-12-19 19:17 ` Ihor Radchenko
@ 2024-12-23 23:36 ` Derek Chen-Becker
2024-12-24 9:14 ` Ihor Radchenko
0 siblings, 1 reply; 9+ messages in thread
From: Derek Chen-Becker @ 2024-12-23 23:36 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 1289 bytes --]
On Thu, Dec 19, 2024 at 12:16 PM Ihor Radchenko <yantar92@posteo.net> wrote:
>
> Thanks in advance!
> Do note that we still cannot blindly replace every instance of
> buffer-file-name with the new function. At least a cursory case-by-case
> check is necessary to make sure that logic will not be broken.]
Understood, that's clear to me. I plan on making the common function
something that will resolve the buffer filename whether the buffer is
direct or indirect. For the case of a new Org buffer I'm not sure what I
can return other than nil. For functions that require a filename, I think
we'll have to evaluate those on a case-by-case basis and figure out if we
can provide a helper/wrapper that can simplify error reporting when a
filename is required. Where would be the best place to put the
`org-base-buffer-file-name` function?
Thanks,
Derek
--
+---------------------------------------------------------------+
| Derek Chen-Becker |
| GPG Key available at https://keybase.io/dchenbecker and |
| https://pgp.mit.edu/pks/lookup?search=derek%40chen-becker.org |
| Fngrprnt: EB8A 6480 F0A3 C8EB C1E7 7F42 AFC5 AFEE 96E4 6ACC |
+---------------------------------------------------------------+
[-- Attachment #2: Type: text/html, Size: 3096 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] Cannot tangle src block in capture buffer [9.7.6]
2024-12-23 23:36 ` Derek Chen-Becker
@ 2024-12-24 9:14 ` Ihor Radchenko
2025-01-10 15:25 ` Derek Chen-Becker
0 siblings, 1 reply; 9+ messages in thread
From: Ihor Radchenko @ 2024-12-24 9:14 UTC (permalink / raw)
To: Derek Chen-Becker; +Cc: emacs-orgmode
Derek Chen-Becker <derek@chen-becker.org> writes:
> ... Where would be the best place to put the
> `org-base-buffer-file-name` function?
org-macs.el
--
Ihor Radchenko // yantar92,
Org mode maintainer,
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] 9+ messages in thread
* Re: [BUG] Cannot tangle src block in capture buffer [9.7.6]
2024-12-24 9:14 ` Ihor Radchenko
@ 2025-01-10 15:25 ` Derek Chen-Becker
0 siblings, 0 replies; 9+ messages in thread
From: Derek Chen-Becker @ 2025-01-10 15:25 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 1437 bytes --]
The holidays got the better of me and I'm just coming back to this. I've
made the code changes to add the new function for resolving the base name,
but I was thinking about adding a test for it as well. I'm looking at the
examples in test-ob-tangle.el and I think I understand some of it, but is
there any documentation on writing tests? The README under testing has some
useful info for how to run the tests, but not much about how tests should
be structured or any important facilities to be aware of.
Thanks,
Derek
On Tue, Dec 24, 2024 at 2:13 AM Ihor Radchenko <yantar92@posteo.net> wrote:
> Derek Chen-Becker <derek@chen-becker.org> writes:
>
> > ... Where would be the best place to put the
> > `org-base-buffer-file-name` function?
>
> org-macs.el
>
> --
> Ihor Radchenko // yantar92,
> Org mode maintainer,
> 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>
>
--
+---------------------------------------------------------------+
| Derek Chen-Becker |
| GPG Key available at https://keybase.io/dchenbecker and |
| https://pgp.mit.edu/pks/lookup?search=derek%40chen-becker.org |
| Fngrprnt: EB8A 6480 F0A3 C8EB C1E7 7F42 AFC5 AFEE 96E4 6ACC |
+---------------------------------------------------------------+
[-- Attachment #2: Type: text/html, Size: 3348 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-01-10 15:26 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-26 16:29 [BUG] Cannot tangle src block in capture buffer [9.7.6] Dilip
2024-08-05 14:03 ` Ihor Radchenko
2024-12-16 3:26 ` Derek Chen-Becker
2024-12-16 17:39 ` Ihor Radchenko
2024-12-19 17:56 ` Derek Chen-Becker
2024-12-19 19:17 ` Ihor Radchenko
2024-12-23 23:36 ` Derek Chen-Becker
2024-12-24 9:14 ` Ihor Radchenko
2025-01-10 15:25 ` Derek Chen-Becker
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).