come saltare direttamente a un titolo org?


16

Se mi trovo in un file org, voglio un comando che restringa un elenco di candidati, in stile edera / helm, comprendente tutti i titoli dell'organizzazione nel file e mi permetta di scegliere il titolo, attraverso la ricerca fuzzy, a cui voglio saltare per. C'è un modo per farlo?

Risposte:


13

Il nodo Manuale Org su Motion fornisce una descrizione alquanto laconica del comando incorporato org-goto(associazione predefinita:) C-c C-j, il cui comportamento può essere facilmente personalizzato per ottenere l'effetto desiderato:

  1. Ispeziona la documentazione della variabile personalizzabile elencata alla fine di questo nodo manuale: C-h v org-goto-interface RET
  2. Se sei felice di rinunciare al org-gotocomportamento predefinito della ricerca incrementale attraverso la struttura del buffer, puoi passare a scegliere un titolo al termine:

    (setq org-goto-interface 'outline-path-completion)
  3. Gli utenti di pacchetti di completamento come ido/ ivy/ helmprobabilmente vorranno modificare le seguenti impostazioni per vedere l'intero percorso target contemporaneamente:

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

    Vedi qui per ulteriori discussioni.

Questo approccio ha il vantaggio (oltre utilizzando, per esempio, helmla funzionalità -specifica) di lavorare con tutti i framework di completamento che spina nella predefinito completing-read, tra cui, come posso personalmente confermare, ivy.

APPENDICE:

Quando si utilizza l' outline-path-completioninterfaccia per il org-gotocomando come descritto in questa risposta, la variabile personalizzabile org-goto-max-leveldetermina la profondità massima dei titoli da offrire.

MODIFICARE:

Ho trovato una domanda più vecchia e pertinente con risposte utili: /programming//q/15011703/3084001

CHIARIMENTO (come richiesto dal commento di Att Righ):

L'impostazione org-goto-interfacesu uno dei due valori riconosciuti non significa sacrificare l'interfaccia alternativa. La chiamata org-gotocon un argomento prefisso (ovvero C-u C-c C-jo C-u M-x org-goto RET) seleziona automaticamente l'interfaccia alternativa per il completamento corrente. In questo modo, è possibile impostare org-goto-interfacel'interfaccia che è probabile che si utilizzi più spesso e utilizzare l'argomento prefisso quando si desidera cambiare temporaneamente il comportamento. Se anche questo non soddisfa le tue esigenze, puoi sempre scrivere il tuo wrapper org-goto, come nell'esempio di Att Righ.


> rinuncia al comportamento predefinito di org-goto, puoi aggirare il problema usando un'associazione let attorno alla chiamata funzionale(defun my-org-goto () (let ((org-goto-interface 'outline-path-completion)) (org-goto)))
Att Righ

outline-path-completionnon gioca bene con helmsulla mia scatola (non può completare oltre un livello - raggiunto premendo <TAB>se helm è disabilitato: vedi helm-completing-read-handlers-alist)
Att Righ

@AttRigh Certo, le letespressioni possono essere usate per qualsiasi tipo di associazione temporanea; questa domanda riguarda maggiormente le impostazioni / funzionalità / i pacchetti pertinenti. Un modo più generale per ottenere un passaggio temporaneo di interfaccia è chiamare org-gotocon un argomento prefisso. Aggiungerò una nota a questa risposta.
Basil,

@AttRigh Ricordo di aver visto qualcosa di simile con ivy, ma solo durante il refiling e con un'impostazione di profondità errata org-refile-targets, poiché org-gotoadatta temporaneamente le impostazioni rilevanti per il refile in base alle sue esigenze. Purtroppo non sono in grado di esplorare la helmfunzionalità al momento, forse un altro utente può intervenire?
Basil,

1
grazie @Basil per la risposta dettagliata. Sfortunatamente, il completamento di questo approccio non funziona bene come worfo counsel-imenu.
ninrod

8

Uso il pacchetto worf , ma associo solo una delle sue funzioni:

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

worf-goto ti fornisce un elenco delle intestazioni nel buffer nel mini buffer, che puoi quindi filtrare.

Il pacchetto è stato creato dall'autore di edera , quindi se ti piace l'edera, ti potrebbe piacere Worf.

Alcuni frammenti rilevanti di 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)))))

1
grazie @tirocinium. counsel-imenuil completamento funziona meglio di Worf ma non può cercare tra i titoli dell'organizzazione di livello 1. worfs cerca tutti i livelli, quindi penso che questo sia quello che sto cercando.
ninrod

@ninrod Hai provato a impostare org-imenu-depthqualcosa di più grande del valore predefinito di 2?
Sam,

5

Trovo il fucile helm-org particolarmente piacevole. Anche tutto ciò che prende la fonte imenu sarà in grado di visualizzare le intestazioni (ad esempio Helm con imenu).


Va notato che helm-org-riflecerca il contenuto delle voci dell'organizzazione oltre ai loro titoli. Non ho trovato alcun modo per modificare questo comportamento. helm-org-rifleriferimenti org-search-gotoche eseguono ricerche in tutti i titoli ma non supportano realmente la ricerca confusa.
Att Righ,

Att Righ ha ragione, helm-org-riflenon cerca solo le intestazioni. Potrebbe essere espanso per fare questo, ma ci sono poche ragioni per farlo, dal momento che helm-org-in-buffer-headings, ecc. Esistono in Helm stesso.
blujay

4

imenuè integrato in Emacs e può essere abbinato a helm / ivy per fornire la ricerca fuzzy richiesta. Ti consiglierei helm-org-riflese usi il timone, comunque.


4

Flagrante autopromozione, ma potresti provare orgnav . Qual è il mio tipo di progetto alfa (ma attivamente utilizzato da me) per questo scopo.

orgnav cerca i titoli piuttosto che i contenuti, può variare la profondità della ricerca, cercare i sottotitoli piuttosto che l'intero file (anche se questo può essere ottenuto anche con il restringimento).

Ecco un video di alcune funzionalità: https://asciinema.org/a/1r0fp33xgwh48lfgsh7mllw4u

Probabilmente dovresti anche essere consapevole del helm-orgpacchetto che fa parte helmdell'ispirazione per questo pacchetto (o piuttosto i cui limiti erano l'ispirazione per questo pacchetto), così come helm-org-riflediscusso in altri post.

(Per gentile concessione di risposte qui: https://www.reddit.com/r/emacs/comments/69mc6l/how_to_jump_directly_to_an_orgheadline/ ) Anche potenzialmente interessante è la worf-gotofunzione come parte di worf(una modalità di navigazione dell'organizzazione che applica un diverso set di combinazioni di tasti oltre "*" prima dei titoli). Questo sembra molto analogo a helm-org.


4

La libreria swiper ha una nuova funzionalità in 0.9.0, che è il completamento per i titoli dei file nei tuoi file agenda-org.

consiglio-org-giorno-titoli

Devo solo impostare l'elenco dei file dell'agenda in init init.

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

In relazione alla risposta di @ tirocinium, questo fornisce lo stesso ma per molti file dell'agenda.


3

Io uso counsel-imenu; elencherà le diverse teste, è possibile digitare alcune lettere per restringere la selezione e quindi premere <return>.


ciao @gnuvince. questo non mi permette di passare ai file org di livello 1 giusto?
ninrod,

2

Mi raccomando helm-org-in-buffer-headings. È integrato in Helm e rispetta i buffer ristretti, il che è importante se si utilizzano i buffer indiretti per modificare i sottotitoli in modo indipendente. C'è anche helm-org-parent-headingsper navigare su un albero e helm-org-agenda-files-headingsper navigare attraverso tutti i file dell'agenda.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.