P: ¿Cómo puedo obtener una org
función de enlace personalizado para insertar una descripción automáticamente?
Me gustaría almacenar org
enlaces a archivos en un dired
bú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-link
codifica los enlaces desde dired
para 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-link
con el comportamiento predeterminado incorporado, simplemente inserta el enlace sin pedirme una descripción. - Cuando llamo
org-insert-link
con mi función personalizada, me pide que ingrese una descripción (que se completa correctamente con el nombre del archivo almacenado en la:description
propiedad).
Prefiero que no me soliciten la descripción cada vez, y quiero org-insert-link
usar el valor :description
que establece la función personalizada.
¿Cómo puedo convencer org-insert-link
para usar el :description
automáticamente sin preguntarme?
link-location
odefault-description
en 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-link
hay una nota que:Aparentemente
org
arroja mucha información en el proceso de almacenamiento de un enlace, por lo que todo lo que quedaorg-stored-links
es 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-link
y 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-functions
ahora 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-links
no es nula.fuente