como pular diretamente para um título da organização?

16

Se eu estiver em um arquivo organizacional, desejo um comando que restrinja uma lista de candidatos, no estilo ivy / helm, composta por todas as manchetes da organização no arquivo e permita que eu escolha a manchete, por meio de pesquisa difusa, para a qual quero pular para. Existe uma maneira de fazer isso?

ninrod
fonte

Respostas:

13

O nó Manual da organização no Motion fornece uma descrição um tanto lacônica do comando interno org-goto(ligação padrão:) C-c C-j, cujo comportamento pode ser facilmente personalizado para obter o efeito desejado:

  1. Inspecione a documentação da variável personalizável listada no final deste nó manual: C-h v org-goto-interface RET
  2. Se você deseja excluir o org-gotocomportamento padrão da pesquisa incremental através do esboço do buffer, pode mudar para escolher um título através da conclusão:

    (setq org-goto-interface 'outline-path-completion)
  3. Os usuários de pacotes de conclusão como ido/ ivy/ helmprovavelmente desejarão alterar a seguinte configuração para ver todo o caminho de destino de uma só vez:

    (setq org-outline-path-complete-in-steps nil)

    Veja aqui para mais discussão.

Essa abordagem tem o benefício adicional (sobre o uso, digamos, da helmfuncionalidade específica) de trabalhar com todas as estruturas de conclusão que se encaixam no padrão completing-read, incluindo, como posso confirmar pessoalmente ivy.

TERMO ADITIVO:

Ao usar a outline-path-completioninterface para o org-gotocomando, conforme descrito nesta resposta, a variável personalizável org-goto-max-leveldetermina a profundidade máxima dos títulos a oferecer.

EDITAR:

Encontrei uma pergunta relevante e antiga com respostas úteis: /programming//q/15011703/3084001

ESCLARECIMENTO (conforme solicitado pelo comentário de Att Righ):

Definir org-goto-interfaceum dos dois valores reconhecidos não significa sacrificar a interface alternativa. Chamar org-gotocom um argumento de prefixo ( C-u C-c C-jou seja C-u M-x org-goto RET) seleciona automaticamente a interface alternativa para a conclusão atual. Dessa forma, você pode definir org-goto-interfacea interface que provavelmente usará com mais freqüência e usar o argumento de prefixo quando desejar alternar temporariamente o comportamento. Se mesmo isso não atender às suas necessidades, você sempre poderá escrever seu próprio invólucro org-goto, como no exemplo de Att Righ.

Manjericão
fonte
> Renunciar o comportamento padrão org-Goto, você pode contornar isso usando um deixe de ligação em torno da chamada funcional(defun my-org-goto () (let ((org-goto-interface 'outline-path-completion)) (org-goto)))
Att Righ
outline-path-completionnão jogar bem com helmna minha caixa (não possa completar o nível um passado - alcançado pressionando <TAB>se helm está desativado: veja helm-completing-read-handlers-alist)
Att Righ
@AttRigh Claro, let-expressions podem ser usadas para qualquer tipo de ligação temporária; Esta pergunta é mais sobre configurações / funcionalidades / pacotes relevantes. Uma maneira mais geral de obter uma troca temporária de interface é chamar org-gotocom um argumento de prefixo. Vou adicionar uma nota a esta resposta.
Basil
@AttRigh Lembro-me de ver algo parecido com ivy, mas apenas ao refilar e com uma profundidade incorreta configurada org-refile-targets, pois org-gotoadapta temporariamente as configurações relevantes ao refil para atender às suas necessidades. Infelizmente, não estou em condições de explorar a helmfuncionalidade no momento, talvez outro usuário possa entrar?
Basil
1
obrigado @Basil pela resposta detalhada. Infelizmente, a conclusão dessa abordagem não funciona tão bem quanto worfou counsel-imenu.
Ninrod 8/05
8

Eu uso o pacote worf , mas vinculo apenas uma de suas funções:

 (use-package worf
    :diminish worf-mode
    :bind (:map org-mode-map ("C-c h" . worf-goto)))

worf-goto fornece uma lista dos títulos no buffer no mini buffer, que você pode filtrar.

O pacote é feito pelo autor do ivy ; portanto, se você gosta do ivy, pode gostar do worf.

Alguns trechos relevantes do worf.el:

;;  - "g" (`worf-goto'): select an outline in the current buffer, with
;;    completion.  It's very good when you want to search/navigate to
;;    a heading by word or level. See https://github.com/abo-abo/lispy
;;    for a package that uses this method to navigate Lisp code.

(defun worf-goto-action (x)
  (with-ivy-window
    (goto-char (cdr x))
    (outline-show-children 1000)
    (worf-more)))

(defun worf-goto ()
  "Jump to a heading with completion."
  (interactive)
  (let ((cands (worf--goto-candidates)))
    (cond ((eq worf-completion-method 'helm)
           (require 'helm-multi-match)
           (let (helm-update-blacklist-regexps
                 helm-candidate-number-limit)
             (helm :sources
                   `((name . "Headings")
                     (candidates . ,cands)
                     (action . worf-goto-action)
                     (pattern-transformer . worf--pattern-transformer)))))
          ((eq worf-completion-method 'ivy)
           (ivy-read "Heading: " cands
                     :action 'worf-goto-action)))))
tirocínio
fonte
1
obrigado @tirocinium. counsel-imenua conclusão funciona melhor que o worf, mas não é possível pesquisar nas manchetes da organização level1. worfs pesquisa todos os níveis, então acho que é isso que estou procurando.
Ninrod 8/17
@ninrod Você tentou definir org-imenu-depthalgo maior que o padrão de 2?
Sam
5

Acho rifle de leme-org particularmente agradável. Além disso, qualquer coisa que utilize a fonte imenu poderá exibir cabeçalhos (por exemplo, Helm with imenu).

user673592
fonte
Note-se que helm-org-riflepesquisa o conteúdo das entradas da organização, além de seus títulos. Não encontrei nenhuma maneira de alterar esse comportamento. helm-org-riflereferências org-search-gotoque pesquisam todas as manchetes, mas realmente não suportam a pesquisa difusa.
Att Righ
Att Righ está certo, helm-org-riflenão pesquisa apenas títulos. Pode ser expandido para fazer isso, mas há poucas razões para fazê-lo, pois helm-org-in-buffer-headings, etc. existem no próprio Helm.
Blujay
4

imenuestá embutido no Emacs e pode ser emparelhado com helm / ivy para fornecer a pesquisa difusa necessária. Eu recomendaria helm-org-riflese você usar o leme, no entanto.

monotux
fonte
4

Autopromoção flagrante , mas você pode experimentar o orgnav . Qual é o meu tipo de projeto alfa (mas usado ativamente por mim) para esse fim.

O orgnav pesquisa títulos em vez de conteúdo, pode variar a profundidade da pesquisa, pesquisar subárvores em vez de todo o arquivo (embora isso também possa ser alcançado com o estreitamento).

Aqui está um vídeo de alguns recursos: https://asciinema.org/a/1r0fp33xgwh48lfgsh7mllw4u

Você provavelmente também deve estar ciente do helm-orgpacote que é parte do helmqual foi a inspiração para este pacote (ou melhor, cujas limitações foram a inspiração para este pacote), bem como helm-org-riflediscutido em outras postagens.

(Cortesia das respostas aqui: https://www.reddit.com/r/emacs/comments/69mc6l/how_to_jump_directly_to_an_orgheadline/ ) Também potencialmente interessante é a worf-gotofunção como parte de worf(um modo de navegação organizacional que aplica um conjunto diferente de combinações de teclas sobre "*" antes das manchetes). Isso parece muito análogo a helm-org.

Att Righ
fonte
4

A biblioteca swiper possui um novo recurso na 0.9.0, que é a conclusão para manchetes de arquivos em seus arquivos de agenda organizacional.

conselho-org-agenda-manchetes

Só precisa configurar sua lista de arquivos da agenda no org init.

(setq org-agenda-files (list "~/org/work.org"
                             "~/org/school.org" 
                             "~/org/home.org"))

Em relação à resposta do @ tirocinium, isso fornece o mesmo, mas para muitos arquivos de agenda.

Darryl Hebbes
fonte
3

Eu uso counsel-imenu; Ele listará as diferentes cabeças. Você pode digitar algumas letras para restringir sua seleção e pressionar <return>.

gnuvince
fonte
oi @gnuvince. isso não me permite pular para os arquivos org de nível 1, certo?
Ninrod 6/05
2

Eu recomendo helm-org-in-buffer-headings. Ele é incorporado ao Helm e respeita os buffers limitados, o que é importante se você usar buffers indiretos para editar subárvores independentemente. Também há helm-org-parent-headingspara navegar em uma árvore e helm-org-agenda-files-headingspara navegar em todos os arquivos da agenda.

Blujay
fonte