consult-omni
Consult-omni — это пакет для получения результатов поиска из одного или нескольких пользовательских источников (поисковые системы в Интернете, помощники искусственного интеллекта, база данных elfeed, заметки организации, локальные файлы, настольные приложения, почтовые серверы и т. д.) непосредственно в минибуфере Emacs. Это преемник Consult-Web с расширенными возможностями и возможностями.
Consult-omni предоставляет оболочки и макросы для Consult, чтобы пользователям было проще получать результаты из разных источников и объединять локальные и веб-источники в омни-поиске. Другими словами, Consult-omni позволяет получать результаты из нескольких источников или динамически завершаемые результаты в стиле Consult в минибуфере для широкого спектра источников, включая функции/пакеты Emacs (например, буферы Emacs, org-файлы, elfeed,…), программы командной строки ( grep, find, gh, …) или поисковые системы (Google, Brave, Bing, …).
Consult-omni может быть бесплатной альтернативой с открытым исходным кодом другим инструментам омни-поиска, таким как Alfred или MacOS Spotlight. В качестве примеров он предоставляет ряд источников по умолчанию, но основная идея здесь состоит в том, чтобы оставаться независимым от источника и предоставить пользователям набор инструментов для определения своих собственных источников/рабочих процессов (также известных как плагины).
Вот обязательный скриншот:
На снимке экрана выше я использую сочетание клавиш, чтобы открыть фрейм Emacs, вызвать consult-omni
(аналогично вызову MacOS Spotlight) и выполнить поиск по термину «emacs», затем передвигаюсь и просматриваю предварительные просмотры из разных источников, включая приложение, gptel. , Brave, 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
: это интерактивная ДИНАМИЧЕСКАЯ команда, которая использует несколько источников, как определено в consult-omni-multi-sources
, и показывает результаты в минибуфере с динамическим завершением (результаты извлекаются по мере ввода пользователем). Вот скриншот: consult-omni-multi-static
: это интерактивная команда STATIC , которая использует несколько источников, как определено в consult-omni-multi-sources
, и показывает результаты в виде завершения минибуфера. Обратите внимание, что Consult-omni-multi-static не обеспечивает динамическое завершение, но некоторым это может показаться более интуитивным для сужения результатов. Пользователь предоставляет один поисковый запрос, и как только результаты будут получены, ввод в минибуфер сузит список кандидатов.Обратите внимание, что в отличие от предшественника Consult-Web, Consult-omni больше не предоставляет других интерактивных команд с несколькими источниками (например, поиск ученых). Теперь пользователь может определить такие команды для своего рабочего процесса. Например, один пользователь может определить отдельные интерактивные команды для запроса веб-источников, а не локальных источников, в то время как другой пользователь может захотеть определить интерактивные команды для источников знаний (академические ссылки, заметки и т. д.) и утилит (приложения, буферы, файлы и т. д.). Примеры определения новых интерактивных команд приведены ниже в расширенной конфигурации здесь.
Аргументы можно передавать динамическим интерактивным командам, а дальнейшее сужение результатов можно выполнить, используя синтаксис, аналогичный стилю «разделения Perl» в асинхронном поиске.
Чтобы сузить результаты, вам нужно добавить #
(или другой символ, определенный в consult-async-split-style
) после поискового запроса. Например, введите в минибуфер следующее:
#веб-поиск emacs#github
Сначала ищет «веб-поиск emacs», а затем использует «github» для сужения.
Кроме того, аргументы можно передавать динамическим командам, используя синтаксис, аналогичный consult-grep
. Например, введите в минибуфер следующее:
#как просмотреть URL-адрес в emacs -- --model gpt-3.5-turbo
передает gpt-3.5-turbo
в качестве значения аргумента ключевого слова :model
внутренним функциям всех источников, которые получают результаты. Если какой-либо из этих источников принимает аргумент ключевого слова :model
, ему передается значение gpt-3.5-turbo
. По этой причине рекомендуется всегда использовать функции, которые принимают любые аргументы ключевых слов (например, add &allow-other-keys
), чтобы избежать ошибок при передаче им несуществующих ключевых слов.
вместо использования --
вы также можете использовать ключевое слово с двоеточием :
. Следующее будет похоже на приведенный выше пример:
#как просмотреть URL-адрес в emacs -- :model gpt-3.5-turbo
При использовании консультации мы имеем дело с различными типами источников: либо с функциями elisp (например, buffer-list
, re-search-forward
), либо с программами командной строки (например, grep
, notmuch
, gh
, mu
, …). Они возвращают список кандидатов, которые, в свою очередь, передаются на completing--read
. Хотя Consult предоставляет возможность объединить несколько источников с помощью consult--multi
, возможность объединения источников разных типов (например, программа командной строки с elisp) ограничена. В Consult-omni мы решаем эту проблему, создавая некоторые оболочки и механизмы вокруг встроенных функций консультации и указывая каждому источнику свой тип. Этот тип сообщает Consult-OMNI, как собирать кандидатов из этого источника и объединять их с другими источниками. Тип может быть 'sync
, 'dynamic
» или 'async
.
'sync
: это синхронный источник, означающий, что когда Consult-omni вызывает функцию запроса для сбора кандидатов из этого источника, он вызывает ее синхронно (блокирует процесс Emacs) и ждет возвращаемого значения (ожидая список кандидатов или ноль). ). Например, это подходит для источников, которые просто запускают функцию elisp и быстро возвращают список, например buffer-list
. Асинхронный вызов этой функции практически не дает никакой выгоды, поскольку накладные расходы на асинхронное управление (таймеры и наблюдатели…), вероятно, будут стоить больше времени, чем простой вызов функции напрямую и синхронно.'dynamic
: Динамические источники — это те, которые будут полезны или требуют асинхронного вызова функции сбора elisp. Например, если для сбора элементов из источника требуется отправить HTTP-запрос на сервер и дождаться ответа, то следует использовать динамический тип, чтобы процесс Emacs не блокировался во время ожидания ответа. В этом случае функция запроса источника (функция, возвращающая элементы) должна принимать функцию обратного вызова, которая будет вызываться при поступлении ответа. Это, например, подходит для получения ответа от API веб-поиска, таких как API Google, Brave или OpenAI.'async
: асинхронные источники - это те, которые используют внешнюю программу командной строки и, следовательно, требуют создания процесса, получения выходных данных программы командной строки и их анализа для сбора кандидатов. Это подходит, например, для получения кандидатов из grep
или notmuch
, ....Механизм Consult-omni позволяет объединять несколько источников разных типов в одной команде путем объединения синхронных и асинхронных вызовов/процессов, так что пользователь может эффективно получать результаты поиска из различных источников практически в реальном времени (ожидание не требуется, кандидаты отображаются по мере их появления). приезжать).
Вы можете загрузить действия по отправке по умолчанию:
( require 'consult-omni-embark )
Действия по умолчанию позволяют вам открывать ссылки в браузере по умолчанию или в альтернативном браузере, а также копировать или вставлять заголовок и/или URL-адрес ссылок. Другие действия по запуску могут быть определены в соответствии с вашим конкретным рабочим процессом.
Пример можно посмотреть в видеоролике YouTube на сайте Consult-Web: 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. Я изо всех сил стараюсь предоставить документацию здесь, а также на страницах вики, и постараюсь помочь, когда это возможно, но прежде чем продолжить, поймите, что вы делаете все на свой страх и риск. Если вам нужен пример конфигурации, см. раздел *Пример конфигурации*. Вот некоторые подробные объяснения;
Чтобы использовать Consult-omni, вам нужен Emacs > 28.0 (более ранние версии я не тестировал), и вам нужна консультация. Хотя это единственные требования, я предлагаю вам прочитать остальную часть README. Я рекомендую некоторые другие пакеты и полезные конфигурации для различных настроек. Некоторые из этих дополнительных пакетов и настроек могут улучшить вашу работу с Consult-OMNI, поэтому вы также можете рассмотреть возможность их установки. Например, объединение Consult с другими пакетами, такими как vertico, orderless и Remember, может улучшить функциональность и удобство использования.
Consult-omni в настоящее время не присутствует в ELPA или MELPA. Поэтому вам необходимо установить его с помощью альтернативного нестандартного менеджера пакетов, такого как Straight.el, elpaca и т. д., или использовать установку вручную.
Чтобы установить Consult-omni с помощью Straight.el, вы можете использовать следующую команду. Обязательно загружайте Consult-omni после загрузки Consult (например, 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.
Вы можете выполнить поиск по ВСЕМ источникам по умолчанию, загрузив предоставленный модуль 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
).
Вот список текущих источников. Подробную информацию о том, как установить и использовать каждый источник, можно найти на вики-страницах (сейчас в разработке). Вы также можете посмотреть обучающее видео YouTube здесь: https://www.youtube.com/watch?v=wNH2E7iT__c.
Источник | Категория |
---|---|
Приложения | Настольные приложения |
Бинг | Веб-поисковая система |
Храбрый автопредложение | Завершение веб-слов/автопредложение |
Храбрый | Веб-поисковая система |
История браузера | История веб-браузера |
обратитесь к источникам буфера | Буферы Emacs, файлы, закладки,… |
расчет | Калькулятор Emacs |
чатGPT | Простые подсказки AI |
консультационные заметки | Местные заметки |
Словарь | Встроенный словарь Emacs |
доиорг | Академическая справка |
DuckDuckGo (ограниченный API) | Поисковые предложения |
эльфийская подача | Ленты (RSS, видео,…) |
ФД | Поиск локальных файлов с помощью команды fd |
находить | Поиск локальных файлов с помощью команды find |
GitHub | Поиск репозиториев GitHub с помощью команды gh |
Веб-поисковая система | |
Google Автопредложение | Завершение веб-слов/автопредложение |
grep | Поиск локальных файлов с помощью команды grep |
git-grep | Поиск локальных файлов Git с помощью команды grep |
рипгреп | Поиск локальных файлов с помощью команды rg |
рипгреп-все | Поиск локальных файлов с помощью команды rga |
gptel | ИИ-помощник |
оскорбительный | Интернет-видео (YouTube) |
буферы текстового поиска | Поиск текста в буферах Emacs |
найти | Поиск локальных файлов с помощью локальной команды |
мужчина | Поиск страниц руководства с помощью команды man |
mdfind | Поиск локальных файлов с помощью команды OSX mdfind |
му4е | Поиск писем |
Поиск заметок | Поиск в файлах локальных заметок |
немного | Поиск писем |
Нуми | Калькулятор с командой numi-cli/ от Numi) |
Повестка дня организации | Поиск пунктов повестки дня организации |
ПабМед | Академическая справка |
Скопус | Академическая справка |
StackOverflow | Форум сообщества |
Википедия | Энциклопедия |
Ютуб | Интернет-видео (YouTube) |
Consult-omni создан с идеей, что пользователь должен иметь возможность настраивать все в зависимости от своего сценария использования, поэтому ожидается, что пользователь научится настраивать этот пакет. Поэтому я рекомендую вам прочитать этот раздел и понять, как настроить пакет в соответствии с вашими потребностями и для вашего конкретного случая использования. В дополнение к этим настройкам некоторые источники имеют свои собственные переменные настройки и т. д., которые обсуждаются на вики-страницах (сейчас в разработке) и в этом руководстве 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
Это включит/выключит предварительный просмотр для всех источников Consult-OMNI. Рекомендуется установить для этого параметра значение 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
перестанет получать результаты из одного источника с помощью статических команд.
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-запрос)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, Wikipedia, …).
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest )
consult-omni-dynamic-input-debounce
В динамических командах процесс динамического сбора запускается только в том случае, если в consult-omni-dynamic-input-debounce
секунд не поступал новый ввод. Если вы печатаете медленно или думаете, что вам нужно время, чтобы подумать о том, что вы хотите найти, вы можете увеличить это число, чтобы не запускать поиск преждевременно, особенно если вы хотите избежать преждевременного запуска поисковых запросов в платных сервисах. По умолчанию это наследуется от встроенного значения input-debounce Consult, которое равно 0,5. Лично я считаю, что это слишком быстро для Consult-OMNI, потому что я не хочу, чтобы Consult-OMNI отправлял запрос в платный API OpenAI, пока я все еще набираю свой запрос, поэтому я замедляю его до 0,8–1 с.
( setq consult-omni-dynamic-input-debounce 0.8 )
consult-omni-dynamic-input-throttle
В динамических командах процесс динамического сбора запускается только каждые секунды consult-omni-dynamic-input-throttle
. Если вы используете службы API с ограниченным количеством запросов в секунду, вы можете увеличить это число, чтобы избежать ошибок. Я установил это значение в 2 раза больше моего значения input-debounce:
( setq consult-omni-dynamic-input-throttle 1.6 )
consult-omni-dynamic-refresh-delay
В динамических командах пользовательский интерфейс завершения обновляется только каждые секунды 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. Хотя существует несколько пакетов для веб-поиска (см. обсуждение в разделе пакет 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) не разглашаются.Это пакет с открытым исходным кодом, и я ценю отзывы, предложения, идеи и т. д. В этот пакет можно добавить множество функций или источников для улучшения рабочих процессов различных пользователей, поэтому, если у вас есть идеи, не стесняйтесь отправить проблема для запроса функции.
Мне бы хотелось видеть помощь от других участников как в улучшении/поддержании текущих источников/функций, так и в работе над новыми источниками или функциями. Если вы заинтересованы и хотите внести свой вклад в код, обратите внимание, что основная ветка в настоящее время стабильна (настолько стабильна, насколько может быть такая незавершенная работа), а ветка разработки находится в стадии разработки. Итак, начните с ветки разработки , чтобы получить последние незавершенные обновления, и создайте новую ветку с такими именами, как функция/название функции или исправление/проблема… Внесите изменения, а затем создайте новую выборку. попросите объединиться с веткой разработки , когда вы закончите вносить изменения.
Главное, имейте в виду, что я использую грамотный подход к программированию , при котором все попадает в единый источник истины Consult-omni.org , а затем запутывается в соответствующих файлах (например, Consult-omni.el). Если вы откроете запрос на включение, в котором вы напрямую редактировали файлы .el, я, скорее всего, не одобрю его, потому что он будет перезаписан позже, когда я выберу файл .org. Другими словами, не редактируйте файлы .el! редактируйте только файл .org и связывайтесь с файлами .el. Имейте в виду, что хотя в других сценариях грамотное программирование может не иметь особого смысла, в данном случае оно действительно помогает при добавлении новых исходников/функций путем копирования из других примеров (поскольку все находится в одном оргфайле), поэтому в данном случае Я настаиваю на использовании грамотного программирования.
Очевидно, что этот пакет был бы невозможен без великолепных пакетов консультаций и начала работы. Он также черпал вдохновение из других пакетов, включая, помимо прочего, предшественника Advisor-Web, а также Engine-mode, emacs-google-this, helm.
Кроме того, я хотел бы поблагодарить @karthink и @minad за их замечательные предложения, обсуждения, вклад и т. д. Этот пакет был бы невозможен без помощи @karthink в создании прототипов и идей (см. Consult-web-mini) и драгоценной поддержки @minad. комментарии и предложения.