F: Wie kann ich eine benutzerdefinierte org
Linkfunktion zum automatischen Einfügen einer Beschreibung erhalten?
Ich möchte org
Links zu Dateien in einem dired
Puffer speichern , möchte jedoch, dass die Linkbeschreibung der Dateiname ohne Pfad ist, anstatt den vollständigen Pfad zu melden, dh:
file:~/the/full/path/myfile.ext ; default, but no thanks
myfile.ext ; what I want
Jetzt: org-store-link
Hardcodes von dired
, um die Standardeinstellung bereitzustellen. Stattdessen habe ich eine benutzerdefinierte Funktion geschrieben (Cribbing von der fest codierten Funktion) und sie hinzugefügt zu 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)
So weit so gut und es funktioniert wie erwartet, aber zum einen:
- Beim Aufrufen
org-insert-link
mit dem integrierten Standardverhalten wird der Link einfach eingefügt, ohne dass ich nach einer Beschreibung gefragt werde. - Wenn
org-insert-link
ich mit meiner benutzerdefinierten Funktion aufrufe, werde ich aufgefordert, eine Beschreibung einzugeben (die korrekt mit dem in der:description
Eigenschaft gespeicherten Dateinamen gefüllt wird ).
Ich möchte lieber nicht jedes Mal zur Beschreibung aufgefordert werden und möchte org-insert-link
den Wert verwenden :description
, den die benutzerdefinierten Funktionen festlegen.
Wie kann ich überzeugen org-insert-link
, das :description
automatisch zu verwenden, ohne mich dazu aufzufordern?
link-location
oderdefault-description
in der Funktionorg-insert-link
? Wenn der Parameter LINK-LOCATION nicht Null ist, wird dieser Wert als Verbindungsposition verwendet, anstatt eine interaktiv zu lesen. Wenn der Parameter DEFAULT-DESCRIPTION nicht null ist, wird dieser Wert als Standardbeschreibung verwendet.Antworten:
Am unteren Rand des Dokumentstrings
org-insert-link
ist ein Hinweis vergraben , der:Anscheinend
org
werden beim Speichern eines Links viele Informationen weggeworfen, sodassorg-stored-links
nur noch eine Liste der Einträge des Formulars übrig bleibt(link description)
. Sofern die frühere Funktion einen Dateinamen für den Link hat, sieht es folgendermaßen aus:Es ist irgendwie hackig und ich habe es nicht ausgiebig getestet, aber es scheint bisher zu funktionieren. Würde mich natürlich über eine elegantere Lösung freuen.
quelle
dired-store-link
einfach die gewünschte Beschreibung erstellen? Ich denke, das würde viel kürzer enden.Ich verwende org 9.1.6 und zu meiner Bestürzung scheint es
org-store-link-functions
sich nun um eine integrierte org-Funktion zu handeln (und nicht um einen Hook), sodass die ursprüngliche Lösung nicht mehr funktioniert. Es kann eine Problemumgehung gebenorg-link-parameters
, aber stattdessen verwende ich den folgenden kleinen Hack, der den Trick zu tun scheint:Als Bonus werden Sie nicht zur Beschreibung aufgefordert, da die Beschreibung, an die
org-stored-links
gesendet wird, nicht Null ist.quelle