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)的预览、勇敢、谷歌、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 的精彩建议、讨论、贡献等。如果没有@karthink 在原型设计和构思方面的帮助(请参阅consult-web-mini)和@minad 的宝贵帮助,这个软件包就不可能实现。意见和建议。