consult-omni
konsultasi-omni adalah paket untuk mendapatkan hasil pencarian dari satu atau beberapa sumber khusus (mesin pencari web, asisten AI, database elfeed, catatan organisasi, file lokal, aplikasi desktop, server email,…) langsung di minibuffer Emacs. Ini adalah penerus web konsultasi, dengan fitur dan fungsi yang diperluas.
konsultasi-omni menyediakan wrapper dan makro di sekitar konsultasi, untuk memudahkan pengguna mendapatkan hasil dari berbagai sumber dan menggabungkan sumber lokal dan web dalam pencarian gaya omni. Dengan kata lain, konsultasi-omni memungkinkan mendapatkan hasil multi-sumber bergaya konsultasi atau hasil yang diselesaikan secara dinamis di minibuffer untuk berbagai sumber termasuk fungsi/paket Emacs (misalnya buffer Emacs, file org, elfeed,…), program baris perintah ( grep, find, gh,…), atau mesin pencari web (Google, Brave, Bing,…).
konsultasi-omni dapat menjadi alternatif gratis sumber terbuka untuk alat pencarian omni lainnya seperti Alfred atau sorotan MacOS. Ini memberikan berbagai sumber default sebagai contoh, tetapi gagasan utama di sini adalah untuk tetap agnostik terhadap sumber dan menyediakan perangkat bagi pengguna untuk menentukan sumber/alur kerja mereka sendiri (alias plugin).
Berikut screenshot wajibnya:
Pada tangkapan layar di atas, saya menggunakan pintasan tombol untuk membuka bingkai Emacs dan memanggil consult-omni
(mirip dengan memanggil sorotan MacOS) dan mencari istilah "emacs", lalu berkeliling dan melihat pratinjau dari berbagai sumber termasuk aplikasi, gptel , Berani, Google, YouTube, elfeed, mu4e, ....
Berikut tangkapan layar lain yang menunjukkan penggunaan konsultasi-omni sebagai peluncur aplikasi:
Untuk penjelasan fitur dan perbandingan beberapa paket lainnya, Anda dapat menonton video YouTube saya, baik untuk web konsultasi maupun untuk konsultasi omni di bawah ini:
Untuk setiap sumber, Anda mungkin memiliki perintah statis atau dinamis. Perintah statis menanyakan penggunaan input dan kemudian mengambil hasilnya. Perintah dinamis, melakukan penyelesaian dinamis saat pengguna mengetik (menampilkan hasil saat pengguna mengetik). Perintah dinamis terasa sedikit lebih intuitif dan modern di tahun 2024, namun di sisi lain memiliki kelemahan karena mengirimkan kueri ke server berkali-kali terutama jika Anda mengetik dengan lambat! Bergantung pada penyedia layanan dan model API, Anda mungkin ingin menghindari mengunjungi server terlalu sering (misalnya untuk layanan yang Anda bayar per kueri), oleh karena itu untuk layanan tertentu perintah statis mungkin merupakan pilihan yang lebih baik daripada perintah dinamis. Dengan menggunakan makro consult-omni-define-source
, Anda dapat memilih untuk membuat statis, dinamis, atau keduanya dengan meneruskan nil
, t
, atau 'both
ke kata kunci :static
. Berikut ini contoh kode sumber, untuk membuat perintah statis dan dinamis untuk pencarian Brave:
(consult-omni-define-source " Brave "
:narrow-char ?b
:type 'dynamic
:require-match t
:face 'consult-omni-engine-title-face
:request # 'consult-omni--brave-fetch-results
:preview-key consult-omni-preview-key
:search-hist 'consult-omni--search-history
:select-hist 'consult-omni--selection-history
:enabled ( lambda () ( bound-and-true-p consult-omni-brave-api-key))
:group # 'consult-omni--group-function
:sort t
:static 'both )
Berikut adalah tangkapan layar dari perintah interaktif STATIS untuk Wikipedia:
Berikut adalah tangkapan layar perintah interaktif DINAMIS untuk Wikipedia:
Secara default, konsultasikan-omni menyediakan dua perintah interaktif multi-sumber utama.
consult-omni-multi
: Ini adalah perintah DINAMIS interaktif yang menggunakan banyak sumber, seperti yang ditentukan oleh consult-omni-multi-sources
, dan menampilkan hasil dalam penyelesaian minibuffer dengan penyelesaian dinamis (hasil diambil saat pengguna mengetik). Berikut tangkapan layarnya: consult-omni-multi-static
: Ini adalah perintah STATIS interaktif yang menggunakan banyak sumber, seperti yang ditentukan oleh consult-omni-multi-sources
, dan menampilkan hasilnya dalam penyelesaian minibuffer. Perhatikan bahwa konsultasi-omni-multi-statis tidak memberikan penyelesaian dinamis tetapi beberapa orang mungkin menganggap penggunaan ini lebih intuitif untuk mempersempit hasil. Pengguna menyediakan satu istilah pencarian, dan setelah hasilnya diambil, mengetik di minibuffer akan mempersempit kandidat.Perhatikan bahwa tidak seperti web konsultasi pendahulunya, konsultasi-omni tidak lagi menyediakan perintah interaktif multi-sumber lainnya (misalnya pencarian sarjana). Sekarang terserah kepada pengguna untuk menentukan perintah tersebut untuk alur kerja kustom mereka. Misalnya satu pengguna dapat menentukan perintah interaktif terpisah untuk menanyakan sumber web, vs sumber lokal, sementara pengguna lain mungkin ingin menentukan perintah interaktif untuk sumber pengetahuan (referensi akademis, catatan,…) vs utilitas (aplikasi, buffer, file,…). Contoh cara mendefinisikan perintah interaktif baru disediakan di bawah dalam konfigurasi lanjutan di sini.
Argumen dapat diteruskan ke perintah interaktif dinamis dan selanjutnya mempersempit hasil dapat dilakukan menggunakan sintaksis yang mirip dengan gaya "Perl splitting" dalam konsultasi pencarian asinkron.
Untuk mempersempit hasil, Anda perlu menambahkan #
(atau karakter lain yang ditentukan dalam consult-async-split-style
) setelah permintaan pencarian. Misalnya mengetikkan yang berikut ini di minibuffer:
#penelusuran web emacs#github
Pencarian pertama untuk "pencarian web emacs", dan kemudian menggunakan "github" untuk mempersempit.
Selain itu, argumen juga dapat diteruskan ke perintah dinamis menggunakan sintaksis serupa dengan consult-grep
. Misalnya mengetikkan yang berikut ini di minibuffer:
#cara menelusuri url di emacs -- --model gpt-3.5-turbo
meneruskan gpt-3.5-turbo
sebagai nilai argumen kata kunci :model
ke fungsi back-end semua sumber yang mengambil hasil. Jika salah satu sumber tersebut menerima argumen kata kunci :model
, nilai gpt-3.5-turbo
akan diteruskan ke sumber tersebut. Karena alasan ini disarankan untuk selalu menggunakan fungsi yang menerima argumen kata kunci apa pun (alias add &allow-other-keys
) untuk menghindari kesalahan ketika kata kunci yang tidak ada diteruskan ke fungsi tersebut.
selain menggunakan --
, Anda juga dapat menggunakan kata kunci dengan titik dua :
. Berikut ini akan serupa dengan contoh di atas:
#cara menelusuri url di emacs -- :model gpt-3.5-turbo
Saat menggunakan konsultasi, kita menangani berbagai jenis sumber, baik fungsi elisp (misalnya buffer-list
, re-search-forward
) atau program baris perintah (misalnya grep
, notmuch
, gh
, mu
, …). Mereka mengembalikan daftar kandidat, yang kemudian diteruskan ke completing--read
. Meskipun konsultasi menyediakan cara untuk menggabungkan beberapa sumber dengan consult--multi
, kemampuan untuk menggabungkan sumber dari jenis yang berbeda (misalnya program baris perintah dengan elisp) terbatas. Dalam konsultasi-omni kami menyelesaikan masalah ini dengan membuat beberapa pembungkus dan mesin di sekitar fungsi konsultasi bawaan dan meminta setiap sumber mendeklarasikan tipenya. Tipe ini memberi tahu konsultasi-omni cara mengumpulkan kandidat dari sumber tersebut dan menggabungkannya dengan sumber lain. Jenisnya dapat berupa 'sync
, 'dynamic
, atau 'async
.
'sync
: Ini adalah sumber sinkron, artinya ketika konsultasi-omni memanggil fungsi permintaan untuk mengumpulkan kandidat dari sumber ini, ia memanggilnya secara sinkron (memblokir proses Emacs) dan menunggu nilai yang dikembalikan (mengharapkan daftar kandidat atau nihil ). Misalnya, ini cocok untuk sumber yang hanya menjalankan fungsi elisp dan mengembalikan daftar dengan cepat seperti buffer-list
. Hampir tidak ada keuntungan dalam memanggil fungsi ini secara asinkron karena overhead untuk kontrol asinkron (pengatur waktu dan pengamat,…) mungkin akan memakan waktu lebih lama daripada sekadar memanggil fungsi secara langsung dan sinkron.'dynamic
: Sumber dinamis adalah sumber yang bermanfaat atau memerlukan pemanggilan fungsi elisp pengumpul secara asinkron. Misalnya, jika mengumpulkan item dari sumber memerlukan pengiriman permintaan HTTP ke server dan menunggu respons, maka tipe dinamis harus digunakan, sehingga proses Emacs tidak diblokir saat menunggu respons. Dalam hal ini fungsi permintaan untuk sumber (fungsi yang mengembalikan item) harus mengambil fungsi panggilan balik yang akan dipanggil ketika respons tiba. Misalnya, ini cocok untuk mendapatkan respons dari API penelusuran web seperti API Google, Brave, atau OpenAI.'async
: sumber asynchronous, adalah sumber yang menggunakan program baris perintah eksternal dan oleh karena itu perlu membuat proses, mendapatkan keluaran dari program baris perintah dan menguraikannya untuk mengumpulkan kandidat. Ini misalnya cocok untuk mendapatkan kandidat dari grep
, atau notmuch
, ....mesin konsultasi-omni memungkinkan menggabungkan beberapa sumber dari jenis yang berbeda dalam satu perintah dengan menggabungkan panggilan/proses sinkronisasi dan asinkron sehingga pengguna dapat secara efisien mendapatkan hasil pencarian dari berbagai sumber hampir secara real-time (tidak perlu menunggu, kandidat ditampilkan sebagai mereka tiba).
Anda dapat memuat tindakan memulai default dengan;
( require 'consult-omni-embark )
Tindakan default memungkinkan Anda membuka tautan di browser default atau alternatif dan juga menyalin atau menyisipkan, judul dan/atau URL tautan. Tindakan memulai lainnya dapat ditentukan sesuai alur kerja spesifik Anda.
Lihat video YouTube di web konsultasi sebagai contoh, di sini: https://youtu.be/7pDfyqBZwvo?t=4962.
Tanpa string dokumen dan spasi, kodenya kurang dari 1000 baris dan hanya bergantung pada konsultasi dan pengambilan url bawaan.
Anda hanya dapat memuat bagian yang Anda perlukan. Misalnya jika yang Anda perlukan hanyalah utilitas sugesti otomatis yang mirip dengan helm-google-autosuggest
, maka Anda dapat menggunakan konfigurasi minimal seperti ini:
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :branch " main " :files ( :defaults " sources/*.el " ))
:after consult
:config
; ; Load Sources Core code
( require 'consult-omni-sources )
; ; Load Embark Actions
( require 'consult-omni-embark )
; ; Only load brave-auto-suggest source
( require 'consult-omni-brave-autosuggest )
; ;; Set your shorthand favorite interactive command
( setq consult-omni-default-interactive-command # 'consult-omni-brave-autosuggest ))
Perhatikan bahwa setiap modul (alias setiap sumber) menambahkan 100-200 baris kode tambahan. Ini juga berarti menambahkan sumber baru, Anda hanya perlu menulis sepotong kode singkat dengan mengikuti contoh tersebut!
Banyak pilihan penyesuaian baik untuk sumber dan juga untuk menjalankan tindakan pada hasil. Sumber baru dapat ditambahkan sesuai keinginan dengan format berbeda, tindakan berbeda,…
Pengumpulan dinamis memungkinkan alur kerja yang kompleks dengan cepat. Ubah parameter kueri dengan cepat dengan meneruskan argumen. Pilih serangkaian hasil acak ad-hoc menggunakan tindakan memulai dan menjalankan tindakan tersebut. Hal ini memungkinkan pemrosesan batch juga. Misalnya untuk menambahkan daftar panjang hasil ke catatan mode-org untuk ditinjau nanti (seperti yang ditunjukkan dalam video YouTube ini: https://youtu.be/7pDfyqBZwvo?t=4774).
Sebelum memulai, pastikan Anda memahami tiga poin:
consult-omni-sources
, memberikan demonstrasi dasar untuk mengintegrasikan berbagai layanan (seperti penyedia pencarian), namun karena setiap layanan memiliki syarat dan ketentuannya sendiri (yang dapat berubah seiring waktu dan berbeda dari lokasi ke lokasi), sulit untuk memberikan solusi menyeluruh dan mempertahankannya seiring berjalannya waktu. konsultasi-omni tidak mengetahui cara Anda menghubungkan dan mengintegrasikan layanan lain dalam pengaturan Anda (karena baik konsultasi-omni maupun Emacs tidak mengumpulkan informasi apa pun tentang pengguna atau penggunaannya), dan oleh karena itu pada akhirnya hanya Anda sebagai pengguna yang bertanggung jawab untuk mengatur semuanya dengan benar dan memahami konsekuensi penggunaan (misalnya biaya penggunaan API berbayar) dan memastikan untuk tetap berada dalam batasan undang-undang dan peraturan yang relevan untuk kasus penggunaan Anda (misalnya mengikuti perjanjian pengguna perangkat lunak, dll.). Oleh karena itu, penting bagi Anda untuk membaca dan memahami cara menggunakan setiap layanan, dan juga memahami apa yang terjadi saat Anda mengintegrasikan layanan dengan konsultasi-omni. Saya mencoba yang terbaik untuk memberikan dokumentasi di sini dan juga di halaman wiki, dan akan mencoba membantu bila memungkinkan tetapi sebelum Anda melanjutkan, pahamilah bahwa Anda melakukan segala sesuatu dengan risiko Anda sendiri. Jika Anda ingin contoh konfigurasi, lihat Drop-in *Contoh Konfigurasi*. Berikut beberapa penjelasan detailnya;
Untuk menggunakan konsultasi-omni, Anda memerlukan Emacs >28.0 (Saya belum menguji versi sebelumnya) dan Anda perlu berkonsultasi. Meskipun ini adalah satu-satunya persyaratan, saya sarankan Anda membaca sisa README ini. Saya merekomendasikan beberapa paket lain dan konfigurasi yang berguna untuk pengaturan berbeda. Beberapa paket dan pengaturan tambahan tersebut dapat meningkatkan pengalaman konsultasi omni Anda, oleh karena itu Anda mungkin ingin mempertimbangkan untuk menginstalnya juga. Misalnya, menggabungkan konsultasi dengan paket lain seperti vertico, orderless, dan embark dapat meningkatkan fungsionalitas serta pengalaman pengguna.
konsultasi-omni saat ini tidak menggunakan ELPA atau MELPA. Oleh karena itu, Anda perlu menginstalnya menggunakan alternatif pengelola paket non-standar seperti straight.el, elpaca,… atau menggunakan instalasi manual.
Untuk menginstal konsultasi-omni dengan straight.el Anda dapat menggunakan perintah berikut. Pastikan Anda memuat konsultasi-omni setelah memuat konsultasi (misalnya require 'consult
).
( straight-use-package
'(consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " )))
atau jika Anda menggunakan makro use-package
dengan straight, Anda dapat melakukan:
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " ))
:after consult)
Anda juga dapat membagi repositori ini dan menggunakan repo Anda sendiri.
Kloning repo ini dan pastikan file berada di jalur pemuatan Anda, seperti yang dijelaskan di EmacsWiki.
Pastikan Anda memuat konsultasi (misalnya require 'consult
) sebelum memuat konsultasi-omni.
Anda dapat mencari SEMUA sumber default dengan memuat modul consult-omni-sources
yang disediakan, lalu memanggil fungsi consult-omni-sources-load-modules
:
( require 'consult-omni-sources )
(consult-omni-sources-load-modules)
Ini menyediakan sumber untuk beberapa layanan populer, dan menambahkan daftar panjang perintah interaktif (pencarian dinamis, pencarian statis atau keduanya tergantung pada sumbernya). Seiring berjalannya waktu saya berharap dapat menambah layanan lagi, semoga mendapat kontribusi dari masyarakat juga. Perhatikan bahwa ini juga merupakan contoh yang baik bagi Anda untuk mempelajari cara menambahkan sumber Anda sendiri atau mengubah sumber saat ini untuk kasus penggunaan spesifik Anda.
Anda juga dapat memuat beberapa sumber (tetapi tidak semua) dengan mengatur daftar consult-omni-sources-modules-to-load
lalu memuat panggilan consult-omni-sources-load-modules
:
( require 'consult-omni-sources )
( setq consult-omni-sources-modules-to-load '(consult-omni-google consult-omni-wikipedia))
(consult-omni-sources-load-modules)
Hal ini membatasi sumber-sumber yang memuat konsultasi-omni HANYA pada sumber-sumber yang ditentukan dalam consult-omni-sources-modules-to-load
.
Alternatifnya, Anda dapat memuat satu sumber hanya dengan memerlukan file yang sesuai. Misalnya untuk Wikipedia, Anda dapat melakukan:
( require 'consult-omni-sources )
( require 'consult-omni-wikipedia )
Ini akan menambahkan perintah interaktif hanya untuk pencarian Wikipedia (misalnya consult-omni-wikipedia
dan/atau consult-omni-wikipedia-static
).
Berikut adalah daftar sumber terkini. Untuk detail tentang cara mengatur dan menggunakan setiap sumber, lihat halaman wiki (sedang dibangun sekarang). Anda juga dapat menonton video Tutorial YouTube di sini: https://www.youtube.com/watch?v=wNH2E7iT__c
Sumber | Kategori |
---|---|
Aplikasi | Aplikasi Desktop |
Bing | Mesin Pencari Web |
Saran Otomatis yang Berani | Penyelesaian Kata Web/Saran Otomatis |
Berani | Mesin Pencari Web |
Riwayat Peramban | Riwayat Peramban Web |
berkonsultasi dengan sumber penyangga | Buffer Emacs, File, Bookmark,… |
perhitungan | Kalkulator Emacs |
obrolanGPT | Perintah AI sederhana |
catatan konsultasi | Catatan Lokal |
Kamus | Kamus Bawaan Emacs |
doiorg | Referensi Akademik |
DuckDuckGo (API Terbatas) | Saran Pencarian |
umpan elf | Umpan (RSS, video,…) |
fd | Cari File Lokal dengan Perintah fd |
menemukan | Cari File Lokal dengan Perintah find |
GitHub | Cari Repo GitHub dengan Perintah gh |
Mesin Pencari Web | |
Saran Otomatis Google | Penyelesaian Kata Web/Saran Otomatis |
memahami | Cari File Lokal dengan Perintah grep |
git-grep | Cari File Git Lokal dengan Perintah grep |
ripgrep | Cari File Lokal dengan Perintah rg |
ripgrep-semua | Cari File Lokal dengan Perintah rga |
gptel | Asisten AI |
Yg menyakitkan hati | Video Daring (YouTube) |
buffering pencarian teks | Cari Teks di Buffer Emacs |
menemukan | Cari File Lokal dengan Perintah lokal |
pria | Cari Halaman Manual dengan Perintah man |
mdfind | Cari File Lokal dengan Perintah mdfind OSX |
mu4e | Cari Email |
Pencarian Catatan | Cari File Catatan Lokal |
tidak banyak | Cari Email |
nomor | Kalkulator dengan numi-cli/perintah dari Numi) |
Agenda organisasi | Cari Item Agenda Organisasi |
PubMed | Referensi Akademik |
Scopus | Referensi Akademik |
StackOverflow | Forum Komunitas |
Wikipedia | Ensiklopedi |
YouTube | Video Daring (YouTube) |
konsultasi-omni dibangun dengan gagasan bahwa pengguna harus dapat menyesuaikan semuanya berdasarkan kasus penggunaannya, oleh karena itu pengguna sangat diharapkan untuk mempelajari cara mengkonfigurasi paket ini. Oleh karena itu, saya menyarankan Anda membaca bagian ini dan memahami cara mengkonfigurasi paket sesuai dengan kebutuhan Anda dan untuk kasus penggunaan spesifik Anda. Selain pengaturan ini, beberapa sumber memiliki variabel penyesuaiannya sendiri, dll. yang dibahas di halaman wiki (sedang dibangun sekarang) dan dalam Tutorial YouTube ini: https://www.youtube.com/watch?v=wNH2E7iT__c.
Variabel yang dapat disesuaikan berikut ini disediakan:
consult-omni-sources-modules-to-load
Daftar modul yang akan dimuat. Dengan mengatur ini sebelum memanggil consult-omni-sources-load-modules
, Anda dapat membatasi modul (sumber) yang dimuat dan dapat menghindari kesalahan karena tidak adanya persyaratan untuk sumber tertentu. Misalnya untuk sekadar memuat Wikipedia:
( setq consult-omni-sources-modules-to-load ( list 'consult-omni-wikipedia ))
consult-omni-default-browse-function
Fungsi penelusuran default untuk membuka URL. Ini dapat diatur ke fungsi browser eksternal dengan:
( setq consult-omni-default-browse-function 'browse-url )
consult-omni-alternate-browse-function
Fungsi penelusuran sekunder untuk membuka URL. Misalnya, ini dapat diatur ke eww atau beberapa browser lain untuk akses cepat ke browser alternatif dengan tindakan memulai.
( setq consult-omni-alternate-browse-function 'eww-browse-url )
consult-omni-default-preview-function
Fungsi default yang digunakan untuk melihat pratinjau tautan. Misalnya, ini dapat diatur ke eww:
( setq consult-omni-default-preview-function # 'eww-browse-url )
atau xwidegt-webkit:
( setq consult-omni-default-preview-function # 'xwidget-webkit-browse-url )
consult-omni-show-preview
Ini mengaktifkan/menonaktifkan pratinjau untuk semua sumber konsultasi-omni. Dianjurkan untuk mengatur ini ke t
dan menggunakan preview-key
untuk mengontrol pratinjau per sumber.
consult-omni-preview-key
Ini adalah kunci pratinjau default. Pilihan yang bagus mungkin adalah “Co”.
( setq consult-omni-preview-key " C-o " )
consult-omni-default-format-candidate
Variabel a ini menyimpan fungsi yang dipanggil untuk memformat kandidat (pada sumber mana pun yang tidak memiliki fungsi pemformatan eksplisit). konsultasi-omni menyediakan dua contoh fungsi:
consult-omni--simple-format-candidate
menampilkan ubin tanpa anotasi marginalia di minibufferconsult-omni--highlight-format-candidate
menampilkan kandidat dengan anotasi marginalia dan juga menyoroti istilah pencarian. consult-omni-default-count
Secara default, konsultasi-omni hanya mengambil hasil sebanyak ini per sumber. Disarankan untuk menjaga angka ini tetap rendah (misalnya 5 hingga 10) untuk menjaga kinerja tetap cepat. Standarnya disetel ke 5 karena saat ini untuk sebagian besar kasus penggunaan sehari-hari, Anda mungkin tidak memerlukan lebih dari 5 hasil teratas.
( setq consult-omni-default-count " 5 " )
Ingatlah bahwa dengan perintah dinamis konsultasi-omni, Anda selalu dapat menambah jumlahnya dengan meneruskan argumen ke -n
, --count
, :n
, atau :count
(misalnya dengan mengetikkan search term -- -n 30
, Anda bisa mengambil hingga 30 hasil.
consult-omni-default-page
Ini mirip dengan membuka halaman 2, 3,…,N pada halaman hasil pencarian klasik. Jika ini diatur ke N, hasil pertama (N * hitungan/halaman) dilewati dan halaman hasil berikutnya ditampilkan. Disarankan untuk menjadikan ini sebagai default, 0, untuk melihat hasil teratas.
Ingatlah bahwa dengan perintah dinamis konsultasi-omni, Anda selalu dapat mengubah halaman dengan meneruskan nilai ke argumen -p
, --page
, :p
, atau :page
(misalnya dengan mengetikkan search term -- -p 2
, Anda bisa mendapatkan halaman 2.
consult-omni-default-timeout
Waktu maksimum dalam hitungan detik sebelum consult-omni
menyerah dalam mengambil hasil dari satu sumber dalam perintah STATIS .
consult-omni-url-use-queue
Boolean, apakah akan menggunakan url-queue
atau tidak.
consult-omni-url-queue-parallel-processes
Jumlah proses url-queue
yang berjalan secara paralel.
consult-omni-url-queue-timeout
Waktu maksimum dalam hitungan detik yang dapat dijalankan oleh satu tugas url-queue
sebelum menyerah.
consult-omni-log-buffer-name
Nama buffer untuk informasi logging, yang sebagian besar berguna untuk debugging.
consult-omni-log-level
Variabel ini mengontrol bagaimana konsultasi-omni mencatat informasi atau menampilkan kesalahan. Bisa berupa nil
, 'info
, atau 'debug
, dalam urutan logging/menampilkan detail lebih lanjut.
consult-omni-group-by
Ini adalah bidang yang digunakan untuk mengelompokkan hasil. Secara default, hasil dikelompokkan berdasarkan nama sumber. Namun hal ini dapat diubah untuk mencapai berbagai perilaku pengelompokan. Jika ini disetel ke nil
, hasilnya tidak dikelompokkan. Itu juga dapat diatur ke properti kandidat lainnya (misalnya :url
, :title
, :domain
, …)
( setq consult-omni-group-by :source )
consult-omni-multi-sources
Ini adalah daftar string nama sumber (misalnya '("Google", "Wikipedia", "chatGPT")
) yang akan digunakan dalam perintah consult-omni-multi
, dan consult-omni-multi-static
(lihat di atas untuk keterangan).
consult-omni-highlight-matches-in-minibuffer
Apakah konsultasi-omni menyoroti kecocokan istilah pencarian di kandidat minibuffer. Hal ini berguna untuk menyoroti relevansi hasil pencarian.
consult-omni-highlight-matches-in-file
Apakah konsultasi-omni menyoroti kecocokan istilah pencarian dalam file (misalnya di pratinjau atau saat membuka file). Ini berguna untuk menemukan kecocokan istilah pencarian setelah membuka file target.
consult-omni-default-interactive-command
Ini adalah fitur praktis untuk mengikat perintah interaktif konsultasi-omni favorit Anda ke perintah yang disebut consult-omni
, sehingga lebih mudah diingat dan ditemukan saat Anda memanggil Mx
. Anda dapat mengikatnya ke salah satu perintah interaktif (seperti consult-omni-multi
atau consult-omni-multi-static
) atau Anda dapat mengikatnya ke perintah sumber tunggal (misalnya consult-omni-google
, consult-omni-google-static
, consult-omni-google-wikipedia
,…) atau sebagai alternatif, Anda dapat menentukan perintah khusus Anda sendiri (tunggal atau multi-sumber) dan menggunakannya.
consult-omni-http-retrieve-backend
Variabel ini mengontrol back-end mana yang digunakan oleh konsultasi-omni untuk permintaan HTTP. konsultasikan-omni mendukung 3 back-end yang berbeda:
url-retrieve
bawaanrequest
(lihat permintaan-emacs)plz
(lihat tolong.el) Misalnya untuk mengubah back-end menjadi plz
, Anda dapat melakukan:
( setq consult-omni-http-retrieve-backend 'plz )
consult-omni-default-autosuggest-command
Perintah saran otomatis default. konsultasi-omni memberikan dua contoh dengan consult-omni-dynamic-brave-autosuggest
dan consult-omni-dynamic-google-autosuggest
, tetapi Anda juga dapat menentukan perintah saran otomatis khusus lainnya dari sumber lain (misalnya google, Wikipedia,…)
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest )
consult-omni-dynamic-input-debounce
Dalam perintah dinamis, proses pengumpulan dinamis dimulai hanya ketika belum ada masukan baru untuk detik consult-omni-dynamic-input-debounce
. Jika Anda mengetik dengan lambat atau merasa perlu waktu untuk memikirkan apa yang ingin Anda cari, Anda mungkin ingin menambah jumlah ini, sehingga Anda tidak menjalankan pencarian sebelum waktunya, terutama jika Anda ingin menghindari menjalankan istilah pencarian prematur pada layanan berbayar. Secara default, ini mewarisi nilai debounce input bawaan konsultasi, yaitu 0,5. Secara pribadi saya merasa itu agak terlalu cepat untuk konsultasi-omni karena saya tidak ingin konsultasi-omni mengirim kueri ke API OpenAI berbayar saat saya masih mengetik kueri, jadi saya memperlambatnya menjadi 0,8 - 1 detik.
( setq consult-omni-dynamic-input-debounce 0.8 )
consult-omni-dynamic-input-throttle
Dalam perintah dinamis, proses pengumpulan dinamis dimulai hanya setiap detik consult-omni-dynamic-input-throttle
. Jika Anda menggunakan layanan API yang memiliki jumlah kueri per detik terbatas, Anda mungkin ingin menambah jumlah ini untuk menghindari kesalahan. Saya mengatur ini menjadi 2x nilai input-debounce saya:
( setq consult-omni-dynamic-input-throttle 1.6 )
consult-omni-dynamic-refresh-delay
Dalam perintah dinamis, UI penyelesaian hanya diperbarui setiap detik consult-omni-dynamic-refresh-delay
. Anda mungkin ingin menjalankan ini secepat consult-omni-dynamic-input-debounce
.
( setq consult-omni-dynamic-input-throttle 0.8 )
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :branch " main " :files ( :defaults " sources/*.el " ))
:after consult
:custom
; ; General settings that apply to all sources
(consult-omni-show-preview t ) ; ;; show previews
(consult-omni-preview-key " C-o " ) ; ;; set the preview key to C-o
:config
; ; Load Sources Core code
( require 'consult-omni-sources )
; ; Load Embark Actions
( require 'consult-omni-embark )
; ; Only load wikipedia source
( setq consult-omni-sources-modules-to-load ( list 'consult-omni-wikipedia ))
(consult-omni-sources-load-modules)
; ;; Set your shorthand favorite interactive command
( setq consult-omni-default-interactive-command # 'consult-omni-wikipedia ))
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :branch " main " :files ( :defaults " sources/*.el " ))
:after consult
:custom
; ; General settings that apply to all sources
(consult-omni-show-preview t ) ; ;; show previews
(consult-omni-preview-key " C-o " ) ; ;; set the preview key to C-o
:config
; ; Load Sources Core code
( require 'consult-omni-sources )
; ; Load Embark Actions
( require 'consult-omni-embark )
; ; Either load all source modules or a selected list
; ;; Select a list of modules you want to aload, otherwise all sources all laoded
; (setq consult-omni-sources-modules-to-load (list 'consult-omni-wkipedia 'consult-omni-notes))
(consult-omni-sources-load-modules)
; ;; set multiple sources for consult-omni-multi command. Change these lists as needed for different interactive commands. Keep in mind that each source has to be a key in `consult-omni-sources-alist' .
( setq consult-omni-multi-sources '( " calc "
; ; "File"
; ; "Buffer"
; ; "Bookmark"
" Apps "
; ; "gptel"
" Brave "
" Dictionary "
; ; "Google"
" Wikipedia "
" elfeed "
; ; "mu4e"
; ; "buffers text search"
" Notes Search "
" Org Agenda "
" GitHub "
; ; "YouTube"
" Invidious " ))
; ; Per source customization
; ;; Set API KEYs. It is recommended to use a function that returns the string for better security.
( setq consult-omni-google-customsearch-key " YOUR-GOOGLE-API-KEY-OR-FUNCTION " )
( setq consult-omni-google-customsearch-cx " YOUR-GOOGLE-CX-NUMBER-OR-FUNCTION " )
( setq consult-omni-brave-api-key " YOUR-BRAVE-API-KEY-OR-FUNCTION " )
( setq consult-omni-stackexchange-api-key " YOUR-STACKEXCHANGE-API-KEY-OR-FUNCTION " )
( setq consult-omni-pubmed-api-key " YOUR-PUBMED-API-KEY-OR-FUNCTION " )
( setq consult-omni-openai-api-key " YOUR-OPENAI-API-KEY-OR-FUNCTION " )
; ;; Pick you favorite autosuggest command.
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest ) ; ;or any other autosuggest source you define
; ;; Set your shorthand favorite interactive command
( setq consult-omni-default-interactive-command # 'consult-omni-multi ))
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :branch " main " :files ( :defaults " sources/*.el " ))
:after consult
:custom
; ;; General settings that apply to all sources
(consult-omni-show-preview t ) ; ;; show previews
(consult-omni-preview-key " C-o " ) ; ;; set the preview key to C-o
(consult-omni-highlight-matches-in-minibuffer t ) ; ;; highlight matches in minibuffer
(consult-omni-highlight-matches-in-file t ) ; ;; highlight matches in files
(consult-omni-default-count 5 ) ; ;; set default count
(consult-omni-default-page 0 ) ; ;; set the default page (default is 0 for the first page)
; ; optionally change the consult-omni debounce, throttle and delay.
; ; Adjust these (e.g. increase to avoid hiting a source (e.g. an API) too frequently)
(consult-omni-dynamic-input-debounce 0.8 )
(consult-omni-dynamic-input-throttle 1.6 )
(consult-omni-dynamic-refresh-delay 0.8 )
; ; Optionally set backend for http request (either 'url, 'request, or 'plz)
(consult-omni-http-retrieve-backend 'plz )
:config
; ;; Load Sources Core code
( require 'consult-omni-sources )
; ;; Load Embark Actions
( require 'consult-omni-embark )
; ;; Either load all source modules or a selected list
; ; Select a list of modules you want to aload, otherwise all sources all laoded
; (setq consult-omni-sources-modules-to-load (list 'consult-omni-wkipedia 'consult-omni-notes))
(consult-omni-sources-load-modules)
; ; set multiple sources for consult-omni-multi command. Change these lists as needed for different interactive commands. Keep in mind that each source has to be a key in `consult-omni-sources-alist' .
( setq consult-omni-multi-sources '( " calc "
; ; "File"
; ; "Buffer"
; ; "Bookmark"
" Apps "
; ; "gptel"
" Brave "
" Dictionary "
; ; "Google"
" Wikipedia "
" elfeed "
; ; "mu4e"
; ; "buffers text search"
" Notes Search "
" Org Agenda "
" GitHub "
; ; "YouTube"
" Invidious " ))
; ;; Per source customization
; ; Set API KEYs. It is recommended to use a function that returns the string for better security.
( setq consult-omni-google-customsearch-key " YOUR-GOOGLE-API-KEY-OR-FUNCTION " )
( setq consult-omni-google-customsearch-cx " YOUR-GOOGLE-CX-NUMBER-OR-FUNCTION " )
( setq consult-omni-brave-api-key " YOUR-BRAVE-API-KEY-OR-FUNCTION " )
( setq consult-omni-stackexchange-api-key " YOUR-STACKEXCHANGE-API-KEY-OR-FUNCTION " )
( setq consult-omni-pubmed-api-key " YOUR-PUBMED-API-KEY-OR-FUNCTION " )
( setq consult-omni-openai-api-key " YOUR-OPENAI-API-KEY-OR-FUNCTION " )
; ; add more keys as needed here.
; ; gptel settings
( setq consult-omni-gptel-cand-title # 'consult-omni--gptel-make-title-short-answer )
; ; default terminal
( setq consult-omni-embark-default-term # 'vterm )
; ; default video player
( setq consult-omni-embark-video-default-player # 'mpv-play-url )
; ; pretty prompt for launcher
( setq consult-omni-open-with-prompt " " )
; ;; Pick you favorite autosuggest command.
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest ) ; ;or any other autosuggest source you define
; ;; Set your shorthand favorite interactive command
( setq consult-omni-default-interactive-command # 'consult-omni-multi )
; ;; Optionally Set back-end for notes search to ripgrep-all (requires ripgrep-all)
; ; (setq consult-omni-notes-backend-command "rga")
; ;; Optionally add more interactive commands
; ; consult-omni-web
( defvar consult-omni-web-sources ( list " gptel "
" Brave "
" elfeed "
" mu4e "
" Wikipedia "
" GitHub "
" Invidious "
))
( defun consult-omni-web ( &optional initial prompt sources no-callback &rest args )
" Interactive web search”
This is similar to `consult-omni-multi' , but runs the search on
web sources defined in `consult-omni-web-sources' .
See `consult-omni-multi' for more details.
"
( interactive " P " )
( let ((prompt ( or prompt ( concat " [ " ( propertize " consult-omni-web " 'face 'consult-omni-prompt-face ) " ] " " Search: " )))
(sources ( or sources consult-omni-web-sources)))
(consult-omni-multi initial prompt sources no-callback args)))
; ; consult-omni-local
( defvar consult-omni-local-sources ( list " ripgrep "
" mdfind "
" Notes Search "
" Apps "
" Org Agenda " ))
( defun consult-omni-local ( &optional initial prompt sources no-callback &rest args )
" Interactive local search”
This is similar to `consult-omni-multi' , but runs the search on
local sources defined in `consult-omni-local-sources' .
See `consult-omni-multi' for more details.
"
( interactive " P " )
( let ((prompt ( or prompt ( concat " [ " ( propertize " consult-omni-local " 'face 'consult-omni-prompt-face ) " ] " " Search: " )))
(sources ( or sources consult-omni-local-sources)))
(consult-omni-multi initial prompt sources no-callback args)))
; ; consult-omni-scholar
( setq consult-omni-scholar-sources ( list " PubMed " " Scopus " " Notes Search " " gptel " ))
( defun consult-omni-scholar ( &optional initial prompt sources no-callback &rest args )
" Interactive “multi-source acadmic literature” search
This is similar to `consult-omni-multi' , but runs the search on
academic literature sources defined in `consult-omni-scholar-sources' .
See `consult-omni-multi' for more details.
"
( interactive " P " )
( let ((prompt ( or prompt ( concat " [ " ( propertize " consult-omni-multi " 'face 'consult-omni-prompt-face ) " ] " " Search: " )))
(sources ( or sources consult-omni-scholar-sources)))
(consult-omni-multi initial prompt sources no-callback args)))
; ; AutoSuggest at point
( defun consult-omni-autosuggest-at-point ()
( interactive )
( let ((input ( or ( thing-at-point 'url ) ( thing-at-point 'filename ) ( thing-at-point 'symbol ) ( thing-at-point 'sexp ) ( thing-at-point 'word ))))
( when ( and ( minibuffer-window-active-p ( selected-window ))
( equal ( substring input 0 1 ) (consult--async-split-initial nil )))
( setq input ( substring input 1 )))
(consult-omni-brave-autosuggest input))))
Sepengetahuan saya, tidak ada paket Emacs lain yang menyediakan fungsionalitas dan keserbagunaan konsultasi-omni. Meskipun ada beberapa paket untuk pencarian web, (lihat pembahasan di bawah paket konsultasi-web), tidak ada paket omni-search yang saya ketahui.
Di luar Emacs, tentu saja ada MacOS Spotlight dan Alfred, yang menyediakan utilitas omni-search, namun dibandingkan dengan consult-omni
utilitas tersebut kurang memiliki keserbagunaan dan kemampuan penyesuaian.
Untuk melaporkan bug, pertama-tama periksa apakah bug sudah dilaporkan di *pelacak masalah* dan lihat apakah sudah ada solusi atau tambahkan komentar dan diskusi relevan mengenai masalah yang sama. Jika tidak ajukan masalah baru, ikuti langkah-langkah berikut:
consult
serta url-retrieve
(atau perintah relevan lainnya) berfungsi seperti yang diharapkan.emacs -Q
), instal versi terbaru dari konsultasi-omni (dan dependensinya) tanpa konfigurasi atau paket lain apa pun dan lihat apakah masalahnya masih berlanjut.Mx toggle-debug-on-error
) dan sertakan konten lacak balik dalam laporan Anda.consult-omni-url-retrieve-sync
) , Anda dapat mengubah consult-omni-log-level
menjadi 'debug
, dan memeriksa buffer log (buffer tersembunyi yang disebut ” **consult-omni-log**” atau nama lain yang diatur dalam consult-omni-log-buffer-name
). Jika Anda memilih untuk menyertakan informasi ini dalam masalah Anda, pastikan informasi dan rahasia pribadi (seperti kunci API) tidak diungkapkan.Ini adalah paket sumber terbuka, dan saya menghargai umpan balik, saran, ide, dll. Ada banyak fungsi atau sumber yang dapat ditambahkan ke paket ini untuk meningkatkan alur kerja pengguna yang berbeda, jadi jika Anda memiliki beberapa ide, jangan ragu untuk mengajukan masalah untuk permintaan fitur.
Saya ingin sekali melihat bantuan dari kontributor lain baik untuk meningkatkan/mempertahankan sumber/fitur saat ini maupun untuk mengerjakan sumber atau fitur baru. Jika Anda tertarik dan ingin berkontribusi pada kode, harap dicatat bahwa cabang utama saat ini stabil (sestabil mungkin pekerjaan yang sedang berjalan seperti ini) dan cabang pengembangan adalah pekerjaan yang sedang berjalan. Jadi, mulailah dari cabang pengembangan untuk mendapatkan pembaruan terkini yang sedang dalam proses dan buat cabang baru dengan nama seperti fitur/nama-fitur atau perbaikan/masalah,… Lakukan pengeditan lalu buat tarikan baru meminta untuk menggabungkan kembali dengan cabang pengembangan setelah Anda selesai mengedit.
Yang penting, perlu diingat bahwa saya menggunakan pendekatan pemrograman melek huruf di mana semuanya masuk ke dalam satu sumber kebenaran konsultasi-omni.org dan kemudian digabungkan ke file yang sesuai (misalnya konsultasi-omni.el). Jika Anda membuka permintaan tarik di mana Anda langsung mengedit file .el, saya kemungkinan besar tidak akan menyetujuinya karena itu akan ditimpa nanti ketika saya kusut dari file .org. Dengan kata lain, Jangan Edit File .el! hanya edit file .org dan kusut ke file .el. Ingatlah bahwa meskipun pemrograman melek huruf mungkin tidak masuk akal dalam skenario lain, dalam hal ini, menambahkan sumber/fitur baru dengan menyalin dari contoh lain (karena semuanya ada dalam satu file organisasi), akan sangat membantu, oleh karena itu dalam kasus ini Saya bersikeras untuk menggunakan pemrograman yang melek huruf.
Tentu saja paket ini tidak akan mungkin terwujud tanpa paket konsultasi dan keberangkatan yang luar biasa. Ini juga mengambil inspirasi dari paket lain termasuk namun tidak terbatas pada pendahulunya counsel-web, serta mode mesin, emacs-google-this, helm.
Selanjutnya saya ingin mengucapkan terima kasih kepada @karthink, dan @minad atas saran, diskusi, kontribusinya yang luar biasa, dll. Paket ini tidak akan mungkin terwujud tanpa bantuan @karthink dalam pembuatan prototipe dan pembuatan ide (lihat konsultasi-web-mini) dan bantuan berharga @minad komentar dan saran.