emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Inserting org-mode heading links the org-refile way


From: Ihor Radchenko
Subject: Re: Inserting org-mode heading links the org-refile way
Date: Mon, 04 May 2020 15:11:57 +0800

> 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 <address@hidden> writes:

> Le   lun.   05/04/20   mai   2020    à   01:09:53   ,   Ihor   Radchenko
> <address@hidden> 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: address@hidden, address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]