P: Jak mogę uzyskać niestandardową org
funkcję linku do automatycznego wstawiania opisu?
Chciałbym przechowywać org
linki do plików w dired
buforze, ale wolałbym, aby opis linku był ścieżką bez nazwy pliku, niż zgłosić pełną ścieżkę, tj .:
file:~/the/full/path/myfile.ext ; default, but no thanks
myfile.ext ; what I want
Teraz: org-store-link
twarde kody łączy z, dired
aby podać wartość domyślną. Zamiast tego napisałem niestandardową funkcję (cribbing z funkcji zakodowanej na stałe) i dodałem ją do 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)
Jak dotąd tak dobrze i działa zgodnie z oczekiwaniami, ale z jednej strony:
- Podczas wywoływania
org-insert-link
z wbudowanym domyślnym zachowaniem, po prostu wstawia link, nie pytając mnie o opis. - Podczas wywoływania za
org-insert-link
pomocą mojej funkcji niestandardowej monituje mnie o wprowadzenie opisu (który poprawnie wypełnia nazwą pliku zapisaną we:description
właściwości).
Wolałbym nie być monitowany o opis za każdym razem i chcę org-insert-link
użyć wartości :description
tego zestawu funkcji niestandardowych.
Jak przekonać org-insert-link
do korzystania z :description
trybu automatycznego bez monitowania mnie o to?
link-location
lubdefault-description
funkcjaorg-insert-link
pomagają? Jeśli parametr LINK-LOCATION ma wartość inną niż zero, ta wartość zostanie użyta jako lokalizacja łącza zamiast odczytu jednego interaktywnie. Jeśli parametr DEFAULT-DESCRIPTION ma wartość inną niż zero, ta wartość zostanie użyta jako opis domyślny.Odpowiedzi:
Na dole dokumentu
org-insert-link
znajduje się uwaga, że:Najwyraźniej
org
wyrzuca wiele informacji w procesie przechowywania linku, więc pozostajeorg-stored-links
tylko lista wpisów formularza(link description)
. O ile wcześniejsza funkcja ma nazwę pliku łącza, wygląda to następująco:To trochę hacky i nie testowałem go dokładnie, ale wydaje się, że do tej pory działa. Oczywiście z radością zobaczyłbym bardziej eleganckie rozwiązanie.
źródło
dired-store-link
i po prostu użyć jej do stworzenia pożądanego opisu? Myślę, że skończyłoby to znacznie krócej.Używam org 9.1.6 i ku mojemu przerażeniu wydaje się, że
org-store-link-functions
jest to teraz wbudowana funkcja org (a nie hook), więc oryginalne rozwiązanie już nie działa. Może być obejście problemuorg-link-parameters
, ale zamiast tego używam następującego małego hacka, który wydaje się załatwić:Jako bonus nie wyświetla monitu o opis, ponieważ przekazany opis
org-stored-links
jest inny niż zero.źródło