Ensure to always return a marker when inserting links to other items
`org-refile-get-location` sometimes only returns a point and not a marker. In that case, manually convert the point to a marker to ensure that calling functions now where to go to. Additionally, ensure that `db/org-default-org-file` is opened if not already done so, and error out if the current buffer is not associated with a file and no default Org file exists.
This commit is contained in:
parent
00ca4c0276
commit
732323edfc
|
@ -662,31 +662,43 @@ not."
|
||||||
|
|
||||||
(defun db/org--get-location (&optional arg)
|
(defun db/org--get-location (&optional arg)
|
||||||
"Interactively query for location and return mark.
|
"Interactively query for location and return mark.
|
||||||
Searches through the current file, and through all files in the
|
|
||||||
variables `org-agenda-files',
|
Searches through the current buffer if that one is associated
|
||||||
`org-agenda-text-search-extra-files', and the current buffer, if
|
with a file, or `db/org-default-org-file'. When ARG is non-nil,
|
||||||
ARG is non-nil. Search is always conducted up to level 9. If
|
search through all files in the variables `org-agenda-files',
|
||||||
the selected location does not have an associated mark, error
|
`org-agenda-text-search-extra-files', and the current file or
|
||||||
out. Disable refile cache and any active refile filter hooks to
|
`db/org-default-org-file'.
|
||||||
allow linking to any item."
|
|
||||||
|
Search is always conducted up to level 9. If the selected
|
||||||
|
location does not have an associated point or mark, error out.
|
||||||
|
Disable refile cache and any active refile filter hooks to allow
|
||||||
|
linking to any item."
|
||||||
(let ((org-refile-target-verify-function nil)
|
(let ((org-refile-target-verify-function nil)
|
||||||
(org-refile-use-cache nil))
|
(org-refile-use-cache nil)
|
||||||
(let* ((org-refile-targets (if arg
|
;; If the current buffer is associated with a file, search through it;
|
||||||
`((org-agenda-files :maxlevel . 9)
|
;; otherwise, use the default Org Mode file as default buffer
|
||||||
(,(cl-remove-if-not
|
(default-buffer (if (buffer-file-name)
|
||||||
#'stringp org-agenda-text-search-extra-files)
|
(current-buffer)
|
||||||
:maxlevel . 9)
|
(find-file-noselect db/org-default-org-file))))
|
||||||
(nil :maxlevel . 9))
|
(when (null default-buffer)
|
||||||
'((nil :maxlevel . 9))))
|
(user-error "Current buffer is not associated with a file and `db/org-default-org-file' does not exist; nothing to search through"))
|
||||||
(mrk (nth 3 (org-refile-get-location
|
(let* ((org-refile-targets (if arg
|
||||||
nil
|
`((org-agenda-files :maxlevel . 9)
|
||||||
;; if the current buffer is associated with a file, search
|
(,(cl-remove-if-not
|
||||||
;; through it; otherwise, use the default Org Mode file as
|
#'stringp org-agenda-text-search-extra-files)
|
||||||
;; default buffer
|
:maxlevel . 9)
|
||||||
(if (buffer-file-name)
|
(nil :maxlevel . 9))
|
||||||
nil
|
'((nil :maxlevel . 9))))
|
||||||
(get-file-buffer db/org-default-org-file))))))
|
(pom (nth 3 (org-refile-get-location nil default-buffer))))
|
||||||
(if mrk mrk (user-error "Invalid location")))))
|
(cond
|
||||||
|
((markerp pom) pom)
|
||||||
|
((integerp pom)
|
||||||
|
;; Convert point to marker to ensure we are always in the correct buffer
|
||||||
|
(save-mark-and-excursion
|
||||||
|
(with-current-buffer default-buffer
|
||||||
|
(goto-char pom)
|
||||||
|
(point-marker))))
|
||||||
|
(t (user-error "Invalid location"))))))
|
||||||
|
|
||||||
(defun db/org-find-links-to-current-item (arg)
|
(defun db/org-find-links-to-current-item (arg)
|
||||||
"Find links to current item.
|
"Find links to current item.
|
||||||
|
|
Loading…
Reference in New Issue