consult-omni
consult-omni é um pacote para obter resultados de pesquisa de uma ou várias fontes personalizadas (mecanismos de pesquisa na web, assistentes de IA, banco de dados elfeed, notas organizacionais, arquivos locais, aplicativos de desktop, servidores de e-mail,…) diretamente no minibuffer Emacs. É um sucessor do consult-web, com recursos e funcionalidades ampliadas.
consult-omni fornece wrappers e macros em torno de consulta, para tornar mais fácil para os usuários obter resultados de diferentes fontes e combinar fontes locais e da web em uma pesquisa de estilo omni. Em outras palavras, consult-omni permite obter resultados de múltiplas fontes ou concluídos dinamicamente no estilo de consulta em minibuffer para uma ampla gama de fontes, incluindo funções/pacotes Emacs (por exemplo, buffers Emacs, arquivos org, elfeed,…), programas de linha de comando ( grep, find, gh,…) ou motores de busca na web (Google, Brave, Bing,…).
consult-omni pode ser uma alternativa gratuita de código aberto a outras ferramentas de pesquisa omni, como Alfred ou MacOS Spotlight. Ele fornece uma variedade de fontes padrão como exemplos, mas a ideia principal aqui é permanecer agnóstico em relação à fonte e fornecer o conjunto de ferramentas para os usuários definirem suas próprias fontes/fluxos de trabalho (também conhecidos como plug-ins).
Aqui está a captura de tela obrigatória:
Na captura de tela acima, eu uso um atalho de tecla para abrir um quadro Emacs e chamo consult-omni
(semelhante a chamar o destaque do MacOS) e procuro o termo “emacs”, depois movo e vejo visualizações de diferentes fontes, incluindo aplicativo, gptel , Bravo, Google, YouTube, elfeed, mu4e, ....
Aqui está outra captura de tela demonstrando o uso do consult-omni como inicializador de aplicativos:
Para explicação dos recursos e comparação com alguns outros pacotes, você pode assistir meus vídeos no YouTube, tanto para consulta-web quanto para consulta-omni abaixo:
Para cada fonte, você pode ter comandos estáticos ou dinâmicos. Comandos estáticos consultam o uso de uma entrada e, em seguida, buscam os resultados. Comandos dinâmicos, realizam o preenchimento dinâmico conforme o usuário digita (mostra os resultados enquanto o usuário digita). Os comandos dinâmicos parecem um pouco mais intuitivos e modernos em 2024, mas por outro lado têm a desvantagem de enviar a consulta aos servidores várias vezes, especialmente se você digitar devagar! Dependendo do provedor de serviços e do modelo de API, você pode evitar acessar o servidor com muita frequência (por exemplo, para serviços que você paga por consulta); portanto, para determinados serviços, um comando estático pode ser uma escolha melhor do que o comando dinâmico. Usando a macro consult-omni-define-source
, você pode optar por criar estática, dinâmica ou ambas passando nil
, t
ou 'both
para a palavra-chave :static
. Aqui está um exemplo do código-fonte para criar comandos estáticos e dinâmicos para pesquisa 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 )
Aqui está uma captura de tela do comando interativo STATIC para Wikipedia:
Aqui está uma captura de tela do comando interativo DYNAMIC para Wikipedia:
Por padrão, o consult-omni fornece dois comandos principais interativos de múltiplas fontes.
consult-omni-multi
: Este é um comando DYNAMIC interativo que usa múltiplas fontes, conforme definido por consult-omni-multi-sources
, e mostra os resultados na conclusão do minibuffer com conclusão dinâmica (os resultados são buscados conforme o usuário digita). Aqui está uma captura de tela: consult-omni-multi-static
: Este é um comando STATIC interativo que usa múltiplas fontes, conforme definido por consult-omni-multi-sources
e mostra os resultados na conclusão do minibuffer. Observe que consult-omni-multi-static não fornece conclusão dinâmica, mas alguns podem achar que isso é mais intuitivo para restringir os resultados. O usuário fornece um termo de pesquisa e, uma vez recuperados os resultados, digitar no minibuffer restringirá os candidatos.Observe que, diferentemente do antecessor consult-web, o consult-omni não fornece mais outros comandos interativos de múltiplas fontes (por exemplo, pesquisa acadêmica). Agora cabe ao usuário definir esses comandos para seu fluxo de trabalho personalizado. Por exemplo, um usuário pode definir comandos interativos separados para consultar fontes da web, versus fontes locais, enquanto outro usuário pode querer definir comandos interativos para fontes de conhecimento (referências acadêmicas, notas,…) versus utilitários (aplicativos, buffers, arquivos,…). Exemplos de como definir novos comandos interativos são fornecidos abaixo na configuração avançada aqui.
Os argumentos podem ser passados para os comandos interativos dinâmicos e restringir ainda mais os resultados pode ser feito usando uma sintaxe semelhante ao estilo “divisão Perl” na pesquisa assíncrona de consulta.
Para restringir os resultados, você precisa adicionar #
(ou outro caractere definido em consult-async-split-style
) após a consulta de pesquisa. Por exemplo, digitando o seguinte no minibuffer:
#pesquisa na web do emacs#github
Primeiro pesquisa por “emacs web search” e depois usa “github” para restringir.
Além disso, os argumentos também podem ser passados para comandos dinâmicos usando sintaxe semelhante à consult-grep
. Por exemplo, digitando o seguinte no minibuffer:
#como navegar por uma URL no emacs --model gpt-3.5-turbo
passa gpt-3.5-turbo
como o valor do argumento da palavra-chave :model
para as funções de back-end de todas as fontes que buscam resultados. Se alguma dessas fontes aceitar o argumento da palavra-chave :model
, o valor gpt-3.5-turbo
será passado para eles. Por esse motivo, é recomendável sempre usar funções que aceitem quaisquer argumentos de palavras-chave (também conhecidas como add &allow-other-keys
) para evitar erros quando palavras-chave inexistentes forem passadas para elas.
em vez de usar --
, você também pode usar uma palavra-chave com dois pontos :
. O seguinte seria semelhante ao exemplo acima:
#como navegar por uma URL no emacs -- :model gpt-3.5-turbo
Ao usar consulta, lidamos com diferentes tipos de fontes, sejam funções elisp (por exemplo, buffer-list
, re-search-forward
) ou programas de linha de comando (por exemplo grep
, notmuch
, gh
, mu
, …). Eles retornam uma lista de candidatos, que por sua vez são passados para completing--read
. Embora consult forneça uma maneira de combinar múltiplas fontes com consult--multi
, a capacidade de combinar fontes de diferentes tipos (programa de linha de comando com elisp, por exemplo) é limitada. No consult-omni resolvemos isso criando alguns wrappers e máquinas em torno de funções de consulta integradas e fazendo com que cada fonte declare seu tipo. Este tipo informa ao consult-omni como coletar candidatos daquela fonte e combiná-los com outras fontes. O tipo pode ser 'sync
, 'dynamic
ou 'async
.
'sync
: Esta é uma fonte síncrona, o que significa que quando consult-omni chama a função de solicitação para coletar candidatos desta fonte, ele a chama de forma síncrona (bloqueia o processo Emacs) e espera por um valor retornado (esperando uma lista de candidatos ou nulo ). Isto é adequado, por exemplo, para fontes que simplesmente executam uma função elisp e retornam uma lista rapidamente como buffer-list
. Quase não há ganho em chamar esta função de forma assíncrona porque a sobrecarga do controle assíncrono (temporizadores e observadores,…) provavelmente custará mais tempo do que apenas chamar a função direta e sincronicamente.'dynamic
: Fontes dinâmicas são aquelas que se beneficiariam ou exigiriam a chamada da função de coleta do elisp de forma assíncrona. Por exemplo, se a coleta de itens de uma fonte requer o envio de uma solicitação HTTP a um servidor e a espera pela resposta, então um tipo dinâmico deve ser usado, para que o processo Emacs não seja bloqueado enquanto aguarda a resposta. Neste caso a função de solicitação para a origem (a função que retorna os itens) deve receber uma função de retorno de chamada que será chamada quando a resposta chegar. Isso é adequado, por exemplo, para obter respostas de APIs de pesquisa na web, como as APIs do Google, Brave ou OpenAI.'async
: fontes assíncronas, são aquelas que usam um programa de linha de comando externo e, portanto, exigem a criação de um processo, obtém a saída do programa de linha de comando e analisa-o para coletar candidatos. Isto é, por exemplo, adequado para obter candidatos de grep
, or notmuch
, ....O mecanismo consult-omni permite combinar múltiplas fontes de diferentes tipos em um comando, combinando chamadas/processos sincronizados e assíncronos para que o usuário possa obter com eficiência resultados de pesquisa de várias fontes quase em tempo real (sem necessidade de espera, os candidatos são mostrados como eles chegar).
Você pode carregar as ações de embarque padrão;
( require 'consult-omni-embark )
As ações padrão permitem abrir os links no navegador padrão ou alternativo e também copiar ou inserir o título e/ou URL dos links. Outras ações de embarque podem ser definidas de acordo com seu fluxo de trabalho específico.
Veja o vídeo do YouTube em consult-web para ver um exemplo, aqui: https://youtu.be/7pDfyqBZwvo?t=4962.
Sem strings de documentos e espaços em branco, o código tem menos de 1000 linhas e depende apenas de consulta e recuperação de URL integrada.
Você só pode carregar as peças necessárias. Por exemplo, se tudo que você precisa é de um utilitário de sugestão automática semelhante a helm-google-autosuggest
, você pode usar uma configuração 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 ))
Observe que cada módulo (também conhecido como cada fonte) adiciona 100-200 linhas extras de código. Isso também significa adicionar uma nova fonte, você só precisa escrever um pequeno trecho de código seguindo esses exemplos!
Muitas opções de customização tanto para fontes quanto para execução de ações nos resultados. Novas fontes podem ser adicionadas como desejar com diferentes formatos, diferentes ações,…
A coleta dinâmica permite fluxos de trabalho complexos em tempo real. Altere os parâmetros de consulta rapidamente, passando argumentos. Selecione um conjunto aleatório de resultados ad-hoc usando embarcar e execute ações de embarcar neles. Isso também permite o processamento em lote. Por exemplo, para adicionar uma longa lista de resultados a uma nota de modo organizacional para revisão posterior (conforme mostrado neste vídeo do YouTube: https://youtu.be/7pDfyqBZwvo?t=4774).
Antes de começar, certifique-se de entender três pontos:
consult-omni-sources
fornecem uma demonstração básica para integração de diferentes serviços (como provedores de pesquisa), porém, como cada serviço vem com seus próprios termos e condições (que podem mudar com o tempo e variar de acordo com o local dependendo da localização), é difícil fornecer soluções abrangentes e mantê-las ao longo do tempo. O consult-omni é agnóstico em relação a como você conecta e integra outros serviços em sua configuração (porque nem o consult-omni nem o Emacs coletam qualquer informação dos usuários ou de seu uso) e, portanto, em última análise, somente você, o usuário, é responsável por configurar tudo corretamente e compreender as consequências do uso (por exemplo, custos de uso de APIs pagas) e garantir que permanece dentro dos limites das leis e regulamentos relevantes para o seu caso de uso (ou seja, seguir os contratos de usuário do software, etc.). Portanto, é importante que você leia e entenda como utilizar cada serviço, e também entenda o que acontece nos bastidores quando você integra o serviço ao consult-omni. Eu tento o meu melhor para fornecer documentação aqui, bem como nas páginas wiki, e tentarei ajudar quando possível, mas antes de prosseguir, entenda que você faz tudo por sua própria conta e risco. Se você quiser um exemplo de configuração, consulte Drop-in *Example Config*. Aqui está uma explicação detalhada;
Para usar o consult-omni, você precisa do Emacs >28.0 (não testei versões anteriores) e precisa do consult. Embora este seja o único requisito, sugiro que você leia o restante deste README. Eu recomendo alguns outros pacotes e configurações úteis para diferentes configurações. Alguns desses pacotes e configurações extras podem melhorar sua experiência com o consult-omni, portanto, você pode considerar instalá-los também. Por exemplo, combinar a consulta com outros pacotes, como vertico, orderless e embarcar, pode melhorar a funcionalidade e também a experiência do usuário.
consult-omni não está atualmente no ELPA ou MELPA. Portanto, você precisa instalá-lo usando um gerenciador de pacotes alternativo não padrão, como straight.el, elpaca,… ou usar a instalação manual.
Para instalar o consult-omni com straight.el você pode usar o seguinte comando. Certifique-se de carregar o consult-omni após carregar o consult (por exemplo, require 'consult
).
( straight-use-package
'(consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " )))
ou se você usar a macro use-package
com direto, você pode fazer:
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " ))
:after consult)
Você também pode bifurcar este repositório e usar seu próprio repositório.
Clone este repositório e certifique-se de que os arquivos estejam no caminho de carregamento, conforme descrito no EmacsWiki.
Certifique-se de carregar o consult (por exemplo, require 'consult
) antes de carregar o consult-omni.
Você pode pesquisar TODAS as fontes padrão carregando o módulo consult-omni-sources
fornecido e, em seguida, chamando a função consult-omni-sources-load-modules
:
( require 'consult-omni-sources )
(consult-omni-sources-load-modules)
Isto fornece fontes para alguns serviços populares e adiciona uma longa lista de comandos interativos (pesquisa dinâmica, pesquisa estática ou ambas, dependendo da fonte). Com o tempo, espero adicionar mais serviços, espero que também através da contribuição da comunidade. Observe que esses também são bons exemplos para você aprender como adicionar suas próprias fontes ou ajustar as atuais para seus casos de uso específicos.
Você também pode carregar várias fontes (mas não todas) definindo a lista consult-omni-sources-modules-to-load
e depois carregando chamando 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)
Isso limita as fontes que o consult-omni carrega APENAS aquelas definidas em consult-omni-sources-modules-to-load
.
Alternativamente, você pode carregar uma única fonte exigindo apenas o arquivo correspondente. Por exemplo, para a Wikipedia, você pode fazer:
( require 'consult-omni-sources )
( require 'consult-omni-wikipedia )
Isso adicionaria comandos interativos apenas para pesquisar na Wikipédia (por exemplo, consult-omni-wikipedia
e/ou consult-omni-wikipedia-static
).
Aqui está uma lista de fontes atuais. Para obter detalhes sobre como definir e usar cada fonte, consulte as páginas wiki (em construção agora). Você também pode assistir ao vídeo do tutorial do YouTube aqui: https://www.youtube.com/watch?v=wNH2E7iT__c
Fonte | Categoria |
---|---|
Aplicativos | Aplicativos de desktop |
Mecanismo de pesquisa na web | |
Admirável AutoSuggest | Completação de Web Word/AutoSuggest |
Corajoso | Mecanismo de pesquisa na web |
Histórico do navegador | Histórico do navegador da web |
consulte fontes de buffer | Buffers, arquivos, marcadores do Emacs,… |
cálculo | Calculadora Emacs |
chatGPT | Solicitações simples de IA |
notas de consulta | Notas locais |
Dicionário | Dicionário integrado do Emacs |
doiorg | Referência Acadêmica |
DuckDuckGo (API limitada) | Sugestões de pesquisa |
Elfeed | Feeds (RSS, vídeos,…) |
fd | Pesquise arquivos locais com o comando fd |
encontrar | Pesquise arquivos locais com o comando find |
GitHub | Pesquise repositórios GitHub com comando gh |
Mecanismo de pesquisa na web | |
Sugestão automática do Google | Completação de Web Word/AutoSuggest |
grep | Pesquise arquivos locais com o comando grep |
git-grep | Pesquise arquivos Git locais com o comando grep |
ripgrep | Pesquise arquivos locais com o comando rg |
ripgrep-tudo | Pesquise arquivos locais com comando rga |
gptel | Assistente de IA |
Invejoso | Vídeos on-line (YouTube) |
buffers de pesquisa de texto | Pesquisar texto em buffers Emacs |
localizar | Pesquise arquivos locais com comando local |
homem | Pesquisar páginas de manual com comando man |
encontrar md | Pesquise arquivos locais com o comando OSX mdfind |
mu4e | Pesquisar e-mails |
Pesquisa de notas | Pesquisar arquivos de notas locais |
não muito | Pesquisar e-mails |
Numi | Calculadora com numi-cli/ comando do Numi) |
Agenda da organização | Pesquisar itens da agenda da organização |
PubMed | Referência Acadêmica |
Escopo | Referência Acadêmica |
StackOverflow | Fórum da comunidade |
Wikipédia | Enciclopédia |
YouTube | Vídeos on-line (YouTube) |
consult-omni foi construído com a ideia de que o usuário deve ser capaz de customizar tudo com base em seu caso de uso, portanto espera-se que o usuário aprenda como configurar este pacote. Portanto, recomendo que você leia esta seção e entenda como configurar o pacote de acordo com suas necessidades e para seu caso de uso específico. Além dessas configurações, algumas fontes têm suas próprias variáveis de personalização, etc., o que é discutido nas páginas wiki (em construção agora) e neste tutorial do YouTube: https://www.youtube.com/watch?v=wNH2E7iT__c.
As seguintes variáveis personalizáveis são fornecidas:
consult-omni-sources-modules-to-load
Lista de módulos para carregar. Ao definir isso antes de chamar consult-omni-sources-load-modules
, você pode limitar os módulos (fontes) que são carregados e evitar erros devido à falta de requisitos para determinadas fontes. Por exemplo, apenas para carregar a Wikipedia:
( setq consult-omni-sources-modules-to-load ( list 'consult-omni-wikipedia ))
consult-omni-default-browse-function
Função de navegação padrão para abertura de URLs. Isso pode ser definido para a função de navegador externo por:
( setq consult-omni-default-browse-function 'browse-url )
consult-omni-alternate-browse-function
Função de navegação secundária para abertura de URLs. Isso pode, por exemplo, ser definido como eww ou alguns outros navegadores para acesso rápido a um navegador alternativo com ações de embarque.
( setq consult-omni-alternate-browse-function 'eww-browse-url )
consult-omni-default-preview-function
Função padrão a ser usada para visualizar links. Isso pode, por exemplo, ser definido como eww:
( setq consult-omni-default-preview-function # 'eww-browse-url )
ou xwidegt-webkit:
( setq consult-omni-default-preview-function # 'xwidget-webkit-browse-url )
consult-omni-show-preview
Isso ativa/desativa as visualizações para todas as fontes consult-omni. Recomenda-se definir isso como t
e usar preview-key
para controlar as visualizações por fonte.
consult-omni-preview-key
Esta é a chave de visualização padrão. Uma boa escolha pode ser “Co”.
( setq consult-omni-preview-key " C-o " )
consult-omni-default-format-candidate
Esta variável a armazena uma função que é chamada para formatar os candidatos (em qualquer fonte que não possua uma função de formatação explícita). consult-omni fornece dois exemplos de funções:
consult-omni--simple-format-candidate
mostra o bloco sem anotação de marginalia no minibufferconsult-omni--highlight-format-candidate
mostra o candidato com anotação marginal e também destaca o termo de pesquisa. consult-omni-default-count
Por padrão, o consult-omni recupera apenas esse número de resultados por origem. Recomenda-se manter um número baixo (por exemplo, 5 a 10) para manter o desempenho rápido. O padrão é definido como 5 porque hoje em dia, para a maioria dos casos de uso diários, você provavelmente não precisará de mais do que os 5 principais resultados.
( setq consult-omni-default-count " 5 " )
Tenha em mente que com comandos dinâmicos de consult-omni, você sempre pode aumentar o número passando argumentos para -n
, --count
, :n
ou :count
(por exemplo, digitando search term -- -n 30
, você pode recuperar até 30 resultados.
consult-omni-default-page
Isso é semelhante a ir para a página 2, 3,…,N em uma página de resultados de pesquisa clássica. Se estiver definido como N, os primeiros resultados (N * contagem/página) serão ignorados e a próxima página de resultados será mostrada. Recomenda-se manter o valor padrão, 0, para ver os melhores resultados.
Lembre-se de que com comandos dinâmicos do consult-omni, você sempre pode alterar a página passando valores para os argumentos -p
, --page
, :p
ou :page
(por exemplo, digitando search term -- -p 2
, você pode obter a página 2.
consult-omni-default-timeout
Tempo máximo em segundos antes que consult-omni
desista de buscar resultados de uma única fonte em comandos STATIC .
consult-omni-url-use-queue
Um booleano, quer use url-queue
ou não.
consult-omni-url-queue-parallel-processes
Número de processos url-queue
executados em paralelo.
consult-omni-url-queue-timeout
Tempo máximo em segundos que um único trabalho url-queue
pode durar antes de ser encerrado.
consult-omni-log-buffer-name
Nome do buffer para registrar informações, que é mais útil para depuração.
consult-omni-log-level
Esta variável controla como o consult-omni registra informações ou exibe erros. Pode ser nil
, 'info
ou 'debug
, na ordem de registrar/mostrar mais detalhes.
consult-omni-group-by
Este é o campo usado para agrupar os resultados. Por padrão, os resultados são agrupados pelo nome da fonte. Mas isso pode ser alterado para alcançar vários comportamentos de agrupamento. Se estiver definido como nil
, os resultados não serão agrupados. Também pode ser definido para outras propriedades dos candidatos (por exemplo :url
, :title
, :domain
,…)
( setq consult-omni-group-by :source )
consult-omni-multi-sources
Esta é uma lista de strings de nomes de fontes (por exemplo '("Google", "Wikipedia", "chatGPT")
) que serão usadas nos comandos consult-omni-multi
e consult-omni-multi-static
(veja acima para descrição).
consult-omni-highlight-matches-in-minibuffer
Se o consult-omni destaca correspondências do termo de pesquisa nos candidatos ao minibuffer. Isso é útil para destacar a relevância dos resultados da pesquisa.
consult-omni-highlight-matches-in-file
Se o consult-omni destaca correspondências do termo de pesquisa em arquivos (por exemplo, em visualizações ou ao abrir arquivos). Isso é útil para encontrar correspondências do termo de pesquisa após abrir os arquivos de destino.
consult-omni-default-interactive-command
Este é um recurso conveniente para vincular seu comando interativo consult-omni favorito ao comando chamado consult-omni
, para que seja mais fácil lembrar e encontrar quando você chama Mx
. Você pode vinculá-lo a um dos comandos interativos (como consult-omni-multi
ou consult-omni-multi-static
) ou pode vinculá-lo a um comando de fonte única (por exemplo, consult-omni-google
, consult-omni-google-static
, consult-omni-google-wikipedia
,…) ou, alternativamente, você pode definir seu próprio comando personalizado (fonte única ou múltipla) e usá-lo.
consult-omni-http-retrieve-backend
Esta variável controla qual back-end é usado pelo consult-omni para solicitações HTTP. consult-omni oferece suporte a 3 back-ends diferentes:
url-retrieve
integradarequest
(veja solicitação emacs)plz
(veja plz.el) Por exemplo, para alterar o back-end para plz
, você pode fazer:
( setq consult-omni-http-retrieve-backend 'plz )
consult-omni-default-autosuggest-command
Comando de sugestão automática padrão. consult-omni fornece dois exemplos com consult-omni-dynamic-brave-autosuggest
e consult-omni-dynamic-google-autosuggest
, mas você também pode definir outros comandos de sugestão automática personalizados de outras fontes (por exemplo, Google, Wikipedia,…)
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest )
consult-omni-dynamic-input-debounce
Em comandos dinâmicos, o processo de coleta dinâmica é iniciado somente quando não há nenhuma nova entrada durante os segundos consult-omni-dynamic-input-debounce
. Se você digita devagar ou acha que precisa de tempo para pensar no que deseja pesquisar, você pode querer aumentar esse número, para não realizar pesquisas prematuramente, especialmente se quiser evitar a execução prematura de termos de pesquisa em serviços pagos. Por padrão, isso herda do valor de entrada-debounce integrado da consulta, que é 0,5. Pessoalmente, acho isso um pouco rápido demais para o consult-omni porque não quero que o consult-omni envie uma consulta para a API OpenAI paga enquanto ainda estou digitando minha consulta, então reduzo a velocidade para 0,8 - 1s.
( setq consult-omni-dynamic-input-debounce 0.8 )
consult-omni-dynamic-input-throttle
Em comandos dinâmicos, o processo de coleta dinâmica é iniciado apenas a cada segundo consult-omni-dynamic-input-throttle
. Se você usa serviços de API que possuem um número limitado de consultas por segundo, você pode querer aumentar esse número para evitar erros. Eu configurei isso para 2x meu valor de entrada-debounce:
( setq consult-omni-dynamic-input-throttle 1.6 )
consult-omni-dynamic-refresh-delay
Em comandos dinâmicos, a UI de conclusão só é atualizada a cada segundos consult-omni-dynamic-refresh-delay
. Você provavelmente deseja executar isso tão rápido quanto 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))))
Até onde sei, nenhum outro pacote Emacs oferece a funcionalidade e versatilidade do consult-omni. Embora existam vários pacotes para pesquisas na web (veja a discussão no pacote consult-web), não existe nenhum pacote omni-search que eu conheça.
Fora do Emacs, é claro que existem ferramentas como MacOS Spotlight e Alfred, que fornecem utilitários de pesquisa omni, mas em comparação com consult-omni
eles carecem de versatilidade e personalização.
Para relatar um bug, primeiro verifique se ele já foi relatado no *issue tracker* e veja se existe uma solução ou adicione comentários e discussões relevantes sobre o mesmo problema. Caso contrário, registre um novo problema seguindo estas etapas:
consult
e url-retrieve
(ou outros comandos relevantes) funcionem conforme o esperado.emacs -Q
), instale a versão mais recente do consult-omni (e suas dependências) sem qualquer configuração ou outros pacotes e veja se o problema ainda persiste.Mx toggle-debug-on-error
) e inclua o conteúdo do backtrace em seu relatório.consult-omni-url-retrieve-sync
), você pode alterar consult-omni-log-level
para 'debug
e inspecionar o buffer de log (buffer oculto chamado ” **consult-omni-log**” ou outro nome definido em consult-omni-log-buffer-name
). Se você optar por incluir essas informações em seu problema, certifique-se de que informações pessoais e segredos (como chaves de API) não sejam expostos.Este é um pacote de código aberto e agradeço comentários, sugestões, ideias, etc. Existem muitas funcionalidades ou fontes que podem ser adicionadas a este pacote para melhorar os fluxos de trabalho de diferentes usuários, então se você tiver alguma ideia, sinta-se à vontade para enviar um problema para uma solicitação de recurso.
Eu adoraria ver a ajuda de outros colaboradores tanto para melhorar/manter fontes/recursos atuais quanto para trabalhar em novas fontes ou recursos. Se você estiver interessado e quiser contribuir com o código, observe que o branch principal está atualmente estável (tão estável quanto um trabalho em andamento como este pode ser) e o branch de desenvolvimento é o trabalho em andamento atual. Portanto, comece no branch de desenvolvimento para obter as atualizações mais recentes do trabalho em andamento e crie um novo branch com nomes como recurso/nome do recurso ou correção/problema,… Faça as edições e, em seguida, crie um novo pull solicitação para mesclar novamente com o branch de desenvolvimento quando terminar suas edições.
É importante ter em mente que estou usando uma abordagem de programação alfabetizada onde tudo vai para uma única fonte de verdade consult-omni.org e então fica emaranhado em arquivos apropriados (por exemplo, consult-omni.el). Se você abrir uma solicitação pull em que editou diretamente os arquivos .el, provavelmente não a aprovarei, porque ela será substituída mais tarde, quando eu me separar do arquivo .org. Em outras palavras, não edite os arquivos .el! edite apenas o arquivo .org e emaranhe-o nos arquivos .el. Tenha em mente que embora a programação alfabetizada possa não fazer muito sentido em outros cenários, neste caso, ela realmente ajuda a adicionar novas fontes/recursos copiando de outros exemplos (já que tudo está em um arquivo organizacional), portanto, neste caso Insisto em usar a programação alfabetizada.
Obviamente este pacote não teria sido possível sem os fabulosos pacotes de consulta e embarque. Ele também se inspirou em outros pacotes, incluindo, entre outros, o antecessor conselheiro-web, bem como modo de mecanismo, emacs-google-this, helm.
Além disso, gostaria de agradecer a @karthink e @minad por suas fabulosas sugestões, discussões, contribuições, etc. Este pacote não teria sido possível sem a ajuda de @karthink na prototipagem e idealização (veja consult-web-mini) e o precioso comentários e sugestões.