jak przejść bezpośrednio do nagłówka org?


17

Jeśli jestem w pliku org, chcę polecenia, które zawęża listę kandydatów, w stylu bluszczu / steru, złożonym ze wszystkich nagłówków org w pliku i pozwala mi wybrać nagłówek poprzez wyszukiwanie rozmyte, do którego chcę przejść do. Czy jest na to sposób?

Odpowiedzi:


13

Węzeł Org Manual na Motion podaje nieco lakoniczny opis wbudowanego polecenia org-goto(domyślne wiązanie:) C-c C-j, którego zachowanie można łatwo dostosować, aby osiągnąć pożądany efekt:

  1. Przejrzyj dokumentację zmiennej, którą można dostosować, wymienionej na końcu tego węzła instrukcji: C-h v org-goto-interface RET
  2. Jeśli zechcesz zrezygnować z domyślnego org-gotozachowania polegającego na stopniowym przeszukiwaniu konturu bufora, możesz przejść do wybrania nagłówka po zakończeniu:

    (setq org-goto-interface 'outline-path-completion)
  3. Użytkownicy pakietów uzupełniających, takich jak ido/ ivy/ helm, prawdopodobnie będą chcieli zmienić następujące ustawienie, aby jednocześnie zobaczyć całą ścieżkę docelową:

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

    Zobacz tutaj, aby uzyskać więcej dyskusji.

Podejście to ma tę dodatkową zaletę (ponad użyciu, powiedzmy, helmspecyficzny zestaw funkcjonalności) pracy ze wszystkimi ramami ukończenia tej wtyczki do domyślnie completing-read, w tym, jak mogę osobiście potwierdzić, ivy.

UZUPEŁNIENIE:

Podczas używania outline-path-completioninterfejsu org-gotopolecenia zgodnie z opisem w tej odpowiedzi konfigurowalna zmienna org-goto-max-levelokreśla maksymalną głębokość nagłówków do zaoferowania.

EDYTOWAĆ:

Znalazłem starsze, odpowiednie pytanie z przydatnymi odpowiedziami: /programming//q/15011703/3084001

WYJAŚNIENIE (zgodnie z komentarzem Att Righa):

Ustawienie org-goto-interfacejednej z dwóch rozpoznawanych wartości nie oznacza poświęcenia alternatywnego interfejsu. Wywołanie org-gotoz argumentem przedrostka (tj. C-u C-c C-jLub C-u M-x org-goto RET) automatycznie wybiera alternatywny interfejs dla bieżącego zakończenia. W ten sposób możesz ustawić org-goto-interfaceinterfejs, którego najczęściej używasz, i użyć argumentu prefiksu, jeśli chcesz tymczasowo zmienić zachowanie. Jeśli nawet to nie odpowiada Twoim potrzebom, zawsze możesz napisać własne opakowanie org-goto, jak na przykładzie Att Righa.


> zrezygnuj z domyślnego zachowania org-goto, możesz obejść ten problem, używając wiązania let wokół wywołania funkcjonalnego(defun my-org-goto () (let ((org-goto-interface 'outline-path-completion)) (org-goto)))
Att Righ

outline-path-completionnie gra ładnie helmna moim pudełku (nie można ukończyć pierwszego poziomu - osiąga się przez naciśnięcie, <TAB>jeśli helm jest wyłączone: patrz helm-completing-read-handlers-alist)
Att Righ

@AttRigh Pewnie, -wyrażeń letmożna użyć do dowolnego rodzaju tymczasowego wiązania; to pytanie dotyczy bardziej odpowiednich ustawień / funkcjonalności / pakietów. Bardziej ogólnym sposobem uzyskania tymczasowego przełączenia interfejsu jest wywołanie org-gotoz argumentem przedrostka. Dodam notatkę do tej odpowiedzi.
Basil

@AttRigh Pamiętam, że widziałem coś podobnego z ivy, ale tylko podczas uzupełniania i z niepoprawnym ustawieniem głębokości org-refile-targets, ponieważ org-gototymczasowo dostosowuje ustawienia dotyczące ponownego dopasowania do swoich potrzeb. Niestety helmw tej chwili nie jestem w stanie zbadać tej funkcjonalności, być może inny użytkownik może się do niej włączyć?
Basil

1
dzięki @Basil za szczegółową odpowiedź. Niestety zakończenie tego podejścia nie działa tak dobrze, jak worflub counsel-imenu.
ninrod

8

Korzystam z pakietu worf , ale wiążę tylko jedną z jego funkcji:

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

worf-goto daje listę nagłówków w buforze w mini buforze, które można następnie filtrować.

Pakiet jest wykonany przez autora bluszczu , więc jeśli lubisz bluszcz, możesz polubić worf.

Niektóre odpowiednie fragmenty z 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
dzięki @tirocinium. counsel-imenuUkończenie działa lepiej niż worf, ale nie można przeszukiwać nagłówków org poziomu 1. worfs przeszukuje wszystkie poziomy, więc myślę, że tego właśnie szukam.
ninrod

@ninrod Czy próbowałeś ustawić org-imenu-depthcoś większego niż domyślny 2?
Sam

5

Uważam, że karabin-org-karabin jest szczególnie miły. Również wszystko, co pobiera źródło imenu, będzie mogło wyświetlać nagłówki (np. Hełm z imenu).


Należy zauważyć, że helm-org-rifleprzeszukuje zawartość wpisów organizacji oprócz ich tytułów. Nie znalazłem sposobu na zmianę tego zachowania. helm-org-riflereferencje, org-search-gotoktóre wyszukują wszystkie nagłówki, ale tak naprawdę nie obsługują wyszukiwania rozmytego.
Att Righ

Att Righ ma rację, helm-org-riflenie wyszukuje tylko nagłówków. Można to rozszerzyć, aby to zrobić, ale nie ma tego powodu, ponieważ helm-org-in-buffer-headingsitp. Istnieją w samym Hełmie.
blujay

4

imenujest wbudowany w Emacsa i można go sparować ze sterem / bluszczem, aby zapewnić wymagane wyszukiwanie rozmyte. Polecam jednak, helm-org-riflejeśli używasz steru.


4

Rażąca autopromocja, ale możesz wypróbować orgnav . Który jest moim rodzajem projektu alfa (ale aktywnie przeze mnie wykorzystywanego) do tego celu.

orgnav przeszukuje nagłówki, a nie treść, może zmieniać głębokość wyszukiwania, poddrzewa wyszukiwania zamiast całego pliku (chociaż można to również osiągnąć poprzez zawężenie).

Oto wideo niektórych funkcji: https://asciinema.org/a/1r0fp33xgwh48lfgsh7mllw4u

Prawdopodobnie powinieneś także wiedzieć o helm-orgpakiecie, którego częścią helmbyła inspiracja dla tego pakietu (a raczej którego ograniczeniami była inspiracja dla tego pakietu), a także helm-org-rifleomówionym w innych postach.

(Dzięki uprzejmości odpowiedzi tutaj: https://www.reddit.com/r/emacs/comments/69mc6l/how_to_jump_directly_to_an_orgheadline/ ) Również potencjalnie interesująca jest worf-gotofunkcja jako część worf(tryb nawigacji w organie, który stosuje inny zestaw skrótów klawiszowych „*” przed nagłówkami). Wydaje się to bardzo analogiczne do helm-org.


4

Swiper Biblioteka posiada nową funkcję w 0.9.0, która jest zakończenie dla nagłówków plików w org-agenda-plików.

counsell-org-agenda-headlines

Wystarczy skonfigurować listę plików agendy w org init.

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

W odniesieniu do odpowiedzi @ tirocinium zapewnia to to samo, ale dla wielu plików agendy.


3

Używam counsel-imenu; wyświetli listę różnych głów, możesz wpisać kilka liter, aby zawęzić wybór, a następnie po prostu naciśnij <return>.


cześć @gnuvince. to nie pozwala mi przeskakiwać do plików org poziomu 1, prawda?
ninrod

2

Polecam helm-org-in-buffer-headings. Jest wbudowany w Helm i szanuje zawężone bufory, co jest ważne, jeśli używasz buforów pośrednich do niezależnej edycji poddrzewa. Istnieje również helm-org-parent-headingsnawigacja w górę drzewa i helm-org-agenda-files-headingsnawigacja we wszystkich plikach agendy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.