forked from mirrors/org-mode
org-store-link: Move already stored link to front by default
* lisp/ol.el (org-link-store-existing): New customization controlling how to deal with already stored links. (org-store-link): Respect the new customization, allowing duplicates to (1) be added anyway; (2) be ignored; (3) be moved to front of `org-stored-links'. The default is (3). * etc/ORG-NEWS (~org-store-link~ now moves an already stored link to front of the ~org-stored-links~): Document the breaking change. Reported-by: Samuel Wales <samologist@gmail.com> Link: https://list.orgmode.org/orgmode/CAJcAo8sjD3_FX5pFQ4git9wRDNM3bMqTgP-R5mM8zcf1B3mjPg@mail.gmail.com/
This commit is contained in:
parent
5e31dcdd9a
commit
c0dbcf361e
15
etc/ORG-NEWS
15
etc/ORG-NEWS
|
@ -13,6 +13,21 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
|
||||||
|
|
||||||
* Version 9.7 (not released yet)
|
* Version 9.7 (not released yet)
|
||||||
** Important announcements and breaking changes
|
** Important announcements and breaking changes
|
||||||
|
*** ~org-store-link~ now moves an already stored link to front of the ~org-stored-links~
|
||||||
|
|
||||||
|
Previously, when the link to be stored were stored already,
|
||||||
|
~org-store-link~ displayed a message and did nothing.
|
||||||
|
|
||||||
|
Now, ~org-store-link~ moves the stored link to front of the list of
|
||||||
|
stored links. This way, the link will show up first in the completion
|
||||||
|
and when inserting all the stored links with ~org-insert-all-links~.
|
||||||
|
|
||||||
|
The new behavior is controlled by new customization ~org-link-store-existing~.
|
||||||
|
|
||||||
|
Users can set ~org-link-store-existing~ to nil to revert previous
|
||||||
|
defaults. The value of =store-duplicate= will force duplicate links
|
||||||
|
in ~org-stored-links~. The default value is =move-to-front=.
|
||||||
|
|
||||||
*** Major changes and additions to Org API
|
*** Major changes and additions to Org API
|
||||||
**** New term: "syntax node"
|
**** New term: "syntax node"
|
||||||
|
|
||||||
|
|
36
lisp/ol.el
36
lisp/ol.el
|
@ -509,6 +509,20 @@ links more efficient."
|
||||||
:type 'boolean
|
:type 'boolean
|
||||||
:safe #'booleanp)
|
:safe #'booleanp)
|
||||||
|
|
||||||
|
(defcustom org-link-store-existing 'move-to-front
|
||||||
|
"Variable controlling how to deal with already stored links.
|
||||||
|
When nil, ignore store request for an already stored link.
|
||||||
|
When symbol `move-to-front', move the stored link to the front of
|
||||||
|
`org-stored-links'.
|
||||||
|
When symbol `store-duplicate', add a duplicate in front."
|
||||||
|
:group 'org-link-store
|
||||||
|
:type '(choice
|
||||||
|
(const :tag "Do no store duplicate" nil)
|
||||||
|
(const :tag "Move stored duplicate to front" move-to-front)
|
||||||
|
(const :tag "Store duplicate" store-duplicate))
|
||||||
|
:safe #'symbolp
|
||||||
|
:package-version '(Org . "9.7"))
|
||||||
|
|
||||||
;;; Public variables
|
;;; Public variables
|
||||||
|
|
||||||
(defconst org-target-regexp (let ((border "[^<>\n\r \t]"))
|
(defconst org-target-regexp (let ((border "[^<>\n\r \t]"))
|
||||||
|
@ -1749,16 +1763,24 @@ non-nil."
|
||||||
;; Store and return the link
|
;; Store and return the link
|
||||||
(if (not (and interactive? link))
|
(if (not (and interactive? link))
|
||||||
(or agenda-link (and link (org-link-make-string link desc)))
|
(or agenda-link (and link (org-link-make-string link desc)))
|
||||||
(if (member (list link desc) org-stored-links)
|
(dotimes (_ (if custom-id 2 1)) ; Store 2 links when CUSTOM-ID is non-nil.
|
||||||
(message "This link has already been stored")
|
(pcase org-link-store-existing
|
||||||
(push (list link desc) org-stored-links)
|
((or `store-duplicate
|
||||||
(message "Stored: %s" (or desc link))
|
(guard (not (member (list link desc) org-stored-links))))
|
||||||
|
(push (list link desc) org-stored-links)
|
||||||
|
(message "Stored: %s" (or desc link)))
|
||||||
|
((or`nil (guard (equal (list link desc) (car org-stored-links))))
|
||||||
|
(message "This link has already been stored"))
|
||||||
|
(`move-to-front
|
||||||
|
(setq org-stored-links
|
||||||
|
(delete (list link desc) org-stored-links))
|
||||||
|
(push (list link desc) org-stored-links)
|
||||||
|
(message "Link moved to front: %s" (or desc link))))
|
||||||
(when custom-id
|
(when custom-id
|
||||||
(setq link (concat "file:"
|
(setq link (concat "file:"
|
||||||
(abbreviate-file-name
|
(abbreviate-file-name
|
||||||
(buffer-file-name (buffer-base-buffer)))
|
(buffer-file-name (buffer-base-buffer)))
|
||||||
"::#" custom-id))
|
"::#" custom-id))))
|
||||||
(push (list link desc) org-stored-links)))
|
|
||||||
(car org-stored-links)))))
|
(car org-stored-links)))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
|
|
Loading…
Reference in New Issue