P: Como posso obter uma org
função de link personalizado para inserir uma descrição automaticamente?
Gostaria de armazenar org
links para arquivos em um dired
buffer, mas preferiria que a descrição do link fosse o nome do arquivo sem o caminho, em vez de informar o caminho completo, ou seja:
file:~/the/full/path/myfile.ext ; default, but no thanks
myfile.ext ; what I want
Agora: org-store-link
codifica os links diretamente dired
para fornecer o padrão. Em vez disso, escrevi uma função personalizada (usando a função codificada) e a adicionei 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)
Até aí tudo bem, e funciona como esperado, mas por um lado:
- Ao chamar
org-insert-link
com o comportamento padrão interno, ele simplesmente insere o link sem solicitar uma descrição. - Ao chamar
org-insert-link
com minha função personalizada, ele solicita que eu insira uma descrição (que é preenchida corretamente com o nome do arquivo armazenado na:description
propriedade).
Prefiro não ser solicitada a descrição a cada vez e quero org-insert-link
usar o valor :description
que a função personalizada define.
Como posso convencer org-insert-link
a usar o :description
automaticamente sem me solicitar?
link-location
oudefault-description
na funçãoorg-insert-link
ajudam algum? Se o parâmetro LINK-LOCATION for nulo, esse valor será usado como o local do link em vez de ler um de forma interativa. Se o parâmetro DEFAULT-DESCRIPTION for nulo, esse valor será usado como a descrição padrão.Respostas:
Enterrado na parte inferior da doutrina,
org-insert-link
há uma observação de que:Aparentemente,
org
joga fora muitas informações no processo de armazenamento de um link, então tudo o que restaorg-stored-links
é uma lista de entradas do formulário(link description)
. Na medida em que a função anterior possui um nome de arquivo para o link, ela se parece com o seguinte:É meio hacky, e eu não o testei extensivamente, mas parece funcionar até agora. Ficaria emocionado ao ver uma solução mais elegante, é claro.
fonte
dired-store-link
e apenas usar isso para criar a descrição que deseja? Eu acho que isso acabaria muito mais curto.Estou usando a org 9.1.6 e, para meu desespero, parece que
org-store-link-functions
agora é uma função organizacional incorporada (em vez de um gancho), portanto a solução original não funciona mais. Pode haver uma solução alternativa usandoorg-link-parameters
, mas em vez disso, estou usando o seguinte pequeno truque, que parece fazer o truque:Como bônus, isso não solicita uma descrição, pois a descrição enviada para
org-stored-links
é nula.fonte