consult-omni
consult-omni es un paquete para obtener resultados de búsqueda de una o varias fuentes personalizadas (motores de búsqueda web, asistentes de inteligencia artificial, base de datos elfeed, notas de organización, archivos locales, aplicaciones de escritorio, servidores de correo,…) directamente en el minibúfer de Emacs. Es un sucesor de consult-web, con características y funcionalidades ampliadas.
consult-omni proporciona envoltorios y macros en torno a la consulta, para que sea más fácil para los usuarios obtener resultados de diferentes fuentes y combinar fuentes locales y web en una búsqueda de estilo omnidireccional. En otras palabras, consult-omni permite obtener resultados de múltiples fuentes o completados dinámicamente al estilo de consulta en un minibúfer para una amplia gama de fuentes, incluidas funciones/paquetes de Emacs (por ejemplo, búferes de Emacs, archivos de organización, elfeed,...), programas de línea de comandos ( grep, find, gh,…), o motores de búsqueda web (Google, Brave, Bing,…).
consult-omni puede ser una alternativa gratuita de código abierto a otras herramientas de omnibúsqueda como Alfred o MacOS Spotlight. Proporciona una variedad de fuentes predeterminadas como ejemplos, pero la idea principal aquí es permanecer independiente de la fuente y proporcionar el conjunto de herramientas para que los usuarios definan sus propias fuentes/flujos de trabajo (también conocidos como complementos).
Aquí está la captura de pantalla obligatoria:
En la captura de pantalla anterior, uso un atajo de teclado para abrir un marco de Emacs y llamo a consult-omni
(similar a llamar a MacOS Spotlight) y busco el término "emacs", luego me muevo y miro vistas previas de diferentes fuentes, incluidas aplicaciones, gptel. , Valiente, Google, YouTube, elfeed, mu4e, ....
Aquí hay otra captura de pantalla que demuestra el uso de consult-omni como iniciador de aplicaciones:
Para obtener una explicación de las características y una comparación con otros paquetes, puede ver mis videos de YouTube, tanto para consult-web como para consult-omni a continuación:
Para cada fuente, puede tener comandos estáticos o dinámicos. Los comandos estáticos consultan el uso de una entrada y luego obtienen los resultados. Comandos dinámicos, completan dinámicamente a medida que el usuario escribe (muestran los resultados mientras el usuario escribe). Los comandos dinámicos se sienten un poco más intuitivos y modernos en 2024, pero por otro lado tienen la desventaja de enviar la consulta a los servidores varias veces, ¡especialmente si escribes lentamente! Dependiendo del proveedor de servicios y del modelo de API, es posible que desee evitar acceder al servidor con demasiada frecuencia (por ejemplo, para servicios que paga por consulta); por lo tanto, para ciertos servicios, un comando estático podría ser una mejor opción que el comando dinámico. Usando la macro consult-omni-define-source
, puede elegir crear estática, dinámica o ambas pasando nil
, t
o 'both
a la palabra clave :static
. A continuación se muestra un ejemplo del código fuente para crear comandos estáticos y dinámicos para 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 )
Aquí hay una captura de pantalla del comando interactivo ESTÁTICO para Wikipedia:
Aquí hay una captura de pantalla del comando interactivo DINÁMICO para Wikipedia:
De forma predeterminada, consult-omni proporciona dos comandos interactivos principales de múltiples fuentes.
consult-omni-multi
: Este es un comando DINÁMICO interactivo que utiliza múltiples fuentes, según lo definido por consult-omni-multi-sources
, y muestra los resultados en la finalización del minibúfer con finalización dinámica (los resultados se obtienen a medida que el usuario escribe). Aquí hay una captura de pantalla: consult-omni-multi-static
: este es un comando ESTÁTICO interactivo que utiliza múltiples fuentes, según lo definido por consult-omni-multi-sources
, y muestra los resultados al completar el minibúfer. Tenga en cuenta que consult-omni-multi-static no proporciona finalización dinámica, pero algunos pueden encontrar que usar esto es más intuitivo para limitar los resultados. El usuario proporciona un término de búsqueda y, una vez que se obtienen los resultados, al escribir en el minibúfer se reducirán los candidatos.Tenga en cuenta que, a diferencia del predecesor consult-web, consult-omni ya no proporciona otros comandos interactivos de múltiples fuentes (por ejemplo, búsqueda académica). Ahora depende del usuario definir dichos comandos para su flujo de trabajo personalizado. Por ejemplo, un usuario puede definir comandos interactivos separados para consultar fuentes web, frente a fuentes locales, mientras que otro usuario puede querer definir comandos interactivos para fuentes de conocimiento (referencias académicas, notas,...) frente a utilidades (aplicaciones, buffers, archivos,...). A continuación se proporcionan ejemplos de cómo definir nuevos comandos interactivos en la configuración avanzada aquí.
Se pueden pasar argumentos a los comandos interactivos dinámicos y se pueden limitar aún más los resultados utilizando una sintaxis similar al estilo de "división de Perl" en la búsqueda asincrónica de consulta.
Para limitar los resultados, necesita agregar #
(u otro carácter definido en consult-async-split-style
) después de la consulta de búsqueda. Por ejemplo escribiendo lo siguiente en el minibúfer:
#búsqueda web de emacs#github
Primero busca "búsqueda web de emacs" y luego usa "github" para limitar la búsqueda.
Además, también se pueden pasar argumentos a comandos dinámicos utilizando una sintaxis similar a la consult-grep
. Por ejemplo escribiendo lo siguiente en el minibúfer:
#cómo navegar por una URL en emacs --modelo gpt-3.5-turbo
pasa gpt-3.5-turbo
como valor para el argumento de palabra clave :model
a las funciones de back-end de todas las fuentes que obtienen resultados. Si alguna de esas fuentes acepta el argumento de palabra clave :model
, se les pasa el valor gpt-3.5-turbo
. Por esta razón, se recomienda utilizar siempre funciones que acepten cualquier argumento de palabra clave (también conocido como add &allow-other-keys
) para evitar errores cuando se les pasan palabras clave no existentes.
en lugar de usar --
, también puedes usar una palabra clave con dos puntos :
. Lo siguiente sería similar al ejemplo anterior:
#cómo navegar por una URL en emacs -- :modelo gpt-3.5-turbo
Cuando utilizamos la consulta, tratamos con diferentes tipos de fuentes, ya sean funciones elisp (por ejemplo, buffer-list
, re-search-forward
) o programas de línea de comandos (por ejemplo grep
, notmuch
, gh
, mu
,…). Devuelven una lista de candidatos, que a su vez pasan a completing--read
. Si bien consult proporciona una forma de combinar múltiples fuentes con consult--multi
, la capacidad de combinar fuentes de diferentes tipos (programa de línea de comandos con elisp, por ejemplo) es limitada. En consult-omni solucionamos esto creando algunos contenedores y maquinaria alrededor de funciones de consulta integradas y haciendo que cada fuente declare su tipo. Este tipo le indica a consult-omni cómo recopilar candidatos de esa fuente y combinarlos con otras fuentes. El tipo puede ser 'sync
, 'dynamic
o 'async
.
'sync
: esta es una fuente sincrónica, lo que significa que cuando consult-omni llama a la función de solicitud para recopilar candidatos de esta fuente, la llama sincrónicamente (bloquea el proceso de Emacs) y espera un valor devuelto (esperando una lista de candidatos o nulo). ). Esto es adecuado, por ejemplo, para fuentes que simplemente ejecutan una función elisp y devuelven una lista rápidamente como buffer-list
. Casi no se gana nada al llamar a esta función de forma asíncrona porque la sobrecarga del control asíncrono (temporizadores y observadores,...) probablemente costará más tiempo que simplemente llamar a la función de forma directa y sincrónica.'dynamic
: Las fuentes dinámicas son aquellas que se beneficiarían o requerirían llamar a la función elisp recopiladora de forma asincrónica. Por ejemplo, si recopilar elementos de una fuente requiere enviar una solicitud HTTP a un servidor y esperar la respuesta, entonces se debe usar un tipo dinámico, para que el proceso de Emacs no se bloquee mientras se espera la respuesta. En este caso, la función de solicitud para la fuente (la función que devuelve los elementos) debe tomar una función de devolución de llamada que se llamará cuando llegue la respuesta. Esto es, por ejemplo, adecuado para obtener respuestas de las API de búsqueda web como las API de Google, Brave u OpenAI.'async
: fuentes asincrónicas, son aquellas que utilizan un programa de línea de comando externo y, por lo tanto, requieren crear un proceso, obtener el resultado del programa de línea de comando y analizarlo para recopilar candidatos. Esto es adecuado, por ejemplo, para obtener candidatos de grep
, o notmuch
,...La maquinaria consult-omni permite combinar múltiples fuentes de diferentes tipos en un solo comando mediante la combinación de llamadas/procesos sincronizados y asíncronos para que el usuario pueda obtener de manera eficiente resultados de búsqueda de varias fuentes casi en tiempo real (no es necesario esperar, los candidatos se muestran a medida que llegar).
Puede cargar las acciones de embarque predeterminadas mediante;
( require 'consult-omni-embark )
Las acciones predeterminadas le permiten abrir los enlaces en el navegador predeterminado o alternativo y también copiar o insertar el título y/o la URL de los enlaces. Se pueden definir otras acciones de embarque según su propio flujo de trabajo específico.
Vea el vídeo de YouTube en consult-web para ver un ejemplo, aquí: https://youtu.be/7pDfyqBZwvo?t=4962.
Sin cadenas de documentos ni espacios en blanco, el código tiene menos de 1000 líneas y solo depende de la consulta y la recuperación de URL incorporada.
Sólo puedes cargar las piezas que necesitas. Por ejemplo, si todo lo que necesitas es una utilidad de autosugestión similar a helm-google-autosuggest
, entonces puedes usar una configuración mínima como esta:
( 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 ))
Tenga en cuenta que cada módulo (también conocido como cada fuente) agrega entre 100 y 200 líneas de código adicionales. Esto también significa agregar una nueva fuente, ¡solo necesita escribir un breve fragmento de código siguiendo esos ejemplos!
Muchas opciones de personalización tanto para las fuentes como para ejecutar acciones sobre los resultados. Se pueden añadir nuevas fuentes según se desee con diferente formato, diferentes acciones,…
La recopilación dinámica permite flujos de trabajo complejos sobre la marcha. Cambie los parámetros de consulta sobre la marcha pasando argumentos. Seleccione un conjunto aleatorio de resultados ad-hoc usando embarque y ejecute acciones de embarque en ellos. Esto también permite el procesamiento por lotes. Por ejemplo, para agregar una larga lista de resultados a una nota en modo organización para su posterior revisión (como se muestra en este video de YouTube: https://youtu.be/7pDfyqBZwvo?t=4774).
Antes de comenzar, asegúrese de comprender tres puntos:
consult-omni-sources
brindan una demostración básica para integrar diferentes servicios (como proveedores de búsqueda); sin embargo, dado que cada servicio viene con sus propios términos y condiciones (que pueden cambiar con el tiempo y variar según la ubicación). dependiendo de la ubicación), es difícil ofrecer soluciones integrales y mantenerlas en el tiempo. consult-omni es independiente de cómo conecta e integra otros servicios en su configuración (porque ni consult-omni ni Emacs recopilan ninguna información de los usuarios o su uso) y, por lo tanto, en última instancia, solo usted, el usuario, es responsable de configurar todo correctamente y comprender las consecuencias del uso (por ejemplo, costos de uso de API pagas) y asegurarse de mantenerse dentro de los límites de las leyes y regulaciones relevantes para su caso de uso (es decir, seguir los acuerdos de usuario de software, etc.). Por lo tanto, es importante que lea y comprenda cómo utilizar cada servicio, y también que comprenda qué sucede internamente cuando integra el servicio con consult-omni. Hago todo lo posible para proporcionar documentación aquí y en las páginas wiki, e intentaré ayudar cuando sea posible, pero antes de continuar, comprenda que lo hace todo bajo su propio riesgo. Si desea una configuración de ejemplo, consulte el complemento *Configuración de ejemplo*. Aquí hay una explicación detallada;
Para utilizar consult-omni, necesita Emacs >28.0 (no he probado versiones anteriores) y necesita consultar. Si bien estos son los únicos requisitos, le sugiero que lea el resto de este README. Recomiendo algunos otros paquetes y configuraciones útiles para diferentes configuraciones. Algunos de esos paquetes y configuraciones adicionales pueden mejorar su experiencia con consult-omni, por lo que es posible que desee considerar instalarlos también. Por ejemplo, combinar la consulta con otros paquetes como vertico, orderless y embarque puede mejorar la funcionalidad y la experiencia del usuario.
consult-omni no está actualmente en ELPA o MELPA. Por lo tanto, debe instalarlo utilizando un administrador de paquetes alternativo no estándar, como recto.el, elpaca,… o utilizar la instalación manual.
Para instalar consult-omni con Straight.el puede utilizar el siguiente comando. Asegúrese de cargar consult-omni después de cargar consult (por ejemplo, require 'consult
).
( straight-use-package
'(consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " )))
o si usas la macro use-package
con directamente, puedes hacer:
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " ))
:after consult)
También puedes bifurcar este repositorio y usar tu propio repositorio.
Clone este repositorio y asegúrese de que los archivos estén en su ruta de carga, como se describe en EmacsWiki.
Asegúrese de cargar consultar (por ejemplo, require 'consult
) antes de cargar consult-omni.
Puede buscar TODAS las fuentes predeterminadas cargando el módulo consult-omni-sources
proporcionado y luego llamando a la función consult-omni-sources-load-modules
:
( require 'consult-omni-sources )
(consult-omni-sources-load-modules)
Esto proporciona fuentes para algunos servicios populares y agrega una larga lista de comandos interactivos (búsqueda dinámica, búsqueda estática o ambas según la fuente). Con el tiempo espero agregar más servicios, con suerte también gracias a la contribución de la comunidad. Tenga en cuenta que estos también son buenos ejemplos para que aprenda cómo agregar sus propias fuentes o modificar las actuales para sus casos de uso específicos.
También puede cargar varias fuentes (pero no todas) configurando la lista consult-omni-sources-modules-to-load
y luego cargando llamando 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)
Esto limita las fuentes que consulta-omni carga SÓLO aquellas definidas en consult-omni-sources-modules-to-load
.
Alternativamente, puede cargar una única fuente simplemente solicitando el archivo correspondiente. Por ejemplo, para Wikipedia, puedes hacer:
( require 'consult-omni-sources )
( require 'consult-omni-wikipedia )
Esto agregaría comandos interactivos solo para buscar en Wikipedia (por ejemplo, consult-omni-wikipedia
y/o consult-omni-wikipedia-static
).
Aquí hay una lista de fuentes actuales. Para obtener detalles sobre cómo configurar y utilizar cada fuente, consulte las páginas wiki (ahora en construcción). También puedes ver el vídeo tutorial de YouTube aquí: https://www.youtube.com/watch?v=wNH2E7iT__c
Fuente | Categoría |
---|---|
Aplicaciones | Aplicaciones de escritorio |
Bing | Motor de búsqueda web |
Valiente sugerencia automática | Completar palabras web/sugerencia automática |
Corajudo | Motor de búsqueda web |
Historial del navegador | Historial del navegador web |
consultar fuentes de buffer | Búfers, archivos, marcadores,… de Emacs |
cálculo | Calculadora Emacs |
chatGPT | Indicaciones simples de IA |
notas de consulta | Notas locales |
Diccionario | Diccionario incorporado de Emacs |
doiorg | Referencia Académica |
DuckDuckGo (API limitada) | Sugerencias de búsqueda |
alimentación de elfos | Feeds (RSS, vídeos,…) |
fd | Buscar archivos locales con el comando fd |
encontrar | Buscar archivos locales con el comando buscar |
GitHub | Buscar repositorios de GitHub con el comando gh |
Motor de búsqueda web | |
Sugerencia automática de Google | Completar palabras web/sugerencia automática |
grep | Buscar archivos locales con el comando grep |
gitgrep | Buscar archivos Git locales con el comando grep |
ripgrep | Buscar archivos locales con el comando rg |
ripgrep-todo | Buscar archivos locales con el comando rga |
gptel | Asistente de IA |
Odioso | Vídeos en línea (YouTube) |
búsqueda de texto en buffers | Buscar texto en buffers de Emacs |
localizar | Buscar archivos locales con comando local |
hombre | Buscar páginas del manual con el comando man |
mdfind | Buscar archivos locales con el comando mdfind de OSX |
mu4e | Buscar correos electrónicos |
Búsqueda de notas | Buscar archivos de notas locales |
poco | Buscar correos electrónicos |
numí | Calculadora con comando numi-cli/ de Numi) |
Agenda de la organización | Buscar elementos de la agenda de la organización |
PubMed | Referencia Académica |
Scopus | Referencia Académica |
Desbordamiento de pila | Foro comunitario |
Wikipedia | Enciclopedia |
YouTube | Vídeos en línea (YouTube) |
consult-omni se creó con la idea de que el usuario debería poder personalizar todo según su caso de uso, por lo que se espera que el usuario aprenda a configurar este paquete. Por lo tanto, le recomiendo que lea esta sección y comprenda cómo configurar el paquete de acuerdo con sus necesidades y para su caso de uso específico. Además de estas configuraciones, algunas fuentes tienen sus propias variables de personalización, etc., lo cual se analiza en las páginas wiki (ahora en construcción) y en este tutorial de YouTube: https://www.youtube.com/watch?v=wNH2E7iT__c.
Se proporcionan las siguientes variables personalizables:
consult-omni-sources-modules-to-load
Lista de módulos a cargar. Al configurar esto antes de llamar consult-omni-sources-load-modules
, puede limitar los módulos (fuentes) que se cargan y evitar errores debido a requisitos faltantes para ciertas fuentes. Por ejemplo, simplemente cargando Wikipedia:
( setq consult-omni-sources-modules-to-load ( list 'consult-omni-wikipedia ))
consult-omni-default-browse-function
Función de exploración predeterminada para abrir URL. Esto se puede configurar para la función de navegador externo mediante:
( setq consult-omni-default-browse-function 'browse-url )
consult-omni-alternate-browse-function
Función de exploración secundaria para abrir URL. Por ejemplo, esto se puede configurar en eww o en algunos otros navegadores para acceder rápidamente a un navegador alternativo con acciones de inicio.
( setq consult-omni-alternate-browse-function 'eww-browse-url )
consult-omni-default-preview-function
Función predeterminada que se utilizará para obtener una vista previa de los enlaces. Por ejemplo, esto se puede configurar en eww:
( setq consult-omni-default-preview-function # 'eww-browse-url )
o xwidegt-webkit:
( setq consult-omni-default-preview-function # 'xwidget-webkit-browse-url )
consult-omni-show-preview
Esto activa o desactiva las vistas previas de todas las fuentes de consulta omnidireccional. Se recomienda configurar esto en t
y usar preview-key
para controlar las vistas previas por fuente.
consult-omni-preview-key
Esta es la clave de vista previa predeterminada. Una buena opción podría ser "Co".
( setq consult-omni-preview-key " C-o " )
consult-omni-default-format-candidate
Esta variable almacena una función que se llama para formatear los candidatos (en cualquier fuente que no tenga una función de formato explícita). consult-omni proporciona dos funciones de ejemplo:
consult-omni--simple-format-candidate
muestra el mosaico sin anotaciones marginales en minibufferconsult-omni--highlight-format-candidate
muestra el candidato con anotaciones marginales y también resalta el término de búsqueda. consult-omni-default-count
De forma predeterminada, consult-omni recupera solo esta cantidad de resultados por fuente. Se recomienda mantener este número en un número bajo (por ejemplo, de 5 a 10) para mantener el rendimiento rápido. El valor predeterminado está establecido en 5 porque hoy en día, para la mayoría de los casos de uso cotidianos, probablemente no necesitarás más que los 5 resultados principales.
( setq consult-omni-default-count " 5 " )
Tenga en cuenta que con los comandos dinámicos de consult-omni, siempre puede aumentar el número pasando argumentos a -n
, --count
, :n
o :count
(por ejemplo, escribiendo search term -- -n 30
, puede recuperar hasta 30 resultados.
consult-omni-default-page
Esto es similar a ir a la página 2, 3,…,N en una página de resultados de búsqueda clásica. Si se establece en N, los primeros resultados (N * recuento/página) se omiten y se muestra la siguiente página de resultados. Se recomienda mantener esto como predeterminado, 0, para ver los mejores resultados.
Tenga en cuenta que con los comandos dinámicos de consult-omni, siempre puede cambiar la página pasando valores a los argumentos -p
, --page
, :p
o :page
(por ejemplo, escribiendo search term -- -p 2
, Puede obtener la página 2.
consult-omni-default-timeout
Tiempo máximo en segundos antes de que consult-omni
deje de buscar resultados de una única fuente en comandos ESTÁTICOS .
consult-omni-url-use-queue
Un booleano, ya sea para usar url-queue
o no.
consult-omni-url-queue-parallel-processes
Número de procesos url-queue
que se ejecutan en paralelo.
consult-omni-url-queue-timeout
Tiempo máximo en segundos que puede vivir un único trabajo url-queue
antes de darse por vencido.
consult-omni-log-buffer-name
Nombre del búfer para registrar información, que es principalmente útil para la depuración.
consult-omni-log-level
Esta variable controla cómo consult-omni registra información o muestra errores. Puede ser nil
, 'info
o 'debug
, en el orden de registro/mostración de más detalles.
consult-omni-group-by
Este es el campo que se utiliza para agrupar los resultados. De forma predeterminada, los resultados se agrupan por el nombre de la fuente. Pero esto se puede cambiar para lograr diversos comportamientos de agrupación. Si se establece en nil
, los resultados no se agrupan. También se puede configurar para otras propiedades de los candidatos (por ejemplo :url
, :title
, :domain
,…)
( setq consult-omni-group-by :source )
consult-omni-multi-sources
Esta es una lista de cadenas de nombres de fuentes (por ejemplo '("Google", "Wikipedia", "chatGPT")
) que se utilizarán en los comandos consult-omni-multi
y consult-omni-multi-static
(ver arriba para descripción).
consult-omni-highlight-matches-in-minibuffer
Si consult-omni resalta las coincidencias del término de búsqueda en los candidatos del minibúfer. Esto es útil para resaltar la relevancia de los resultados de la búsqueda.
consult-omni-highlight-matches-in-file
Si consult-omni resalta las coincidencias del término de búsqueda en los archivos (por ejemplo, en las vistas previas o al abrir archivos). Esto es útil para encontrar coincidencias del término de búsqueda después de abrir los archivos de destino.
consult-omni-default-interactive-command
Esta es una característica conveniente para vincular su comando interactivo consult-omni favorito al comando llamado consult-omni
, de modo que sea más fácil de recordar y encontrar cuando llama Mx
. Puede vincularlo a uno de los comandos interactivos (como consult-omni-multi
o consult-omni-multi-static
) o puede vincularlo a un comando de fuente única (por ejemplo, consult-omni-google
, consult-omni-google-static
, consult-omni-google-wikipedia
,…) o, alternativamente, puede definir su propio comando personalizado (fuente única o múltiple) y usarlo en su lugar.
consult-omni-http-retrieve-backend
Esta variable controla qué back-end utiliza consult-omni para las solicitudes HTTP. consult-omni admite 3 backends diferentes:
url-retrieve
incorporadarequest
(ver solicitud de emacs)plz
(ver plz.el) Por ejemplo, para cambiar el back-end a plz
, puedes hacer:
( setq consult-omni-http-retrieve-backend 'plz )
consult-omni-default-autosuggest-command
Comando de sugerencia automática predeterminado. consult-omni proporciona dos ejemplos con consult-omni-dynamic-brave-autosuggest
y consult-omni-dynamic-google-autosuggest
, pero también puede definir otros comandos personalizados de sugerencias automáticas de otras fuentes (por ejemplo, google, Wikipedia,…)
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest )
consult-omni-dynamic-input-debounce
En los comandos dinámicos, el proceso de recopilación dinámica se inicia solo cuando no ha habido nuevas entradas durante los segundos de consult-omni-dynamic-input-debounce
. Si escribe lento o cree que necesita tiempo para pensar en lo que desea buscar, es posible que desee aumentar este número, para no realizar búsquedas prematuramente, especialmente si desea evitar la ejecución prematura de términos de búsqueda en servicios pagos. De forma predeterminada, esto hereda del valor de rebote de entrada integrado de la consulta, que es 0,5. Personalmente, lo encuentro demasiado rápido para consult-omni porque no quiero que consult-omni envíe una consulta a la API OpenAI paga mientras todavía estoy escribiendo mi consulta, así que la reduzco a 0,8 - 1 s.
( setq consult-omni-dynamic-input-debounce 0.8 )
consult-omni-dynamic-input-throttle
En los comandos dinámicos, el proceso de recopilación dinámica se inicia solo cada segundos consult-omni-dynamic-input-throttle
. Si utiliza servicios API que tienen un número limitado de consultas por segundo, es posible que desee aumentar este número para evitar errores. Configuré esto en 2 veces mi valor de rebote de entrada:
( setq consult-omni-dynamic-input-throttle 1.6 )
consult-omni-dynamic-refresh-delay
En los comandos dinámicos, la interfaz de usuario de finalización solo se actualiza cada segundo consult-omni-dynamic-refresh-delay
. Probablemente quieras ejecutar esto tan rápido como 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))))
Hasta donde yo sé, ningún otro paquete de Emacs proporciona la funcionalidad y versatilidad de consult-omni. Si bien existen varios paquetes para búsquedas web (consulte la discusión en el paquete consultar-web), que yo sepa, no existe ningún paquete de búsqueda omnidireccional.
Fuera de Emacs, existen, por supuesto, peajes como MacOS Spotlight y Alfred, que proporcionan utilidades de omnibúsqueda, pero en comparación con consult-omni
carecen de versatilidad y personalización.
Para informar un error, primero verifique si ya está reportado en el *rastreador de problemas* y vea si existe una solución o agregue comentarios y discusiones relevantes sobre el mismo problema. De lo contrario, presente un nuevo problema siguiendo estos pasos:
consult
como url-retrieve
(u otros comandos relevantes) funcionen como se esperaba.emacs -Q
), instale la última versión de consult-omni (y sus dependencias) sin ninguna configuración u otros paquetes y vea si el problema persiste.Mx toggle-debug-on-error
) e incluya el contenido del seguimiento en su informe.consult-omni-url-retrieve-sync
), puede cambiar consult-omni-log-level
a 'debug
e inspeccionar el búfer de registro (búfer oculto llamado " **consult-omni-log**” u otro nombre establecido en consult-omni-log-buffer-name
). Si elige incluir esta información en su problema, asegúrese de que la información personal y los secretos (como las claves API) no estén expuestos.Este es un paquete de código abierto y agradezco comentarios, sugerencias, ideas, etc. Hay muchas funcionalidades o fuentes que se pueden agregar a este paquete para mejorar los flujos de trabajo de diferentes usuarios, así que si tiene algunas ideas, no dude en presentar una problema para una solicitud de función.
Me encantaría ver ayuda de otros contribuyentes tanto para mejorar/mantener las fuentes/funciones actuales como para trabajar en nuevas fuentes o funciones. Si está interesado y desea contribuir al código, tenga en cuenta que la rama principal actualmente es estable (tan estable como puede serlo un trabajo en progreso como este) y la rama de desarrollo es el trabajo en progreso actual. Entonces, comience desde la rama de desarrollo para obtener las últimas actualizaciones del trabajo en progreso y cree una nueva rama con nombres como característica/nombre de la característica o solución/problema... Realice las ediciones y luego cree una nueva extracción. Solicite volver a fusionarse con la rama de desarrollo cuando haya terminado con sus ediciones.
Es importante tener en cuenta que estoy utilizando un enfoque de programación alfabetizado en el que todo va a una única fuente de confianza , consult-omni.org , y luego se enreda en los archivos apropiados (por ejemplo, consult-omni.el). Si abre una solicitud de extracción en la que editó directamente los archivos .el, probablemente no la aprobaré porque se sobrescribirá más tarde cuando me enrede con el archivo .org. En otras palabras, ¡no edite los archivos .el! solo edite el archivo .org y conéctelo a los archivos .el. Tenga en cuenta que, si bien la programación alfabetizada puede no tener mucho sentido en otros escenarios, en este caso, realmente ayuda a agregar nuevas fuentes/características copiando de otros ejemplos (ya que todo está en un archivo de organización), por lo tanto, en este caso Insisto en utilizar la programación alfabetizada.
Obviamente este paquete no hubiera sido posible sin los fabulosos paquetes de consulta y embarque. También se inspiró en otros paquetes, incluidos, entre otros, el predecesor Counsel-web, así como Engine-mode, emacs-google-this y helm.
Además, me gustaría agradecer a @karthink y a @minad por sus fabulosas sugerencias, debates, contribuciones, etc. Este paquete no habría sido posible sin la ayuda de @karthink en la creación de prototipos e ideas (consulte consult-web-mini) y el valioso apoyo de @minad. comentarios y sugerencias.