|
From: | Derek Chen-Becker |
Subject: | Re: [BUG] Cannot tangle src block in capture buffer [9.7.6] |
Date: | Thu, 19 Dec 2024 10:56:48 -0700 |
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>
[Prev in Thread] | Current Thread | [Next in Thread] |