Q: Comment puis-je obtenir une org
fonction de lien personnalisé pour insérer automatiquement une description?
Je voudrais stocker des org
liens vers des fichiers dans un dired
tampon, mais je préférerais que la description du lien soit le nom du fichier sans chemin plutôt que de signaler le chemin complet, c'est-à-dire:
file:~/the/full/path/myfile.ext ; default, but no thanks
myfile.ext ; what I want
Maintenant: les org-store-link
codes durs sont liés dired
pour fournir la valeur par défaut. Au lieu de cela, j'ai écrit une fonction personnalisée (cribbing à partir de la fonction codée en dur) et l'ai ajoutée à 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)
Jusqu'ici tout va bien, et cela fonctionne comme prévu, mais pour une chose:
- Lors d'un appel
org-insert-link
avec le comportement par défaut intégré, il insère simplement le lien sans me demander de description. - Lors de l'appel
org-insert-link
avec ma fonction personnalisée, il m'invite à entrer une description (qu'il remplit correctement avec le nom de fichier stocké dans la:description
propriété).
Je préfère ne pas être invité à entrer la description à chaque fois, et je souhaite org-insert-link
utiliser la valeur :description
définie par la fonction personnalisée.
Comment puis-je convaincre org-insert-link
d'utiliser le :description
automatiquement sans me le demander?
link-location
oudefault-description
dans la fonctionorg-insert-link
aident-ils? Si le paramètre LINK-LOCATION n'est pas nul, cette valeur sera utilisée comme emplacement du lien au lieu de la lire de manière interactive. Si le paramètre DEFAULT-DESCRIPTION n'est pas nul, cette valeur sera utilisée comme description par défaut.Réponses:
Enterré au bas de la docstring pour
org-insert-link
est une note qui:Apparemment,
org
jette beaucoup d'informations dans le processus de stockage d'un lien, il ne resteorg-stored-links
donc qu'une liste des entrées du formulaire(link description)
. Dans la mesure où la fonction antérieure a un nom de fichier pour le lien, cela ressemble aux travaux suivants:C'est un peu hacky, et je ne l'ai pas testé intensivement, mais cela semble fonctionner jusqu'à présent. Serait ravi de voir une solution plus élégante, bien sûr.
la source
dired-store-link
et simplement l'utiliser pour créer la description que vous voulez? Je pense que cela finirait par être beaucoup plus court.J'utilise org 9.1.6, et à ma grande consternation, il semble que ce
org-store-link-functions
soit maintenant une fonction org intégrée (plutôt qu'un crochet), donc la solution d'origine ne fonctionne plus. Il peut y avoir une solution de contournement en utilisantorg-link-parameters
, mais à la place j'utilise le petit hack suivant, qui semble faire l'affaire:En prime, cela ne demande pas de description, car la description poussée vers
org-stored-links
est non nulle.la source