Inserir link de identificação organizacional no ponto através da conclusão do caminho de estrutura de tópicos


11

Atualmente, para inserir links de org-id internos no modo organizacional, eu navego para um cabeçalho ou puxo para cima na exibição da agenda (pesquisa de teste de cabeçalho RET), armazeno o link com Cl (org-store-link), voltando para onde Quero inserir o link e insira o link com Cc Cl (org-insert-link).

Em vez disso, eu preferiria mapear uma chave que permita inserir um link no ponto atual usando a conclusão de tabulação semelhante ao org-refile (Cc Cw). O resultado pretendido seria um link interno da identificação organizacional no formato:

[[id:d7534b2f-c221-4dea-8566-d5ce3e4e1b78][Example Link]]

Olhando através do org-id.el, parece que o org-id-get-with-outline-path-complete foi projetado para esse fim. Eu tentei:

(global-set-key "\C-ci" (lambda () (interactive) (org-id-get-with-outline-path-completion)))

mas não funcionou como pretendido.

Eu tenho o seguinte no meu arquivo init.el:

;; Use global IDs
(require 'org-id)
(setq org-id-link-to-org-use-id t)

;; Update ID file .org-id-locations on startup
(org-id-update-id-locations)

;; Refile options
(setq org-refile-targets (quote ((nil :maxlevel . 9) (org-agenda-files :maxlevel . 9))))
(setq org-refile-use-outline-path 'file)
(setq org-outline-path-complete-in-steps t)
(setq org-refile-allow-creating-parent-nodes t)

Está faltando um "-" no org-id-get-with outline-path-completion. Esse é o problema?
Erikstokes

Infelizmente não - foi apenas um erro tipográfico. Eu atualizei a pergunta.
Sk8ingdom 14/05

Que pena. Como está falhando? Funciona quando eu tento.
Erikstokes 14/05

A função é definitivamente chamada. Ele me solicita a entrada, permite navegar pela conclusão da guia (o que é ótimo e funciona conforme o esperado), mas quando pressiono enter, em vez de colar o link, apenas move o cursor para o título atual, semelhante a Cc Cu (esboço).
Sk8ingdom 14/05

Eu pensei que isso poderia ter sido causado por uma versão desatualizada da organização, mas tentei a mais recente no Emacs 24.5, portanto deve ser algo na minha configuração. Alguém pode confirmar que meu código acima realmente insere um link para eles?
Sk8ingdom 14/05

Respostas:


6

Procurei na fonte do modo organizacional e encontrei um recurso minimamente documentado . Se você definir uma função org-TYPE-complete-link, ela será usada para fornecer a conclusão para links do tipo TYPE. Então, apenas precisamos definir uma função org-id-complete-linkque conclua e retorne o link (incluindo o prefixo "id:").

(defun org-id-complete-link (&optional arg)
  "Create an id: link using completion"
  (concat "id:"
          (org-id-get-with-outline-path-completion)))

Insira o link da maneira normal (com C-c C-l), selecione "id:", pois o tipo e a função de conclusão serão acionados.

EDIT: A partir da org-modeversão 9.0, apenas definir a função como acima acima não funciona mais ( ref ). Em vez disso, você deve adicionar a função de conclusão ao org-link-parametersuso

(org-link-set-parameters "id"
                         :complete 'org-id-complete-link)

Isso é excelente e funciona como planejado! A única modificação que fiz foi adicionar org-refile-target como argumento para org-id-get-with-outline-path-complete. Dessa forma, eu posso pegar links de QUALQUER dos meus arquivos organizacionais. Obrigado pela ajuda!
Sk8ingdom 15/05

@ sk8ingdom Você pode atualizar a pergunta para incluir sua solução final? Não tenho a certeza que os meios doc porTARGETS may be a setting for ‘org-refile-targets’ to define eligible headlines.
kshenoy

A solução final é apenas definir a função acima e também chamar org-link-set-parametersse você estiver usando org-mode9. O argumento extra para org-id-get-with-outline-path-completionpermitir que você limite as manchetes de sua escolha, assim como org-refile-targetsfaz quando refila. Veja a ajuda de tudo, mas uma configuração comum é ((org-agenda-files :maxlevel . 3) (nil :maxlevel . 2))que limita a 3 níveis de profundidade nos arquivos da agenda e 2 no buffer atual.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.