bagaimana cara melompat langsung ke informasi utama org?

16

Jika saya di file org, saya ingin perintah yang mempersempit daftar kandidat, dalam gaya ivy / helm, terdiri dari semua informasi utama org dalam file dan memungkinkan saya memilih informasi utama, melalui pencarian fuzzy, yang ingin saya lompati untuk. Apakah ada cara untuk melakukan itu?

ninrod
sumber

Jawaban:

13

Org Manual node on Motion memberikan deskripsi yang agak singkat dari perintah org-gotobawaan (binding default:) C-c C-j, yang perilakunya dapat dengan mudah dikustomisasi untuk mencapai efek yang diinginkan:

  1. Periksa dokumentasi variabel yang dapat disesuaikan yang tercantum di akhir simpul manual ini: C-h v org-goto-interface RET
  2. Jika Anda dengan senang hati melupakan org-gotoperilaku default mencari secara bertahap melalui garis besar buffer, Anda dapat beralih untuk memilih judul melalui penyelesaian:

    (setq org-goto-interface 'outline-path-completion)
  3. Pengguna paket penyelesaian seperti ido/ ivy/ helmmungkin ingin mengubah pengaturan berikut untuk melihat keseluruhan jalur target sekaligus:

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

    Lihat di sini untuk diskusi lebih lanjut.

Pendekatan ini memiliki manfaat tambahan (lebih dari menggunakan, katakanlah, helmfungsionalitas-spesifik) bekerja dengan semua kerangka penyelesaian yang dicolokkan ke default completing-read, termasuk, seperti yang saya dapat konfirmasi secara pribadi ivy,.

TAMBAHAN:

Saat menggunakan outline-path-completionantarmuka ke org-gotoperintah seperti yang dijelaskan dalam jawaban ini, variabel yang dapat disesuaikan org-goto-max-levelmenentukan kedalaman maksimum dari berita utama yang ditawarkan.

EDIT:

Saya menemukan pertanyaan lama yang relevan dengan jawaban yang bermanfaat: /programming//q/15011703/3084001

CLARIFICATION (seperti yang diminta oleh komentar Att Righ):

Pengaturan org-goto-interfaceke salah satu dari dua nilai yang dikenali tidak berarti mengorbankan antarmuka alternatif. Memanggil org-gotodengan argumen awalan (yaitu C-u C-c C-jatau C-u M-x org-goto RET) secara otomatis memilih antarmuka alternatif untuk penyelesaian saat ini. Dengan cara ini, Anda dapat mengatur org-goto-interfaceke antarmuka yang paling sering Anda gunakan dan menggunakan argumen awalan saat Anda ingin beralih perilaku sementara. Jika bahkan ini tidak sesuai dengan kebutuhan Anda, Anda selalu dapat menulis bungkus Anda sendiri org-goto, seperti contoh Att Righ.

Kemangi
sumber
> lepaskan perilaku org-goto default, Anda dapat mengatasi ini dengan menggunakan ikatan yang mengikat panggilan fungsional(defun my-org-goto () (let ((org-goto-interface 'outline-path-completion)) (org-goto)))
Att Righ
outline-path-completiontidak bermain dengan baik helmdi kotak saya (tidak bisa menyelesaikan melewati satu tingkat - dicapai dengan menekan <TAB>jika helm dinonaktifkan: lihat helm-completing-read-handlers-alist)
Att Righ
@AttRigh Tentu, -ekspresi letdapat digunakan untuk segala jenis pengikatan sementara; pertanyaan ini lebih lanjut tentang pengaturan / fungsi / paket yang relevan. Cara yang lebih umum untuk mencapai sakelar antarmuka sementara adalah menelepon org-gotodengan argumen awalan. Saya akan menambahkan catatan untuk jawaban ini.
Basil
@AttRigh Saya ingat pernah melihat sesuatu yang serupa ivy, tetapi hanya ketika mengisi ulang dan dengan pengaturan kedalaman yang salah org-refile-targets, karena org-gotountuk sementara menyesuaikan pengaturan refile yang relevan untuk memenuhi kebutuhannya. Sayangnya saya tidak dalam posisi untuk mengeksplorasi helmfungsionalitas saat ini, mungkin pengguna lain dapat berbaur?
Basil
1
terima kasih @ Basil untuk jawaban detaild. Sayangnya, penyelesaian dalam pendekatan ini tidak berfungsi sebaik worfatau counsel-imenu.
ninrod
8

Saya menggunakan paket WFF , tetapi saya hanya mengikat salah satu fungsinya:

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

worf-goto memberi Anda daftar judul di buffer di buffer mini, yang kemudian dapat Anda filter.

Paket ini dibuat oleh penulis ivy , jadi jika Anda suka ivy, Anda mungkin suka worf.

Beberapa cuplikan yang relevan dari 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)))))
hal tak berpengalaman
sumber
1
terima kasih @tirocinium. counsel-imenupenyelesaian berfungsi lebih baik daripada worf tetapi tidak dapat mencari melalui tajuk berita level1 org. worfs mencari semua level, jadi saya pikir inilah yang saya cari.
ninrod
@ninrod Sudahkah Anda mencoba mengatur org-imenu-depthke sesuatu yang lebih besar dari standar 2?
Sam
5

Saya menemukan helm-org-senapan sangat bagus. Juga apa pun yang mengambil sumber imenu akan dapat menampilkan header (mis. Helm dengan imenu).

pengguna673592
sumber
Perlu dicatat bahwa helm-org-riflepencarian konten entri org selain judul mereka. Saya tidak menemukan cara untuk mengubah perilaku ini. helm-org-riflereferensi org-search-gotoyang mencari semua berita utama tetapi tidak benar-benar mendukung pencarian fuzzy.
Att Righ
Att Righ benar, helm-org-rifletidak mencari hanya judul. Itu dapat diperluas untuk melakukan ini, tetapi ada sedikit alasan untuk melakukannya, karena helm-org-in-buffer-headings, dll ada di Helm itu sendiri.
blujay
4

imenudibangun ke Emacs dan dapat dipasangkan dengan helm / ivy untuk memberikan pencarian fuzzy yang diperlukan. Saya akan merekomendasikan helm-org-riflejika Anda menggunakan helm.

monotux
sumber
4

Promosi diri yang mencolok, tetapi Anda mungkin ingin mencoba orgnav . Yang merupakan proyek alfa saya (tetapi aktif digunakan oleh saya) untuk tujuan ini.

orgnav mencari tajuk daripada konten, dapat memvariasikan kedalaman pencarian, mencari subtree daripada seluruh file (meskipun ini juga dapat dicapai dengan penyempitan).

Berikut video dari beberapa fitur: https://asciinema.org/a/1r0fp33xgwh48lfgsh7mllw4u

Anda mungkin juga harus menyadari helm-orgpaket yang merupakan bagian dari helmyang menjadi inspirasi untuk paket ini (atau lebih tepatnya yang keterbatasannya adalah inspirasi untuk paket ini), serta helm-org-rifledibahas dalam posting lain.

(Atas perkenan jawaban di sini: https://www.reddit.com/r/emacs/comments/69mc6l/how_to_jump_directly_to_an_orgheadline/ ) Yang juga berpotensi menarik adalah worf-gotofungsi sebagai bagian dariworf (mode navigasi org yang menggunakan serangkaian pengait kunci berbeda). "*" sebelum berita utama). Ini sepertinya sangat analog helm-org.

Att Righ
sumber
4

The swiper perpustakaan memiliki fitur baru di 0.9.0, yang merupakan penyelesaian untuk berita utama dari file dalam org-agenda-file Anda.

counsel-org-agenda-headline

Hanya perlu mengatur daftar file agenda Anda di org init.

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

Sehubungan dengan jawaban @ tirocinium, ini memberikan hal yang sama tetapi untuk banyak file agenda.

Darryl Hebbes
sumber
3

Saya menggunakan counsel-imenu; itu akan mencantumkan kepala yang berbeda, Anda dapat mengetik beberapa huruf untuk mempersempit pilihan Anda dan kemudian cukup tekan <return>.

gnuvince
sumber
hai @gnuvince. ini tidak memungkinkan saya untuk melompat ke file level 1 org kan?
ninrod
2

Saya merekomendasikan helm-org-in-buffer-headings. Ini bawaan untuk Helm, dan menghormati buffer yang dipersempit, yang penting jika Anda menggunakan buffer tidak langsung untuk mengedit subtree secara mandiri. Ada juga helm-org-parent-headingsuntuk menavigasi pohon, dan helm-org-agenda-files-headingsuntuk menavigasi di semua file agenda.

blujay
sumber