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.