[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Bug: org-id-add-location fails when cloning a subtree [9.1.9 (release_9.
From: |
Ian Eure |
Subject: |
Bug: org-id-add-location fails when cloning a subtree [9.1.9 (release_9.1.9-65-g5e4542 @ /home/ieure/.emacs.d/straight/build/org/)] |
Date: |
Wed, 15 Apr 2020 10:57:24 -0700 |
User-agent: |
mu4e 1.0; emacs 26.1 |
If you have a subtree of entries with :ID: properties and call M-x
`org-clone-subtree-with-time-shift' on it, an error occurs:
Wrong type argument: stringp, nil
This is due to the interaction of
`org-clone-subtree-with-time-shift' and `org-id-add-location'.
When the former is called, it creates a temp buffer to operate on:
https://code.orgmode.org/bzg/org-mode/src/master/lisp/org.el#L7801
Then calls `org-id-get-create':
https://code.orgmode.org/bzg/org-mode/src/master/lisp/org.el#L7808
Which calls `org-id-get', which calls `buffer-file-name', which
evals to nil, because no file backs the temp buffer. That nil is
then passed to `org-id-add-location':
https://code.orgmode.org/bzg/org-mode/src/master/lisp/org-id.el#L277
Which unconditionally calls `abbreviate-file-name':
https://code.orgmode.org/bzg/org-mode/src/master/lisp/org-id.el#L575
Which signals the error.
I’ve confirmed that this is still a problem in the 9.3.6, which is
the latest release, as well as Git master.
A simplistic fix would be to swap the let and when lines in
`org-id-add-location':
diff --git a/lisp/org-id.el b/lisp/org-id.el
index 1ff433bd8..945a9a1f6 100644
--- a/lisp/org-id.el
+++ b/lisp/org-id.el
@@ -572,8 +572,8 @@ When FILES is given, scan also these files."
(defun org-id-add-location (id file)
"Add the ID with location FILE to the database of ID
locations."
;; Only if global tracking is on, and when the buffer has a
file
- (let ((afile (abbreviate-file-name file)))
- (when (and org-id-track-globally id file)
+ (when (and org-id-track-globally id file)
+ (let ((afile (abbreviate-file-name file)))
(unless org-id-locations (org-id-locations-load))
(puthash id afile org-id-locations)
(unless (member afile org-id-files)
However, this causes a more subtle bug, which is that the IDs of
cloned subtrees won’t be tracked correctly. Perhaps a solution to
that is to use an indirect buffer of the source when cloning,
instead of a temp buffer.
Emacs : GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, X toolkit,
Xaw3d scroll bars)
of 2019-09-22, modified by Debian
Package: Org mode version 9.1.9 (release_9.1.9-65-g5e4542 @
/home/ieure/.emacs.d/straight/build/org/)
- Bug: org-id-add-location fails when cloning a subtree [9.1.9 (release_9.1.9-65-g5e4542 @ /home/ieure/.emacs.d/straight/build/org/)],
Ian Eure <=