consult-omni
についてConsult-omni は、1 つまたは複数のカスタム ソース (Web 検索エンジン、AI アシスタント、elfeed データベース、組織メモ、ローカル ファイル、デスクトップ アプリケーション、メール サーバーなど) から検索結果を Emacs ミニバッファで直接取得するためのパッケージです。これは、Consult-Web の後継であり、機能が拡張されています。
Consult-omni は、コンサルトに関するラッパーとマクロを提供し、ユーザーがさまざまなソースから結果を取得したり、オムニ スタイルの検索でローカル ソースと Web ソースを組み合わせたりすることを容易にします。言い換えれば、consult-omni を使用すると、Emacs 関数/パッケージ (例: Emacs バッファ、org ファイル、elfeed など)、コマンドライン プログラム ( grep、find、gh、…)、または Web 検索エンジン (Google、Brave、Bing など)。
Consult-omni は、Alfred や MacOS Spotlight などの他のオムニ検索ツールに代わるオープンソースの無料代替ツールとなります。例としてさまざまなデフォルトのソースが提供されていますが、ここでの主な考え方は、ソースにとらわれず、ユーザーが独自のソース/ワークフロー (別名プラグイン) を定義するためのツールセットを提供することです。
必須のスクリーンショットは次のとおりです。
上のスクリーンショットでは、キー ショートカットを使用して Emacs フレームを開き、 consult-omni
呼び出し (MacOS Spotlight を呼び出すのと同様)、「emacs」という用語を検索してから、アプリケーション、gptel などのさまざまなソースから移動してプレビューを確認しています。 、ブレイブ、Google、YouTube、elfeed、mu4e、...。
以下は、consult-omni をアプリケーション ランチャーとして使用することを示す別のスクリーンショットです。
機能の説明と他のいくつかのパッケージとの比較については、以下のConsult-WebとConsult-omniの両方に関する私のYouTubeビデオをご覧ください。
ソースごとに、静的コマンドまたは動的コマンドを使用できます。静的コマンドは入力の使用をクエリし、結果をフェッチします。動的コマンド。ユーザーの入力時に動的補完を実行します (ユーザーが入力しているときに結果を表示します)。 2024 年では、動的コマンドがもう少し直観的で現代的になったように感じますが、その一方で、特に入力が遅い場合にはクエリをサーバーに複数回送信する必要があるという欠点もあります。サービス プロバイダーと API モデルによっては、サーバーに頻繁にアクセスすることを避けたい場合があります (たとえば、クエリごとに料金を支払うサービスの場合)。そのため、特定のサービスでは、動的コマンドよりも静的コマンドの方が適切な選択となる場合があります。マクロconsult-omni-define-source
使用すると、キーワード:static
にnil
、 t
、または'both
渡すことで、静的、動的、またはその両方を作成することを選択できます。以下は、Brave search 用の静的コマンドと動的コマンドの両方を作成するためのソース コードの例です。
(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 )
これは、Wikipedia のSTATIC対話型コマンドのスクリーンショットです。
これは、Wikipedia のDYNAMICインタラクティブ コマンドのスクリーンショットです。
デフォルトでは、consult-omni は 2 つの主要なマルチソース対話型コマンドを提供します。
consult-omni-multi
:これは、 consult-omni-multi-sources
で定義されている複数のソースを使用する対話型のDYNAMICコマンドで、動的補完を使用してミニバッファ補完で結果を表示します (結果はユーザーの入力としてフェッチされます)。スクリーンショットは次のとおりです。 consult-omni-multi-static
: これはconsult-omni-multi-sources
で定義されている複数のソースを使用する対話型のSTATICコマンドで、ミニバッファー補完で結果を表示します。 Consult-omni-multi-static は動的補完を提供しませんが、結果を絞り込むためにこれを使用した方が直感的であると感じる人もいるかもしれないことに注意してください。ユーザーは検索語を 1 つ指定し、結果が取得されたら、ミニバッファーに入力すると候補が絞り込まれます。前任のConsult-Webとは異なり、Consult-omniは他のマルチソース対話型コマンド(例えば、scholar search)を提供していないことに注意してください。カスタム ワークフローにそのようなコマンドを定義するかどうかは、ユーザーの責任になります。たとえば、あるユーザーは Web ソースとローカル ソースをクエリするための個別の対話型コマンドを定義し、別のユーザーは知識ソース (学術参考文献、メモなど) とユーティリティ (アプリ、バッファ、ファイルなど) に対して対話型コマンドを定義したい場合があります。新しい対話型コマンドを定義する方法の例は、以下の詳細設定で提供されます。
引数は動的対話型コマンドに渡すことができ、コンサルト非同期検索の「Perl 分割」スタイルに似た構文を使用して結果をさらに絞り込むことができます。
結果を絞り込むには、検索クエリの後に#
(またはconsult-async-split-style
で定義された別の文字) を追加する必要があります。たとえば、ミニバッファに次のように入力します。
#emacs ウェブ検索#github
まず「emacs web search」で検索し、次に「github」で絞り込みます。
さらに、 consult-grep
と同様の構文を使用して、引数を動的コマンドに渡すこともできます。たとえば、ミニバッファに次のように入力します。
#emacs で URL を参照する方法 -- --model gpt-3.5-turbo
は、キーワード引数:model
の値としてgpt-3.5-turbo
を、結果をフェッチするすべてのソースのバックエンド関数に渡します。これらのソースのいずれかがキーワード引数:model
受け入れる場合、値gpt-3.5-turbo
が渡されます。このため、存在しないキーワードが渡されたときのエラーを避けるために、キーワード引数を受け入れる関数 (別名 add &allow-other-keys
) を常に使用することをお勧めします。
--
使用する代わりに、コロン:
を含むキーワードを使用することもできます。以下は上記の例と似ています。
#emacs で URL を参照する方法 -- :model gpt-3.5-turbo
コンサルトを使用する場合、 elisp 関数 (例: buffer-list
、 re-search-forward
) またはコマンドライン プログラム (例: grep
、 notmuch
、 gh
、 mu
、…) のいずれかのさまざまなタイプのソースを扱います。これらは候補のリストを返し、それがcompleting--read
に渡されます。コンサルトは、複数のソースをconsult--multi
で結合する方法を提供しますが、異なるタイプのソース (コマンドライン プログラムと elisp など) を結合する機能は制限されています。コンサルトオムニでは、組み込みコンサルト関数の周囲にいくつかのラッパーと機構を作成し、各ソースにその型を宣言させることで、この問題を解決します。このタイプは、consult-omni にそのソースから候補を収集し、他のソースと組み合わせる方法を指示します。タイプは、 'sync
、 'dynamic
」、または'async
です。
'sync
: これは同期ソースです。つまり、consult-omni がこのソースから候補を収集するために request 関数を呼び出すと、それを同期的に呼び出し (Emacs プロセスをブロックし)、戻り値を待ちます (候補のリストまたは nil を期待します)。 )。これは、たとえば、単に elisp 関数を実行して、 buffer-list
のようにリストをすぐに返すソースに適しています。非同期制御 (タイマーやウォッチャーなど) のオーバーヘッドにより、おそらく関数を直接同期的に呼び出すよりも多くの時間がかかるため、この関数を非同期的に呼び出してもメリットはほとんどありません。'dynamic
: 動的ソースは、収集 elisp 関数を非同期的に呼び出すと有利になる、または呼び出す必要があるソースです。たとえば、ソースからアイテムを収集するためにサーバーに HTTP リクエストを送信し、その応答を待つ必要がある場合は、応答を待っている間に Emacs プロセスがブロックされないように動的タイプを使用する必要があります。この場合、ソースのリクエスト関数 (項目を返す関数) は、応答の到着時に呼び出されるコールバック関数を受け取る必要があります。これは、たとえば、Google、Brave、または OpenAI の API などの Web 検索 API から応答を取得するのに適しています。'async
: 非同期ソースは、外部コマンド ライン プログラムを使用するため、プロセスを作成し、コマンド ライン プログラムの出力を取得し、それを解析して候補を収集する必要があるソースです。これは、たとえばgrep
やnotmuch
などから候補を取得するのに適しています。コンサルトオムニ機構では、同期および非同期の呼び出し/プロセスを組み合わせることで、異なるタイプの複数のソースを 1 つのコマンドで組み合わせることができるため、ユーザーはさまざまなソースから検索結果をほぼリアルタイムで効率的に取得できます (待機する必要がなく、候補が表示されると同時に表示されます)。到着)。
デフォルトの開始アクションは次の方法でロードできます。
( require 'consult-omni-embark )
デフォルトのアクションを使用すると、デフォルトまたは代替ブラウザでリンクを開いたり、リンクのタイトルや URL をコピーまたは挿入したりできます。他の開始アクションは、独自の特定のワークフローごとに定義できます。
例については、consult-web の YouTube ビデオ (https://youtu.be/7pDfyqBZwvo?t=4962) を参照してください。
ドキュメント文字列とホワイトスペースがなければ、コードは 1000 行未満であり、問い合わせと組み込みの URL 取得のみに依存します。
必要な部分だけを読み込むことができます。たとえば、 helm-google-autosuggest
に似た自動提案ユーティリティだけが必要な場合は、次のような最小限の構成を使用できます。
( 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 ))
すべてのモジュール (別名すべてのソース) に 100 ~ 200 行のコードが追加されることに注意してください。これは、新しいソースを追加することも意味します。必要なのは、これらの例に従って短いコードを記述するだけです。
ソースと結果に対してアクションを実行するためのカスタマイズ オプションが多数あります。さまざまな形式、さまざまなアクションなどを使用して、新しいソースを自由に追加できます。
動的収集により、その場で複雑なワークフローが可能になります。引数を渡すことでクエリ パラメータをその場で変更します。 embark を使用して結果のランダムなセットをアドホックに選択し、それらに対して embark アクションを実行します。これによりバッチ処理も可能になります。たとえば、後で確認できるように結果の長いリストを組織モードのメモに追加します (この YouTube ビデオ: https://youtu.be/7pDfyqBZwvo?t=4774 を参照)。
始める前に、次の 3 つの点を必ず理解してください。
consult-omni-sources
で提供される関数は、さまざまなサービス (検索プロバイダーなど) を統合するための基本的なデモンストレーションを提供します。ただし、各サービスには独自の利用規約があるため (時間の経過とともに変更され、場所によって異なる場合があります)包括的なソリューションを提供し、それを長期にわたって維持することは困難です。コンサルトオムニは、セットアップ内で他のサービスをどのように接続して統合するかに依存しません (コンサルトオムニも Emacs もユーザーやユーザーの使用状況に関する情報を収集しないため)。そのため、最終的にすべてを正しくセットアップする責任があるのはユーザーであるあなただけです。使用の結果 (有料 API の使用コストなど) を理解し、使用事例に関連する法律や規制の範囲内に確実に収まるようにします (つまり、ソフトウェア ユーザー契約に従うなど)。したがって、各サービスの使用方法を読んで理解すること、また、サービスをConsult-omni と統合したときに内部で何が起こっているのかを理解することが重要です。私は、Wiki ページだけでなくここにもドキュメントを提供するよう最善を尽くしており、可能な場合はサポートしようとしますが、続行する前に、すべてを自己責任で行うことを理解してください。 構成例が必要な場合は、「ドロップイン *構成例*」を参照してください。以下に詳細な説明を示します。
Consult-omni を使用するには、Emacs >28.0 (以前のバージョンはテストしていません) が必要であり、consult する必要があります。これが唯一の要件ですが、この README の残りの部分を読むことをお勧めします。さまざまな設定に適した他のパッケージや便利な構成をお勧めします。これらの追加のパッケージや設定の一部は、consult-omni のエクスペリエンスを向上させることができるため、それらのインストールも検討することをお勧めします。たとえば、consult を vertico、orderless、embark などの他のパッケージと組み合わせると、機能だけでなくユーザー エクスペリエンスも向上させることができます。
コンサルトオムニは現在 ELPA または MELPA にありません。したがって、straight.el、elpaca などの代替の非標準パッケージ マネージャーを使用してインストールするか、手動インストールを使用する必要があります。
コンサルトオムニをstraight.elでインストールするには、次のコマンドを使用できます。コンサルトをロードした後に必ずconsult-omniをロードしてください(例: require 'consult
)。
( straight-use-package
'(consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " )))
または、 use-package
マクロをストレートで使用する場合は、次のようにすることができます。
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " ))
:after consult)
このリポジトリをフォークして独自のリポジトリを使用することもできます。
EmacsWiki の説明に従って、このリポジトリをクローンし、ファイルがロード パス上にあることを確認します。
コンサルトオムニをロードする前に、必ずコンサルトをロードしてください (例: require 'consult
)。
提供されたconsult-omni-sources
モジュールをロードし、関数consult-omni-sources-load-modules
呼び出すことで、すべてのデフォルトのソースを検索できます。
( require 'consult-omni-sources )
(consult-omni-sources-load-modules)
これにより、いくつかの人気サービスのソースが提供され、対話型コマンド (ソースに応じて動的検索、静的検索、またはその両方) の長いリストが追加されます。できればコミュニティからの貢献も含めて、時間の経過とともにさらに多くのサービスを追加していきたいと考えています。これらは、独自のソースを追加する方法や、特定のユースケースに合わせて現在のソースを微調整する方法を学ぶための良い例でもあることに注意してください。
また、リストconsult-omni-sources-modules-to-load
を設定してから、 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)
これにより、Consult-omni がロードするソースはconsult-omni-sources-modules-to-load
で定義されたソースのみに制限されます。
あるいは、対応するファイルを要求するだけで単一のソースをロードすることもできます。たとえば、Wikipedia の場合、次のことができます。
( require 'consult-omni-sources )
( require 'consult-omni-wikipedia )
これにより、Wikipedia を検索するための対話型コマンドのみが追加されます (例: consult-omni-wikipedia
および/またはconsult-omni-wikipedia-static
)。
現在のソースのリストは次のとおりです。各ソースの設定方法や使用方法の詳細については、Wiki ページ (現在作成中) を参照してください。ここで YouTube チュートリアル ビデオを視聴することもできます: https://www.youtube.com/watch?v=wNH2E7iT__c
ソース | カテゴリ |
---|---|
アプリ | デスクトップアプリケーション |
ビング | ウェブ検索エンジン |
Brave AutoSuggest | Web 単語補完/AutoSuggest |
勇敢な | ウェブ検索エンジン |
ブラウザ履歴 | ウェブブラウザの履歴 |
バッファソースを参照する | Emacs のバッファ、ファイル、ブックマークなど |
計算する | Emacs 電卓 |
チャットGPT | シンプルな AI プロンプト |
相談メモ | ローカルメモ |
辞書 | Emacs 組み込み辞書 |
ドイオルグ | 学術参考資料 |
DuckDuckGo (限定 API) | 検索候補 |
エルフィード | フィード (RSS、ビデオなど) |
fd | fdコマンドでローカルファイルを検索する |
探す | findコマンドでローカルファイルを検索する |
GitHub | ghコマンドで GitHub リポジトリを検索 |
グーグル | ウェブ検索エンジン |
Google AutoSuggest | Web 単語補完/AutoSuggest |
grep | grepコマンドでローカルファイルを検索する |
git-grep | grepコマンドでローカルGitファイルを検索する |
リップレップ | rgコマンドでローカルファイルを検索する |
リップグレップオール | rgaコマンドでローカルファイルを検索する |
グプテル | AIアシスタント |
好奇心旺盛 | オンラインビデオ (YouTube) |
バッファテキスト検索 | Emacs バッファ内のテキストを検索する |
見つける | ローカルコマンドでローカルファイルを検索 |
男 | manコマンドでマニュアルページを検索 |
mdfind | OSXのmdfindコマンドでローカルファイルを検索する |
む4e | メールの検索 |
メモの検索 | ローカルメモファイルの検索 |
あまりない | メールの検索 |
ぬみ | Numi の numi-cli/ コマンドを使用した計算機) |
組織の議題 | 組織の議題項目を検索 |
パブメッド | 学術参考資料 |
スコーパス | 学術参考資料 |
スタックオーバーフロー | コミュニティフォーラム |
ウィキペディア | 百科事典 |
YouTube | オンラインビデオ (YouTube) |
コンサルトオムニは、ユーザーがユースケースに基づいてすべてをカスタマイズできるべきであるという考えに基づいて構築されているため、ユーザーはこのパッケージの構成方法を学ぶことが非常に期待されています。したがって、このセクションを読み、ニーズおよび特定の使用例に応じてパッケージを構成する方法を理解することをお勧めします。これらの設定に加えて、一部のソースには独自のカスタマイズ変数などがあり、これについては wiki ページ (現在作成中) およびこの YouTube チュートリアル: https://www.youtube.com/watch?v=wNH2E7iT__c で説明されています。
次のカスタマイズ可能な変数が提供されます。
consult-omni-sources-modules-to-load
ロードするモジュールのリスト。 consult-omni-sources-load-modules
呼び出す前にこれを設定すると、ロードされるモジュール (ソース) を制限でき、特定のソースの要件が欠落していることによるエラーを回避できます。たとえば、Wikipedia をロードするだけの場合:
( setq consult-omni-sources-modules-to-load ( list 'consult-omni-wikipedia ))
consult-omni-default-browse-function
URL を開くためのデフォルトの参照機能。これは、次の方法で外部ブラウザ機能に設定できます。
( setq consult-omni-default-browse-function 'browse-url )
consult-omni-alternate-browse-function
URL を開くための二次的なブラウズ機能。たとえば、これを eww またはその他のブラウザに設定すると、開始アクションで代替ブラウザにすばやくアクセスできます。
( setq consult-omni-alternate-browse-function 'eww-browse-url )
consult-omni-default-preview-function
リンクのプレビューに使用するデフォルトの関数。たとえば、これを eww に設定できます。
( setq consult-omni-default-preview-function # 'eww-browse-url )
または xwidegt-webkit:
( setq consult-omni-default-preview-function # 'xwidget-webkit-browse-url )
consult-omni-show-preview
これにより、すべてのコンサルトオムニ ソースのプレビューがオン/オフになります。これをt
に設定し、 preview-key
使用してソースごとにプレビューを制御することをお勧めします。
consult-omni-preview-key
これはデフォルトのプレビュー キーです。適切な選択は「Co」かもしれません。
( setq consult-omni-preview-key " C-o " )
consult-omni-default-format-candidate
この変数 a には、(明示的なフォーマット関数を持たないソース上で) 候補をフォーマットするために呼び出される関数が格納されます。 Consult-omni には 2 つのサンプル関数が用意されています。
consult-omni--simple-format-candidate
ミニバッファーに marginalia 注釈のないタイルを表示しますconsult-omni--highlight-format-candidate
欄外注釈付きの候補を表示し、検索語も強調表示します。 consult-omni-default-count
デフォルトでは、consult-omni はソースごとに最大でこの数の結果のみを取得します。パフォーマンスを高速に保つために、これを低い数値 (例: 5 ~ 10) に保つことをお勧めします。現在、ほとんどの日常的なユースケースでは、おそらく上位 5 件以上の結果は必要ないため、デフォルトは 5 に設定されています。
( setq consult-omni-default-count " 5 " )
Consult-omni の動的コマンドでは、引数を-n
、 --count
、 :n
、または:count
に渡すことでいつでも数を増やすことができることに注意してください (たとえば、 search term -- -n 30
と入力すると、最大 30 件の結果を取得します。
consult-omni-default-page
これは、従来の検索結果ページで 2、3、…、N ページに移動するのと似ています。これを N に設定すると、最初の (N * カウント/ページ) の結果がスキップされ、次のページの結果が表示されます。上位の結果を確認するには、これをデフォルトの 0 のままにすることをお勧めします。
コンサルトオムニの動的コマンドでは、引数-p
、 --page
、 :p
、または:page
に値を渡すことでいつでもページを変更できることに注意してください (たとえば、 search term -- -p 2
と入力すると、 2ページ目を取得できます。
consult-omni-default-timeout
STATICコマンドで単一ソースから結果を取得する際に、 consult-omni
断念するまでの最大時間 (秒単位)。
consult-omni-url-use-queue
url-queue
を使用するかどうかを示すブール値。
consult-omni-url-queue-parallel-processes
並行して実行されるurl-queue
プロセスの数。
consult-omni-url-queue-timeout
単一のurl-queue
ジョブが中止されるまでの最大存続時間 (秒単位)。
consult-omni-log-buffer-name
ログ情報のバッファ名。これは主にデバッグに役立ちます。
consult-omni-log-level
この変数は、consult-omni が情報をログに記録する方法やエラーを表示する方法を制御します。詳細を記録/表示する順序で、 nil
、 'info
、または'debug
いずれかになります。
consult-omni-group-by
これは、結果をグループ化するために使用されるフィールドです。デフォルトでは、結果はソースの名前ごとにグループ化されます。ただし、これを変更してさまざまなグループ化動作を実現できます。これがnil
に設定されている場合、結果はグループ化されません。候補の他のプロパティ (例:url
、 :title
、 :domain
など) に設定することもできます。
( setq consult-omni-group-by :source )
consult-omni-multi-sources
これは、コマンドconsult-omni-multi
およびconsult-omni-multi-static
で使用されるソース名文字列(例: '("Google", "Wikipedia", "chatGPT")
)のリストです(詳細については上記を参照してください)。説明)。
consult-omni-highlight-matches-in-minibuffer
コンサルトオムニがミニバッファ候補内の検索用語の一致を強調表示するかどうか。これは、検索結果の関連性を強調するのに役立ちます。
consult-omni-highlight-matches-in-file
コンサルトオムニがファイル内の検索用語の一致を強調表示するかどうか (プレビューまたはファイルを開くときなど)。これは、ターゲット ファイルを開いた後に検索用語の一致を見つけるのに役立ちます。
consult-omni-default-interactive-command
これは、お気に入りのConsult-omni対話型コマンドをconsult-omni
というコマンドにバインドする便利な機能で、 Mx
呼び出すときに覚えて見つけやすくなります。これを対話型コマンドの 1 つにバインドすることも ( consult-omni-multi
やconsult-omni-multi-static
など)、単一ソースのコマンド (例えば、 consult-omni-google
、 consult-omni-google-static
にバインドすることもできます。 consult-omni-google-static
、 consult-omni-google-wikipedia
、…) または、独自のカスタム コマンド (単一または複数ソース) を定義して、代わりにそれを使用することもできます。
consult-omni-http-retrieve-backend
この変数は、HTTP リクエストに対してconsult-omniがどのバックエンドを使用するかを制御します。コンサルトオムニは 3 つの異なるバックエンドをサポートしています。
url-retrieve
request
(emacs-request を参照)plz
(plz.el を参照)たとえば、バックエンドをplz
に変更するには、次のようにします。
( setq consult-omni-http-retrieve-backend 'plz )
consult-omni-default-autosuggest-command
デフォルトの自動提案コマンド。 Consult-omni は、 consult-omni-dynamic-brave-autosuggest
とconsult-omni-dynamic-google-autosuggest
の 2 つの例を提供しますが、他のソース (Google、Wikipedia など) から他のカスタム autosuggest コマンドを定義することもできます。
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest )
consult-omni-dynamic-input-debounce
動的コマンドでは、 consult-omni-dynamic-input-debounce
秒間新しい入力がない場合にのみ、動的収集プロセスが開始されます。入力が遅い場合、または何を検索するかを考える時間が必要だと思う場合は、特に有料サービスで時期尚早に検索語を実行することを避けたい場合は、時期尚早に検索を実行しないように、この数値を大きくすることをお勧めします。デフォルトでは、これはコンサルトの組み込みの入力デバウンス値 (0.5) を継承します。個人的には、consult-omni には少し速すぎると思います。クエリを入力している間に、consult-omni が有料の OpenAI API にクエリを送信したくないので、0.8 ~ 1 秒まで遅くします。
( setq consult-omni-dynamic-input-debounce 0.8 )
consult-omni-dynamic-input-throttle
動的コマンドでは、動的収集プロセスはconsult-omni-dynamic-input-throttle
秒ごとにのみ開始されます。 1 秒あたりのクエリ数が制限されている API サービスを使用する場合、エラーの発生を避けるためにこの数を増やすことができます。これを入力デバウンス値の 2 倍に設定します。
( setq consult-omni-dynamic-input-throttle 1.6 )
consult-omni-dynamic-refresh-delay
動的コマンドでは、完了 UI は、 consult-omni-dynamic-refresh-delay
秒ごとにのみ更新されます。おそらくこれを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))))
私の知る限り、consult-omni の機能と多用途性を提供する Emacs パッケージは他にありません。 Web 検索用のパッケージはいくつかありますが (Consult-Web パッケージの説明を参照)、私が知っているオムニ検索パッケージはありません。
もちろん、Emacs 以外にも、オムニ検索ユーティリティを提供する MacOS Spotlight や Alfred のような有料サービスがありますが、 consult-omni
と比較すると、汎用性やカスタマイズ性に欠けます。
バグを報告するには、まず *問題トラッカー* で既に報告されているかどうかを確認し、既存の解決策があるかどうかを確認するか、同じ問題に関連するコメントやディスカッションを追加します。そうでない場合は、次の手順に従って新しい問題を提出してください。
consult
とurl-retrieve
(またはその他の関連コマンド) の両方が期待どおりに機能することを確認してください。emacs -Q
) で、コンフィギュレーションや他のパッケージを使用せずに最新バージョンのConsult-omni (およびその依存関係) をインストールし、問題が解決しないかどうかを確認します。Mx toggle-debug-on-error
により)、バックトレースの内容をレポートに含めます。consult-omni-url-retrieve-sync
) を使用している場合は、 consult-omni-log-level
'debug
に変更し、ログ バッファ ( と呼ばれる隠しバッファ) を検査できます。 **consult-omni-log**」、またはconsult-omni-log-buffer-name
で設定された他の名前)。この情報を問題に含めることを選択した場合は、個人情報や秘密情報 (API キーなど) が公開されないようにしてください。これはオープン ソース パッケージであり、フィードバック、提案、アイデアなどを歓迎します。さまざまなユーザーのワークフローを改善するためにこのパッケージに追加できる機能やソースがたくさんあります。そのため、アイデアがある場合は、お気軽に機能リクエストの発行。
現在のソースや機能の改善/維持だけでなく、新しいソースや機能の開発についても、他の寄稿者からの支援をお待ちしています。興味があり、コードに貢献したい場合は、メイン ブランチが現在安定しており (このような進行中の作業が可能な限り安定している)、develop ブランチが現在進行中の作業であることに注意してください。そのため、開発ブランチから開始して最新の進行中の更新を取得し、機能/機能名、修正/問題などの名前を付けて新しいブランチを作成します。編集してから新しいプルを作成します。編集が完了したら、 developブランチにマージし直すようリクエストします。
重要なのは、すべてが単一の真実の情報源であるConsult-omni.orgに入力され、その後、適切なファイル(例:Consult-omni.el)に結合されるという、読み書き可能なプログラミングアプローチを使用していることに留意してください。 .el ファイルを直接編集したプルリクエストを開くと、後で .org ファイルから編集するときに上書きされてしまうため、おそらく承認されません。言い換えれば、 .el ファイルは編集しないでください。 .org ファイルのみを編集し、.el ファイルに結合します。他のシナリオでは読み書き可能なプログラミングはあまり意味がないかもしれませんが、この場合は他のサンプルからコピーすることで新しいソース/機能を追加するのに非常に役立ちます (すべてが 1 つの組織ファイル内にあるため)。私は、読み書き可能なプログラミングを使用しないことを強く主張します。
明らかに、このパッケージは、素晴らしいコンサルト パッケージとエンバーク パッケージがなければ実現できなかったでしょう。また、前任者の counsel-web や、engine-mode、emacs-google-this、helm などの他のパッケージからもインスピレーションを受けています。
さらに、素晴らしい提案、ディスカッション、貢献などをしてくれた @karthink と @minad に感謝したいと思います。このパッケージは、プロトタイピングとアイデア作成における @karthink の助け (consult-web-mini を参照) と @minad の貴重な支援なしには実現できなかったでしょう。コメントや提案。