P: ¿Cómo puedo obtener una orgfunción de enlace personalizado para insertar una descripción automáticamente?
Me gustaría almacenar orgenlaces a archivos en un diredbúfer, pero preferiría que la descripción del enlace sea el nombre del archivo sin ruta en lugar de informar la ruta completa, es decir:
file:~/the/full/path/myfile.ext ; default, but no thanks
myfile.ext ; what I want
Ahora: org-store-linkcodifica los enlaces desde diredpara proporcionar el valor predeterminado. En cambio, he escrito una función personalizada (anulación de la función codificada) y la agregué a org-store-link-functions:
(defun dired-store-link ()
(when (derived-mode-p 'dired-mode)
(let ((file (dired-get-filename nil t)))
(setf file (if file
(abbreviate-file-name (expand-file-name file))
default-directory))
(org-store-link-props :type "dired"
:link file
:description (file-name-nondirectory file))
file)))
(add-to-list 'org-store-link-functions #'dired-store-link)
Hasta ahora todo bien, y funciona como se esperaba, pero para empezar:
- Cuando se llama
org-insert-linkcon el comportamiento predeterminado incorporado, simplemente inserta el enlace sin pedirme una descripción. - Cuando llamo
org-insert-linkcon mi función personalizada, me pide que ingrese una descripción (que se completa correctamente con el nombre del archivo almacenado en la:descriptionpropiedad).
Prefiero que no me soliciten la descripción cada vez, y quiero org-insert-linkusar el valor :descriptionque establece la función personalizada.
¿Cómo puedo convencer org-insert-linkpara usar el :descriptionautomáticamente sin preguntarme?

link-locationodefault-descriptionen la funciónorg-insert-link? Si el parámetro LINK-LOCATION no es nulo, este valor se usará como ubicación del enlace en lugar de leer uno de forma interactiva. Si el parámetro DEFAULT-DESCRIPTION no es nulo, este valor se usará como la descripción predeterminada.Respuestas:
Enterrado en la parte inferior de la cadena de documentos
org-insert-linkhay una nota que:Aparentemente
orgarroja mucha información en el proceso de almacenamiento de un enlace, por lo que todo lo que quedaorg-stored-linkses una lista de entradas del formulario(link description). En la medida en que la función anterior tiene un nombre de archivo para el enlace, parece que funciona de la siguiente manera:Es un poco hacky, y no lo he probado exhaustivamente, pero parece funcionar hasta ahora. Estaría encantado de ver una solución más elegante, por supuesto.
fuente
dired-store-linky simplemente usarla para crear la descripción que desea? Creo que eso terminaría mucho más corto.Estoy usando org 9.1.6, y para mi consternación parece que
org-store-link-functionsahora es una función de organización integrada (en lugar de un enlace), por lo que la solución original ya no funciona. Puede haber una solución alternativa usandoorg-link-parameters, pero en su lugar estoy usando el siguiente pequeño truco, que parece ser el truco:Como beneficio adicional, esto no solicita una descripción, ya que la descripción enviada
org-stored-linksno es nula.fuente