Então, estou tentando criar um "modo de autolinks" para emular a funcionalidade de software de anotação como o Tomboy Notes ou o notes.vim, que vincula automaticamente qualquer texto que seja o título de uma anotação. Mas sou totalmente novo no Emacs e no Elisp. Isto é o que eu tenho até agora (é como o primeiro elisp que eu já escrevi, seja gentil):
;; Set directory of files to search for *.org files
(setq autolinks-mode-dir "~/Dropbox/Org/")
;; Get all .org files in this directory.
(setq autolinks-mode-files (directory-files autolinks-mode-dir t "[.]org\\'"))
;; Convert it to a list of just the filenames, without paths.
(setq autolinks-mode-files-bare
(mapcar 'file-name-nondirectory autolinks-mode-files))
;; Strip extensions
(setq autolinks-mode-topics
(mapcar 'file-name-sans-extension autolinks-mode-files-bare))
Por enquanto, tudo bem. Agora eu tenho uma lista de tópicos e uma lista de arquivos correspondentes. Por exemplo, o tópico "James" corresponde a um arquivo organizacional em "/path/to/notes/James.org". Agora, eu quero atualizar manualmente a lista de links da organização para um buffer específico com esta lista de tópicos, para que, quando eu ative este modo, destaque qualquer instância da palavra "James" em um buffer da organização e faça dele um link para /path/to/notes/James.org
. O mesmo com um arquivo organizacional com várias palavras, como "Henry James", que apontaria para /path/to/notes/Henry James.org
. Observe que não estou tentando substituir todas as instâncias de James
com [[James]]
ou <James>
ou algo, apenas tentando fazer com que esses trechos de texto se comportem como links.
Eu estive navegando no org.el e vi esta variável:
(defvar org-link-re-with-space nil
"Matches a link with spaces, optional angular brackets around it.")
Que no meu sistema tem todos os tipos de coisas, provavelmente devido ao org-ref e outras coisas:
org-link-re-with-space is a variable defined in ‘org.el’.
Its value is
"<?\\(A\\(?:cp?\\|utocite[*s]?\\)\\|Cite\\(?:a\\(?:l[pt]\\|uthor\\*?\\)\\|[pst]\\)?\\|Gls\\(?:pl\\)?\\|Notecite\\|P\\(?:arencites?\\|notecite\\)\\|Smartcites?\\|Textcites?\\|a\\(?:c\\(?:p\\|r\\(?:full\\|long\\|short\\)\\)?\\|ddbibresource\\|uto\\(?:cite[*s]?\\|ref\\)\\)\\|b\\(?:bdb\\|ib\\(?:entry\\|liography\\(?:style\\)?\\|tex\\)\\)\\|cite\\(?:a\\(?:l\\(?:[pt]\\*\\|[pt]\\)\\|uthor\\*?\\)\\|date\\*?\\|num\\|p\\*\\|t\\(?:\\*\\|ext\\|itle\\*?\\)\\|url\\|year\\*?\\|[*pst]\\)?\\|do\\(?:cview\\|i\\)\\|e\\(?:l\\(?:feed\\|isp\\)\\|qref\\)\\|f\\(?:ile\\(?:\\+\\(?:\\(?:emac\\|sy\\)s\\)\\)?\\|notecite\\|oot\\(?:cite\\(?:s\\|texts?\\)?\\|fullcite\\)\\|tp\\|ullcite\\)\\|g\\(?:ls\\(?:desc\\|link\\|\\(?:p\\|symbo\\)l\\)?\\|nus\\)\\|h\\(?:elp\\|ttps?\\)\\|i\\(?:n\\(?:dex\\|fo\\)\\|pynb\\|rc\\)\\|l\\(?:abel\\|ist-of-\\(?:\\(?:figur\\|tabl\\)es\\)\\)\\|m\\(?:ailto\\|\\(?:essag\\|h\\|u4\\)e\\)\\|n\\(?:ameref\\|ews\\|o\\(?:bibliography\\|\\(?:te\\)?cite\\)\\)\\|orgit\\(?:-\\(?:log\\|rev\\)\\)?\\|p\\(?:a\\(?:geref\\|rencite[*s]?\\)\\|notecite\\|rint\\(?:bibliography\\|index\\)\\)\\|r\\(?:ef\\|mail\\)\\|s\\(?:hell\\|martcites?\\|upercites?\\)\\|textcites?\\|w3m\\):\\([^]
Portanto, parece que a Org possui a funcionalidade para destacar o texto sem formatação como um link. Só não sei a melhor maneira de fazê-lo. Acho que posso anexar minha lista de palavras de link org-link-re-with-space
, talvez? Mas então, como faço para definir suas metas? Qualquer ajuda seria muito apreciada.
fonte
James
com[[file:/path/to/notes/James.org][James]]
no buffer. Em seguida, ele aparecerá como um link se o buffer estiver noorg-mode
modo principal.Respostas:
Acredito que isso é essencialmente o que você deseja:
Você pode incorporar isso em uma função e chamá-lo em um gancho no modo organizacional e ativar o modo de bloqueio de botão. Isso deve fazer com que seus tópicos pareçam links e, quando você clicar neles, abrirá o arquivo. Um possível soluço é a ordem em que os tópicos são pesquisados. Você deseja garantir que "Henry James" seja pesquisado antes de James, o que pode levar a uma ordenação por comprimento ou algo assim.
fonte