consult-omni
Consult-omni 是一個軟體包,用於直接在Emacs 迷你緩衝區中從一個或多個自訂來源(Web 搜尋引擎、AI 助理、elfeed 資料庫、組織註解、本機檔案、桌面應用程式、郵件伺服器等)取得搜尋結果。它是 Consult-Web 的繼承者,具有擴展的特性和功能。
Consult-omni 提供了 Consult 的包裝器和宏,以便用戶更輕鬆地從不同來源獲取結果,並在全方位搜尋中結合本地和 Web 資源。換句話說,consult-omni 能夠在迷你緩衝區中取得各種來源的諮詢式多來源或動態完成的結果,包括 Emacs 函數/套件(例如 Emacs 緩衝區、org 檔案、elfeed 等)、命令列程式( grep、find、gh、...)或網路搜尋引擎(Google、Brave、Bing、...)。
Consult-omni 可以成為 Alfred 或 MacOS Spotlight 等其他全方位搜尋工具的開源免費替代品。它提供了一系列預設來源作為範例,但這裡的主要想法是保持源不可知,並為使用者提供工具集來定義自己的來源/工作流程(也稱為插件)。
這是強制性的螢幕截圖:
在上面的螢幕截圖中,我使用快捷鍵打開 Emacs 框架並調用consult-omni
(類似於調用 MacOS Spotlight)並蒐索術語“emacs”,然後四處移動並查看來自不同來源(包括應用程式、gptel)的預覽、勇敢、Google、YouTube、elfeed、mu4e、...
這是另一個螢幕截圖,示範如何使用 Consult-omni 作為應用程式啟動器:
要了解功能說明以及與其他一些軟體包的比較,您可以觀看我的 YouTube 視頻,包括下面的 Consult-web 和 Consult-omni:
對於每個來源,您可能有靜態或動態命令。靜態命令查詢輸入的使用情況,然後取得結果。動態指令,在使用者鍵入時動態完成(在使用者鍵入時顯示結果)。動態命令在 2024 年感覺更加直覺和現代,但另一方面也有將查詢多次發送到伺服器的缺點,特別是如果您輸入速度很慢!根據服務提供者和 API 模型,您可能希望避免過於頻繁地存取伺服器(例如,對於按查詢付費的服務),因此對於某些服務,靜態命令可能是比動態命令更好的選擇。使用巨集consult-omni-define-source
,您可以透過將nil
、 t
或'both
傳遞給關鍵字:static
來選擇建立靜態、動態或兩者。以下是原始程式碼中的範例,用於為 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 )
這是維基百科的STATIC互動命令的螢幕截圖:
這是維基百科的DYNAMIC互動命令的螢幕截圖:
預設情況下,consult-omni 提供兩個主要的多來源互動命令。
consult-omni-multi
:這是一個互動式DYNAMIC命令,它使用多個來源(由consult-omni-multi-sources
定義),並以動態完成方式顯示迷你緩衝區完成中的結果(在使用者輸入時獲取結果)。這是一個螢幕截圖: consult-omni-multi-static
:這是一個互動式STATIC指令,它使用多個來源(如consult-omni-multi-sources
所定義),並顯示迷你緩衝區完成中的結果。請注意,consult-omni-multi-static 不提供動態完成,但有些人可能會發現使用它更直觀地縮小結果範圍。使用者提供一個搜尋詞,一旦檢索到結果,在迷你緩衝區中輸入將縮小候選範圍。請注意,與前身consult-web不同,consult-omni不再提供其他多來源互動命令(例如學者搜尋)。現在由使用者為其自訂工作流程定義此類命令。例如,一個使用者可以定義單獨的互動式命令來查詢網路來源和本地來源,而另一個使用者可能想要定義知識來源(學術參考文獻、註釋…)和實用程式(應用程式、緩衝區、檔案… …)的互動式命令。下面的進階配置中提供如何定義新的互動式命令的範例。
參數可以傳遞給動態互動命令,並且可以使用類似於諮詢非同步搜尋中的「Perl splitting」樣式的語法來進一步縮小結果範圍。
為了縮小結果範圍,您需要在搜尋查詢後面加上#
(或在consult-async-split-style
中定義的其他字元)。例如,在迷你緩衝區中鍵入以下內容:
#emacs 網路搜尋#github
首先搜尋“emacs web search”,然後使用“github”縮小範圍。
此外,也可以使用與consult-grep
類似的語法將參數傳遞給動態指令。例如,在迷你緩衝區中鍵入以下內容:
#如何在 emacs 中瀏覽 url -- --model gpt-3.5-turbo
將gpt-3.5-turbo
作為關鍵字參數:model
值傳遞給所有獲取結果的來源的後端函數。如果這些來源中的任何一個接受關鍵字參數:model
,則值gpt-3.5-turbo
將傳遞給它們。因此,建議始終使用接受任何關鍵字參數的函數(也稱為 add &allow-other-keys
),以避免在將不存在的關鍵字傳遞給它們時出現錯誤。
除了使用--
之外,您還可以使用帶有冒號的關鍵字:
。以下內容與上面的範例類似:
#如何在 emacs 中瀏覽 url -- :model gpt-3.5-turbo
當使用 Consult 時,我們處理不同類型的來源,要麼是 elisp 函數(例如buffer-list
、 re-search-forward
),要麼是命令列程式(例如grep
、 notmuch
、 gh
、 mu
等)。他們返回候選列表,然後將其傳遞給completing--read
。雖然 Consult 提供了一種透過consult--multi
組合多個來源的方法,但組合不同類型來源(例如帶有 elisp 的命令列程式)的能力是有限的。在 Consult-omni 中,我們透過圍繞內建諮詢函數創建一些包裝器和機制並讓每個來源聲明其類型來解決這個問題。這種類型告訴全向諮詢如何從該來源收集候選人並與其他來源結合。類型可以是'sync
、 'dynamic
或'async
。
'sync
:這是一個同步來源,這表示當 Consult-omni 呼叫請求函數從該來源收集候選項時,它會同步呼叫它(阻塞 Emacs 進程)並等待返回值(期望候選項清單或 nil )。例如,這適用於僅執行 elisp 函數並快速返回清單(如buffer-list
的來源。非同步呼叫此函數幾乎沒有任何好處,因為非同步控制(計時器和觀察器等)的開銷可能比直接同步呼叫該函數花費更多的時間。'dynamic
:動態來源是那些會受益或需要非同步呼叫收集 elisp 函數的來源。例如,如果從來源收集項目需要向伺服器發送 HTTP 請求並等待回應,則應使用動態類型,以便 Emacs 進程在等待回應時不會被阻塞。在這種情況下,來源的請求函數(傳回項目的函數)應該採用一個回調函數,該回調函數將在回應到達時呼叫。例如,這適用於從網路搜尋 API(例如 Google、Brave 或 OpenAI 的 API)取得回應。'async
:非同步來源,是那些使用外部命令列程式的來源,因此需要建立進程,取得命令列程式的輸出並解析它以收集候選者。例如,這適合從grep
或notmuch
中獲取候選者,...Consult-omni 機制允許透過組合同步和非同步呼叫/進程,將不同類型的多個來源組合在一個命令中,以便用戶可以幾乎即時地有效地從各種來源獲取搜尋結果(無需等待,候選者會按其顯示方式顯示)到達)。
您可以透過以下方式載入預設的登機操作:
( 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 行程式碼。這也意味著添加新的來源,您只需按照這些範例編寫一小段程式碼即可!
許多用於來源和對結果運行操作的自訂選項。可以根據需要以不同的格式、不同的操作添加新的來源…
動態收集允許動態執行複雜的工作流程。透過傳遞參數來動態變更查詢參數。使用「啟動」暫時選擇一組隨機結果,並對其執行「啟動」操作。這也允許批次處理。例如,將一長串結果加入組織模式註釋中以供日後檢視(如以下 YouTube 影片所示:https://youtu.be/7pDfyqBZwvo?t=4774)。
在開始之前,請確保您了解三點:
consult-omni-sources
中提供的功能為整合不同服務(例如搜尋提供者)提供了基本演示,但是由於每個服務都有自己的條款和條件(可能會隨著時間的推移和位置的不同而變化)位置),很難提供包羅萬象的解決方案並隨著時間的推移進行維護。 Consult-omni 不知道您如何在設定中連接和整合其他服務(因為 Consult-omni 和 Emacs 都不收集用戶或其使用情況的任何資訊),因此最終只有您(用戶)負責正確設定所有內容,並且了解使用的後果(例如使用付費API 的成本)並確保遵守您的使用案例的相關法律和法規的範圍(即遵循軟體使用者協議等)。因此,閱讀和了解如何使用每項服務,以及了解將服務與 Consult-omni 整合時幕後發生的情況對您來說非常重要。我盡力在此處以及 wiki 頁面上提供文檔,並會盡可能提供幫助,但在您繼續之前,請理解您所做的一切都需要您自擔風險。 如果您想要範例配置,請參閱 Drop-in *範例配置*。這裡有一些詳細的解釋;
為了使用consult-omni,你需要Emacs>28.0(我沒有測試過早期版本)並且你需要consult。雖然這是唯一的要求,但我建議您閱讀本自述文件的其餘部分。我確實推薦一些其他軟體包和針對不同設定的有用配置。其中一些額外的軟體包和設定可以改善您的全向諮詢體驗,因此您可能也需要考慮安裝它們。例如,將Consult與其他套件(例如vertico、orderless和board)結合可以改善功能和使用者體驗。
Consult-omni 目前不在 ELPA 或 MELPA 上。因此,您需要使用替代的非標準套件管理器(例如 Straight.el、elpaca 等)來安裝它,或使用手動安裝。
要使用 Straight.el 安裝 Consult-omni,您可以使用以下命令。確保在載入consult之後載入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 上所述。
確保在載入consult-omni 之前載入consult(例如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
中定義的來源。
或者,您可以透過僅需要相應的檔案來載入單一來源。例如,對於維基百科,您可以執行以下操作:
( require 'consult-omni-sources )
( require 'consult-omni-wikipedia )
這將新增僅用於搜尋維基百科的互動式指令(例如consult-omni-wikipedia
和/或consult-omni-wikipedia-static
)。
這是目前來源的列表。有關如何設定和使用每個來源的詳細信息,請參閱 wiki 頁面(正在建設中)。您也可以在此處觀看 YouTube 教學影片:https://www.youtube.com/watch?v=wNH2E7iT__c
來源 | 類別 |
---|---|
應用程式 | 桌面應用程式 |
必應 | 網路搜尋引擎 |
勇敢的自動建議 | 網路單字完成/自動建議 |
勇敢的 | 網路搜尋引擎 |
瀏覽器記錄 | 網路瀏覽器記錄 |
諮詢緩衝源 | Emacs 緩衝區、文件、書籤… |
計算 | Emacs計算器 |
聊天GPT | 簡單的AI提示 |
諮詢筆記 | 本地筆記 |
字典 | Emacs 內建字典 |
多伊奧格 | 學術參考 |
DuckDuckGo(有限 API) | 搜尋建議 |
艾爾飼料 | 提要(RSS、視訊…) |
FD | 使用fd指令搜尋本機文件 |
尋找 | 使用find命令搜尋本地文件 |
GitHub | 使用gh指令搜尋 GitHub 儲存庫 |
網路搜尋引擎 | |
谷歌自動建議 | 網路單字完成/自動建議 |
grep | 使用grep命令搜尋本地文件 |
git grep | 使用grep指令搜尋本地 Git 文件 |
ripgrep | 使用rg指令搜尋本地文件 |
ripgrep-全部 | 使用rga指令搜尋本地文件 |
通用電信 | 人工智慧助手 |
令人厭惡的 | 線上影片 (YouTube) |
緩衝文字搜尋 | 在 Emacs 緩衝區中搜尋文本 |
定位 | 使用local指令搜尋本機文件 |
男人 | 使用man指令搜尋手冊頁 |
尋找 | 使用 OSX mdfind指令搜尋本機文件 |
穆4e | 搜尋電子郵件 |
筆記搜尋 | 搜尋本地筆記文件 |
不多 | 搜尋電子郵件 |
努米 | 使用 Numi-cli/ 指令的計算機) |
組織議程 | 搜尋組織議程項目 |
考研 | 學術參考 |
斯科普斯 | 學術參考 |
堆疊溢位 | 社群論壇 |
維基百科 | 百科全書 |
Youtube | 線上影片 (YouTube) |
Consult-omni 的建置理念是使用者應該能夠根據自己的用例自訂一切,因此使用者非常希望學習如何配置這個套件。因此,我建議您閱讀本節並了解如何根據您的需求和特定用例配置該套件。除了這些設定之外,某些來源還有自己的自訂變數等,這些內容在wiki 頁面(正在建置中)和YouTube 教學中進行了討論:https://www.youtube.com/watch?v= wNH2E7iT__c。
提供了以下可自訂變數:
consult-omni-sources-modules-to-load
要載入的模組列表。透過在呼叫consult-omni-sources-load-modules
之前進行設置,您可以限制已載入的模組(來源),並可以避免因缺少某些來源的要求而導致的錯誤。例如,僅載入維基百科:
( 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 提供了兩個範例函數:
consult-omni--simple-format-candidate
顯示迷你緩衝區中沒有旁註註釋的圖塊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,以查看排名靠前的結果。
請記住,使用 Consult-omni 的動態命令,您始終可以透過將值傳遞給參數-p
、 --page
、 :p
或:page
來更改頁面(例如,透過鍵入search term -- -p 2
,您可以獲得第2頁。
consult-omni-default-timeout
consult-omni
放棄從STATIC指令中的單一來源取得結果之前的最長時間(以秒為單位)。
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
這是一個來源名稱字串清單(例如'("Google", "Wikipedia", "chatGPT")
),將在命令consult-omni-multi
和consult-omni-multi-static
中使用(參見上文描述) 。
consult-omni-highlight-matches-in-minibuffer
Consult-omni 是否突出顯示迷你緩衝區候選中搜尋字詞的匹配項。這對於突出搜尋結果的相關性很有用。
consult-omni-highlight-matches-in-file
Consult-omni 是否會反白顯示文件中搜尋字詞的符合項目(例如在預覽中或開啟文件時)。這對於在開啟目標檔案後查找搜尋字詞的匹配很有用。
consult-omni-default-interactive-command
這是一個方便的功能,可以將您最喜歡的 Consult-omni 互動式指令綁定到名為consult-omni
指令,這樣當您呼叫Mx
時更容易記住和尋找。您可以將其綁定到互動式指令之一(例如consult-omni-multi
或consult-omni-multi-static
),也可以將其綁定到單一來源指令(例如consult-omni-google
、 consult-omni-google-static
、 consult-omni-google-wikipedia
等)或您可以定義自己的自訂指令(單一來源或多來源)並使用它。
consult-omni-http-retrieve-backend
此變數控制 Consult-omni 使用哪個後端來處理 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
,但您也可以從其他來源(例如google、維基百科等)定義其他自定義自動建議命令。
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest )
consult-omni-dynamic-input-debounce
在動態指令中,只有在consult-omni-dynamic-input-debounce
秒內沒有新輸入時才會啟動動態收集過程。如果您輸入速度較慢或認為需要時間思考要搜索的內容,則可能需要增加此數字,這樣您就不會過早地運行搜索,特別是如果您想避免在付費服務上過早地運行搜索詞。預設情況下,它繼承自 Consult 的內建輸入去抖值,即 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
秒啟動一次。如果您使用每秒查詢數量有限的 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))))
據我所知,沒有其他 Emacs 軟體包提供了 Consult-omni 的功能和多功能性。雖然有幾個用於網路搜尋的套件(請參閱諮詢網路包下的討論),但據我所知,沒有全搜尋包。
除了 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 金鑰)不會暴露。這是一個開源包,我很欣賞反饋、建議、想法等。 。
我希望看到其他貢獻者的幫助,以改進/維護當前的來源/功能以及開發新的來源或功能。如果您有興趣並希望為程式碼做出貢獻,請注意,主分支目前是穩定的(與像這樣的正在進行的工作一樣穩定),而開發分支是目前正在進行的工作。因此,從開發分支開始獲取最新的正在進行的更新,並使用諸如功能/功能名稱或修復/問題之類的名稱創建一個新分支,…進行編輯,然後創建一個新的拉取完成編輯後請求合併回開發分支。
重要的是,請記住,我使用的是一種文學程式設計方法,其中所有內容都進入單一事實來源consult-omni.org ,然後與適當的文件(例如consult-omni.el)糾纏在一起。如果您打開直接編輯 .el 檔案的拉取請求,我可能不會批准它,因為稍後當我從 .org 檔案中糾結時,它會被覆蓋。換句話說,不要編輯 .el 檔案!僅編輯 .org 檔案並纏結到 .el 檔案。請記住,雖然文學程式設計在其他情況下可能沒有多大意義,但在這種情況下,它確實有助於透過從其他範例複製來添加新的來源/功能(因為所有內容都在一個組織文件中),因此在這種情況下我堅持使用文學程式設計。
顯然,如果沒有出色的諮詢和登船套餐,這個套餐是不可能實現的。它也從其他軟體包中汲取了靈感,包括但不限於前身 coach-web,以及 engine-mode、emacs-google-this、helm。
此外,我還要感謝@karthink 和@minad 的精彩建議、討論、貢獻等。包就不可能實現。