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: signature.asc
Description: PGP signature

Reply via email to