> Always interested in org-links, I have tested your code. It will maybe > interesting that I point out that, even if I am unable to understand > why, I have checked that it breaks the function for org-linking from > emails in gnus, at least in my setup i.e. with the following code:
It is also not very clear for me what could be broken in your setup. One guess would be that I use non-standard :desk link property to setup default link description. That property actually need some extra custom code to work. I imagine that it might somehow interfere with the existing org code when set. Can you try the following simplified code? (defun org-id-prompt-id () "Prompt for the id during completion of id: link." (let ((org-refile-history nil) (org-refile-cache nil) (org-refile-target-verify-function nil)) (let ((prompt-ans (org-refile-get-location "Select org entry"))) (prog1 (or (org-id-get (seq-find #'markerp prompt-ans) 'create) (user-error "Cannot find ID of the entry: %s" prompt-ans)) (setq org-id-history org-refile-history) (setq org-id-cache org-refile-cache))))) (defun org-id-link-complete (&optional arg) "Completion function for id: link." (let* ((id (org-id-prompt-id))) (format "id:%s" id))) (org-link-set-parameters "id" :complete #'org-id-link-complete) P.S. You can use %^t instead of %(org-insert-time-stamp ...). >From org-capture-templates docstring: > %^t Like %t, but prompt for date. Similarly %^T, %^u, %^U. > You may define a prompt like: %^{Please specify birthday}t. > The default date is that of %t, see above. Best, Ihor Joseph Vidal-Rosset <joseph.vidal.ros...@gmail.com> writes: > Le lun. 05/04/20 mai 2020 à 01:09:53 , Ihor Radchenko > <yanta...@gmail.com> a envoyé ce message: >> If I understand you correctly, the following code should achieve what >> you want. The code reuses org-refile interface to complete id: links. >> >> (defun org-id-prompt-id () >> "Prompt for the id during completion of id: link." >> (let ((org-refile-history nil) >> (org-refile-cache nil) >> (org-refile-target-verify-function nil)) >> (let ((prompt-ans (org-refile-get-location "Select org entry"))) >> (prog1 >> (or (org-id-get (seq-find #'markerp >> prompt-ans) >> 'create) >> (user-error "Cannot find ID of the entry: %s" prompt-ans)) >> (setq org-id-history org-refile-history) >> (setq org-id-cache org-refile-cache))))) >> >> (defun org-id-link-complete (&optional arg) >> "Completion function for id: link." >> (let* ((id (org-id-prompt-id))) >> (format "id:%s" id))) >> >> (defun org-id-link-desk (link desk) >> "Description function for id: link." >> (or desk >> (let ((id (cadr (split-string link ":")))) >> (org-with-point-at (org-id-find id 'marker) >> (org-get-heading 'strip 'all 'the 'extra))))) >> >> (org-link-set-parameters "id" >> :complete #'org-id-link-complete >> :desk #'org-id-link-desk) > > Hi, > > Always interested in org-links, I have tested your code. It will maybe > interesting that I point out that, even if I am unable to understand > why, I have checked that it breaks the function for org-linking from > emails in gnus, at least in my setup i.e. with the following code: > > (setq org-agenda-custom-commands > '(("t" "Agenda and Email-links tasks" > ((agenda "") > (tags-todo "email") > (tags "link"))) > )) > > ;; (global-set-key (kbd "<f11> c") 'org-capture) > ;; capture todo items using C-c c t > ;; (define-key global-map (kbd "C-c c") 'org-capture) > (setq org-capture-templates > '( > ("t" "todo" entry (file+headline "~/Dropbox/Orgzly/todo.org" "Tasks") > "* TODO [#A] %?\n > [[~/Dropbox/Orgzly/links.org::%(org-insert-time-stamp (org-read-date nil t > \"%:date\"))]] \n* %(org-insert-time-stamp (org-read-date nil t \"%:date\")) > %a " > ) > ("n" ; key > "note" ;name > entry ;type > (file+headline "~/Dropbox/Orgzly/notes.org" "Notes") ;target > "* NOTE du %(org-insert-time-stamp (org-read-date nil t \"%:date\")) > \n Voir %a " ; template > ) > ("H" "HOWTO: C-c C-s : schedule ; C-c C-d : deadline ; C-c C-w : > org-refile at a point; last: C-c C-t : DONE - F11-a: org-archive" > entry (file+headline "" "") "" > ) > ) > ) > ;; Merci à Bob Newell , avec ce code, le lien de l'email est modifié > correctement dès l'usage de la fonction refile C-c C-w > (defun jr/fix-the-link (&rest args) > (interactive) > (save-excursion > (find-file "~/Dropbox/Orgzly/todo.org") > (goto-char (point-min)) > (while (search-forward "gnus:INBOX#" nil t) > (replace-match "gnus:\\[Gmail\\]/Tous les messages#")) > (save-buffer))) > (advice-add 'org-capture-finalize :after #'jr/fix-the-link) > > Best wishes, > > Jo. -- Ihor Radchenko, PhD, Center for Advancing Materials Performance from the Nanoscale (CAMP-nano) State Key Laboratory for Mechanical Behavior of Materials, Xi'an Jiaotong University, Xi'an, China Email: yanta...@gmail.com, ihor_radche...@alumni.sutd.edu.sg