Pregunta:
Actualmente, para insertar enlaces de ID de organización en modo de organización interno, navego hasta un encabezado o lo abro en la vista de agenda (búsqueda de prueba de encabezado de Ca RET), guardo el enlace con Cl (enlace de tienda de organización), volviendo a donde Quiero insertar el enlace, luego insertar el enlace con Cc Cl (org-insert-link).
En su lugar, preferiría mapear una clave que me permita insertar un enlace en el punto actual usando la finalización de tabulación similar a org-refile (Cc Cw). El resultado deseado sería un enlace interno org-id con el siguiente formato:
[[id:d7534b2f-c221-4dea-8566-d5ce3e4e1b78][Example Link]]
Mirando a través de org-id.el, parece que org-id-get-with-outline-path-completation fue diseñado para este propósito. Lo intenté:
(global-set-key "\C-ci" (lambda () (interactive) (org-id-get-with-outline-path-completion)))
pero no funcionó como se esperaba.
Tengo lo siguiente en mi archivo init.el:
;; Use global IDs
(require 'org-id)
(setq org-id-link-to-org-use-id t)
;; Update ID file .org-id-locations on startup
(org-id-update-id-locations)
;; Refile options
(setq org-refile-targets (quote ((nil :maxlevel . 9) (org-agenda-files :maxlevel . 9))))
(setq org-refile-use-outline-path 'file)
(setq org-outline-path-complete-in-steps t)
(setq org-refile-allow-creating-parent-nodes t)
Respuesta:
Busqué en la fuente del modo org y encontré una característica mínimamente documentada . Si define una función org-TYPE-complete-link
, se utilizará para proporcionar compleción para enlaces de tipo TYPE
. Así que solo necesitamos definir una función org-id-complete-link
que complete y devuelva el enlace (incluido el prefijo "id:").
(defun org-id-complete-link (&optional arg)
"Create an id: link using completion"
(concat "id:"
(org-id-get-with-outline-path-completion)))
Inserte el enlace de la manera normal (con Cc Cl
), seleccione "id:" como el tipo y se activará la función de finalización.
EDITAR: A partir de la versión 9.0 org-mode
simplemente definir la función como se indicó anteriormente ya no funciona ( ref ). En su lugar, debe agregar la función de finalización a org-link-parameters
usando
(org-link-set-parameters "id"
:complete 'org-id-complete-link)