Q: Как я могу получить пользовательскую org
функцию ссылки для автоматической вставки описания?
Я хотел бы хранить org
ссылки на файлы в dired
буфере, но предпочел бы, чтобы описание ссылки было именем файла без пути, а не сообщало полный путь, то есть:
file:~/the/full/path/myfile.ext ; default, but no thanks
myfile.ext ; what I want
Теперь: org-store-link
жесткие ссылки dired
для обеспечения по умолчанию. Вместо этого я написал пользовательскую функцию (извлечение из жестко закодированной функции) и добавил ее в 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)
Пока все хорошо, и работает как положено, но с одной стороны:
- При вызове
org-insert-link
со встроенным поведением по умолчанию он просто вставляет ссылку, не спрашивая у меня описания. - При вызове
org-insert-link
с моей пользовательской функцией мне предлагается ввести описание (которое корректно заполняется именем файла, хранящимся в:description
свойстве).
Мне бы не хотелось каждый раз запрашивать описание, и я хочу org-insert-link
использовать значение, :description
которое устанавливает пользовательская функция.
Как я могу убедить org-insert-link
использовать :description
автоматически, не спрашивая меня об этом?
link-location
илиdefault-description
функцияorg-insert-link
? Если параметр LINK-LOCATION не равен nil, это значение будет использоваться в качестве местоположения ссылки вместо интерактивного чтения. Если параметр DEFAULT-DESCRIPTION не равен nil, это значение будет использоваться в качестве описания по умолчанию.Ответы:
Внизу строки документации
org-insert-link
находится примечание, которое:По всей видимости,
org
в процессе хранения ссылки выбрасывается много информации, поэтому все, что осталосьorg-stored-links
- это список записей формы(link description)
. Поскольку более ранняя функция имеет имя файла для ссылки, это выглядит следующим образом:Это отчасти хакерский, и я не проверял это всесторонне, но, похоже, пока работает. Конечно, было бы приятно увидеть более элегантное решение.
источник
dired-store-link
и просто использовать это, чтобы создать описание, которое вы хотите? Я думаю, что это будет намного короче.Я использую org 9.1.6, и, к моему ужасу, кажется, что
org-store-link-functions
теперь это встроенная функция org (а не ловушка), поэтому оригинальное решение больше не работает. Можно использовать обходной путьorg-link-parameters
, но вместо этого я использую следующий небольшой взлом, который, кажется, делает свое дело:В качестве бонуса, это не запрашивает описание, так как добавляемое описание не
org-stored-links
равно нулю.источник