consult-omni
consult-omni est un package permettant d'obtenir des résultats de recherche à partir d'une ou plusieurs sources personnalisées (moteurs de recherche Web, assistants IA, base de données elfeed, notes d'organisation, fichiers locaux, applications de bureau, serveurs de messagerie, …) directement dans le mini-tampon Emacs. Il s'agit d'un successeur de consult-web, avec des caractéristiques et fonctionnalités étendues.
consult-omni fournit des wrappers et des macros autour de consult, pour permettre aux utilisateurs d'obtenir plus facilement des résultats de différentes sources et de combiner des sources locales et Web dans une recherche omni-style. En d'autres termes, consult-omni permet d'obtenir des résultats multi-sources ou complétés dynamiquement dans un mini-tampon pour un large éventail de sources, y compris les fonctions/paquets Emacs (par exemple les tampons Emacs, les fichiers org, elfeed,…), les programmes en ligne de commande ( grep, find, gh,…) ou des moteurs de recherche web (Google, Brave, Bing,…).
consult-omni peut être une alternative gratuite open source à d'autres outils de recherche omni tels que Alfred ou MacOS Spotlight. Il fournit une gamme de sources par défaut à titre d'exemples, mais l'idée principale ici est de rester indépendant de la source et de fournir un ensemble d'outils permettant aux utilisateurs de définir leurs propres sources/workflows (alias plugins).
Voici la capture d'écran obligatoire :
Dans la capture d'écran ci-dessus, j'utilise un raccourci clavier pour ouvrir un cadre Emacs et appeler consult-omni
(similaire à l'appel de MacOS Spotlight) et rechercher le terme «emacs», puis me déplacer et regarder les aperçus de différentes sources, y compris l'application, gptel. , Brave, Google, YouTube, elfeed, mu4e, ....
Voici une autre capture d'écran illustrant l'utilisation de consult-omni comme lanceur d'application :
Pour une explication des fonctionnalités et une comparaison avec d'autres packages, vous pouvez regarder mes vidéos YouTube, à la fois pour consult-web et pour consult-omni ci-dessous :
Pour chaque source, vous pouvez avoir des commandes statiques ou dynamiques. Les commandes statiques interrogent l'utilisation d'une entrée, puis récupèrent les résultats. Commandes dynamiques, effectuez une complétion dynamique au fur et à mesure que l'utilisateur tape (afficher les résultats pendant que l'utilisateur tape). Les commandes dynamiques semblent un peu plus intuitives et modernes en 2024, mais ont en revanche l'inconvénient d'envoyer plusieurs fois la requête aux serveurs, surtout si vous tapez lentement ! En fonction du fournisseur de services et du modèle d'API, vous souhaiterez peut-être éviter d'accéder au serveur trop fréquemment (par exemple pour les services que vous payez par requête). Par conséquent, pour certains services, une commande statique peut être un meilleur choix que la commande dynamique. À l'aide de la macro consult-omni-define-source
, vous pouvez choisir de créer du statique, du dynamique ou les deux en passant nil
, t
ou 'both
au mot-clé :static
. Voici un exemple tiré du code source, pour créer des commandes statiques et dynamiques pour 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 )
Voici une capture d'écran de la commande interactive STATIC pour Wikipédia :
Voici une capture d'écran de la commande interactive DYNAMIC pour Wikipédia :
Par défaut, consult-omni fournit deux commandes interactives multi-sources principales.
consult-omni-multi
: Il s'agit d'une commande DYNAMIQUE interactive qui utilise plusieurs sources, telles que définies par consult-omni-multi-sources
, et affiche les résultats de la complétion du mini-tampon avec la complétion dynamique (les résultats sont récupérés au fur et à mesure que l'utilisateur tape). Voici une capture d'écran : consult-omni-multi-static
: Il s'agit d'une commande STATIQUE interactive qui utilise plusieurs sources, telles que définies par consult-omni-multi-sources
, et affiche les résultats dans l'achèvement du mini-tampon. Notez que consult-omni-multi-static ne fournit pas de complétion dynamique, mais certains pourraient trouver son utilisation plus intuitive pour affiner les résultats. L'utilisateur fournit un terme de recherche et une fois les résultats récupérés, la saisie dans le mini-tampon permettra de restreindre les candidats.Notez que contrairement à son prédécesseur consult-web, consult-omni ne fournit plus d'autres commandes interactives multi-sources (par exemple, recherche d'érudits). C'est maintenant à l'utilisateur de définir ces commandes pour son flux de travail personnalisé. Par exemple, un utilisateur peut définir des commandes interactives distinctes pour interroger les sources Web par rapport aux sources locales, tandis qu'un autre utilisateur peut souhaiter définir des commandes interactives pour les sources de connaissances (références académiques, notes, …) par rapport aux utilitaires (applications, tampons, fichiers,…). Des exemples sur la manière de définir de nouvelles commandes interactives sont fournis ci-dessous dans la configuration avancée ici.
Les arguments peuvent être transmis aux commandes interactives dynamiques et il est possible d'affiner davantage les résultats en utilisant une syntaxe similaire au style « Perl splitting » dans la recherche asynchrone de consultation.
Pour affiner les résultats, vous devez ajouter #
(ou un autre caractère défini dans consult-async-split-style
) après la requête de recherche. Par exemple en tapant ce qui suit dans le mini-tampon :
#recherche Web emacs#github
Recherche d'abord « recherche Web emacs », puis utilise « github » pour affiner la recherche.
De plus, les arguments peuvent également être transmis aux commandes dynamiques en utilisant une syntaxe similaire à consult-grep
. Par exemple en tapant ce qui suit dans le mini-tampon :
#comment parcourir une URL dans emacs -- --model gpt-3.5-turbo
transmet gpt-3.5-turbo
comme valeur de l'argument mot-clé :model
aux fonctions back-end de toutes les sources qui récupèrent les résultats. Si l'une de ces sources accepte l'argument mot-clé :model
, la valeur gpt-3.5-turbo
lui est transmise. Pour cette raison, il est recommandé de toujours utiliser des fonctions qui acceptent tous les arguments de mot-clé (c'est-à-dire add &allow-other-keys
) pour éviter les erreurs lorsque des mots-clés inexistants leur sont transmis.
au lieu d'utiliser --
, vous pouvez également utiliser un mot-clé avec deux points :
. Ce qui suit serait similaire à l’exemple ci-dessus :
#comment parcourir une URL dans emacs -- :model gpt-3.5-turbo
Lors de l'utilisation de consult, nous traitons avec différents types de sources, soit des fonctions elisp (par exemple buffer-list
, re-search-forward
) ou des programmes en ligne de commande (par exemple grep
, notmuch
, gh
, mu
, …). Ils renvoient une liste de candidats, qui sont à leur tour passés à completing--read
. Bien que consult offre un moyen de combiner plusieurs sources avec consult--multi
, la possibilité de combiner des sources de différents types (programme en ligne de commande avec elisp par exemple) est limitée. Dans consult-omni, nous résolvons ce problème en créant des wrappers et des machines autour des fonctions de consultation intégrées et en demandant à chaque source de déclarer son type. Ce type indique à consult-omni comment collecter les candidats de cette source et les combiner avec d'autres sources. Le type peut être 'sync
, 'dynamic
ou 'async
.
'sync
: Il s'agit d'une source synchrone, ce qui signifie que lorsque consult-omni appelle la fonction de requête pour collecter des candidats de cette source, elle l'appelle de manière synchrone (bloque le processus Emacs) et attend une valeur renvoyée (en attendant une liste de candidats ou zéro ). Ceci convient par exemple aux sources qui exécutent simplement une fonction elisp et renvoient rapidement une liste comme buffer-list
. Il n'y a presque aucun gain à appeler cette fonction de manière asynchrone car la surcharge liée au contrôle asynchrone (minuteries et observateurs,…) coûtera probablement plus de temps que le simple appel de la fonction directement et de manière synchrone.'dynamic
: les sources dynamiques sont celles qui bénéficieraient ou nécessiteraient l'appel de la fonction elisp de collecte de manière asynchrone. Par exemple, si la collecte d'éléments à partir d'une source nécessite d'envoyer une requête HTTP à un serveur et d'attendre la réponse, alors un type dynamique doit être utilisé, afin que le processus Emacs ne soit pas bloqué en attendant la réponse. Dans ce cas, la fonction de requête pour la source (la fonction qui renvoie les éléments) doit prendre une fonction de rappel qui sera appelée lorsque la réponse arrivera. Ceci est par exemple adapté pour obtenir une réponse des API de recherche sur le Web telles que les API de Google, Brave ou OpenAI.'async
: les sources asynchrones, sont celles qui utilisent un programme de ligne de commande externe et nécessitent donc de créer un processus, d'obtenir la sortie du programme de ligne de commande et de l'analyser pour collecter des candidats. Ceci convient par exemple pour obtenir des candidats de grep
, ou notmuch
, ....consult-omni Machinery permet de combiner plusieurs sources de différents types dans une seule commande en combinant des appels/processus synchronisés et asynchrones afin que l'utilisateur puisse obtenir efficacement des résultats de recherche provenant de diverses sources presque en temps réel (aucune attente nécessaire, les candidats sont affichés tels qu'ils sont). arriver).
Vous pouvez charger les actions d'embarquement par défaut en :
( require 'consult-omni-embark )
Les actions par défaut vous permettent d'ouvrir les liens dans le navigateur par défaut ou alternatif et également de copier ou insérer le titre et/ou l'URL des liens. D'autres actions d'embarquement peuvent être définies selon votre propre flux de travail spécifique.
Voir la vidéo YouTube sur consult-web pour un exemple, ici : https://youtu.be/7pDfyqBZwvo?t=4962.
Sans chaînes de documentation ni espaces, le code fait moins de 1 000 lignes et cela ne dépend que de la consultation et de la récupération d'URL intégrée.
Vous ne pouvez charger que les pièces dont vous avez besoin. Par exemple, si tout ce dont vous avez besoin est un utilitaire de suggestion automatique similaire à helm-google-autosuggest
, vous pouvez alors utiliser une configuration minimale comme celle-ci :
( 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 ))
Notez que chaque module (c'est-à-dire chaque source) ajoute 100 à 200 lignes de code supplémentaires. Cela signifie également ajouter une nouvelle source, il vous suffit d'écrire un court morceau de code en suivant ces exemples !
De nombreuses options de personnalisation à la fois pour les sources et également pour exécuter des actions sur les résultats. De nouvelles sources peuvent être ajoutées à votre guise avec différents formats, différentes actions,…
La collecte dynamique permet des flux de travail complexes à la volée. Modifiez les paramètres de requête à la volée en passant des arguments. Sélectionnez un ensemble aléatoire de résultats ad hoc à l'aide d'embarquer et exécutez des actions d'embarquement sur ceux-ci. Cela permet également le traitement par lots. Par exemple, pour ajouter une longue liste de résultats à une note en mode organisation pour une révision ultérieure (comme le montre cette vidéo YouTube : https://youtu.be/7pDfyqBZwvo?t=4774).
Avant de commencer, assurez-vous de bien comprendre trois points :
consult-omni-sources
fournissent une démonstration de base pour l'intégration de différents services (tels que les fournisseurs de recherche), cependant, puisque chaque service est livré avec ses propres termes et conditions (qui peuvent changer dans le temps et varier d'un endroit à l'autre). en fonction du lieu), il est difficile d'apporter des solutions globales et de les maintenir dans le temps. consult-omni est indépendant de la façon dont vous vous connectez et intégrez d'autres services dans votre configuration (car ni consult-omni ni Emacs ne collectent d'informations sur les utilisateurs ou leur utilisation), et donc en fin de compte, seul vous, l'utilisateur, êtes responsable de tout configurer correctement et comprenez les conséquences de l'utilisation (par exemple, les coûts d'utilisation des API payantes) et assurez-vous de rester dans les limites des lois et réglementations pertinentes pour votre cas d'utilisation (c'est-à-dire suivre les accords d'utilisation du logiciel, etc.). Par conséquent, il est important que vous lisiez et compreniez comment utiliser chaque service, et également que vous compreniez ce qui se passe sous le capot lorsque vous intégrez le service avec consult-omni. Je fais de mon mieux pour fournir de la documentation ici ainsi que sur les pages wiki, et j'essaierai de vous aider lorsque cela est possible, mais avant de continuer, comprenez que vous faites tout à vos propres risques. Si vous souhaitez un exemple de configuration, consultez Drop-in *Example Config*. Voici une explication détaillée ;
Pour utiliser consult-omni, vous avez besoin d'Emacs >28.0 (je n'ai pas testé les versions antérieures) et vous avez besoin de consult. Bien que ce soient les seules exigences, je vous suggère de lire le reste de ce README. Je recommande d'autres packages et configurations utiles pour différents paramètres. Certains de ces packages et paramètres supplémentaires peuvent améliorer votre expérience de consult-omni, vous pouvez donc envisager de les installer également. Par exemple, combiner consult avec d'autres packages tels que vertico, orderless et embarqué peut améliorer la fonctionnalité ainsi que l'expérience utilisateur.
consult-omni n'est pas actuellement sur ELPA ou MELPA. Par conséquent, vous devez l’installer à l’aide d’un autre gestionnaire de packages non standard tel que Straight.el, elpaca,… ou utiliser une installation manuelle.
Pour installer consult-omni avec Straight.el, vous pouvez utiliser la commande suivante. Assurez-vous de charger consult-omni après avoir chargé consult (par exemple require 'consult
).
( straight-use-package
'(consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " )))
ou si vous utilisez la macro use-package
avec directement, vous pouvez faire :
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " ))
:after consult)
Vous pouvez également créer un fork sur ce référentiel et utiliser votre propre référentiel.
Clonez ce dépôt et assurez-vous que les fichiers se trouvent sur votre chemin de chargement, comme décrit sur EmacsWiki.
Assurez-vous de charger consult (par exemple require 'consult
) avant de charger consult-omni.
Vous pouvez rechercher TOUTES les sources par défaut en chargeant le module consult-omni-sources
fourni, puis en appelant la fonction consult-omni-sources-load-modules
:
( require 'consult-omni-sources )
(consult-omni-sources-load-modules)
Cela fournit des sources pour certains services populaires et ajoute une longue liste de commandes interactives (recherche dynamique, recherche statique ou les deux selon la source). Au fil du temps, j'espère ajouter davantage de services, avec un peu de chance également grâce à la contribution de la communauté. Notez que ce sont également de bons exemples pour vous permettre d'apprendre à ajouter vos propres sources ou à modifier celles actuelles pour vos cas d'utilisation spécifiques.
Vous pouvez également charger plusieurs sources (mais pas toutes) en définissant la liste consult-omni-sources-modules-to-load
puis en chargeant en appelant 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)
Cela limite les sources qui consult-omni se chargent UNIQUEMENT à celles définies dans consult-omni-sources-modules-to-load
.
Alternativement, vous pouvez charger une seule source en exigeant simplement le fichier correspondant. Par exemple pour Wikipédia, vous pouvez faire :
( require 'consult-omni-sources )
( require 'consult-omni-wikipedia )
Cela ajouterait des commandes interactives uniquement pour la recherche sur Wikipédia (par exemple consult-omni-wikipedia
et/ou consult-omni-wikipedia-static
).
Voici une liste des sources actuelles. Pour plus de détails sur la façon de définir et d'utiliser chaque source, reportez-vous aux pages wiki (en construction actuellement). Vous pouvez également regarder la vidéo du didacticiel YouTube ici : https://www.youtube.com/watch?v=wNH2E7iT__c
Source | Catégorie |
---|---|
Applications | Applications de bureau |
Bing | Moteur de recherche Web |
Suggestion automatique courageuse | Complétion de mots Web/Suggest automatique |
Courageux | Moteur de recherche Web |
Historique du navigateur | Historique du navigateur Web |
consulter les sources tampons | Tampons, fichiers, signets Emacs,… |
calculer | Calculatrice Emacs |
chatGPT | Invites d'IA simples |
consulter-notes | Remarques locales |
Dictionnaire | Dictionnaire intégré à Emacs |
doiorg | Référence académique |
DuckDuckGo (API limitée) | Suggestions de recherche |
Elfeed | Flux (RSS, vidéos,…) |
fd | Rechercher des fichiers locaux avec la commande fd |
trouver | Rechercher des fichiers locaux avec la commande find |
GitHub | Rechercher des dépôts GitHub avec la commande gh |
Moteur de recherche Web | |
Suggestion automatique Google | Complétion de mots Web/Suggest automatique |
grep | Rechercher des fichiers locaux avec la commande grep |
git-grep | Rechercher des fichiers Git locaux avec la commande grep |
Ripgrep | Rechercher des fichiers locaux avec la commande rg |
ripgrep-tout | Rechercher des fichiers locaux avec la commande rga |
gptel | Assistant IA |
Injuste | Vidéos en ligne (YouTube) |
tampons de recherche de texte | Rechercher du texte dans les tampons Emacs |
situer | Rechercher des fichiers locaux avec la commande locale |
homme | Rechercher des pages de manuel avec la commande man |
mdfind | Rechercher des fichiers locaux avec la commande OSX mdfind |
mu4e | Rechercher des e-mails |
Recherche de notes | Rechercher des fichiers de notes locaux |
pas beaucoup | Rechercher des e-mails |
Numi | Calculatrice avec numi-cli/commande de Numi) |
Ordre du jour de l'organisation | Rechercher des points à l'ordre du jour de l'organisation |
PubMed | Référence académique |
Scopus | Référence académique |
StackOverflow | Forum communautaire |
Wikipédia | Encyclopédie |
YouTube | Vidéos en ligne (YouTube) |
consult-omni est construit avec l'idée que l'utilisateur doit pouvoir tout personnaliser en fonction de son cas d'utilisation, on s'attend donc vraiment à ce que l'utilisateur apprenne comment configurer ce package. Par conséquent, je vous recommande de lire cette section et de comprendre comment configurer le package en fonction de vos besoins et de votre cas d'utilisation spécifique. En plus de ces paramètres, certaines sources ont leurs propres variables de personnalisation, etc., ce qui est discuté dans les pages wiki (en construction actuellement) et dans ce didacticiel YouTube : https://www.youtube.com/watch?v=wNH2E7iT__c.
Les variables personnalisables suivantes sont fournies :
consult-omni-sources-modules-to-load
Liste des modules à charger. En définissant cela avant d'appeler consult-omni-sources-load-modules
, vous pouvez limiter les modules (sources) chargés et éviter les erreurs dues à des exigences manquantes pour certaines sources. Par exemple, pour simplement charger Wikipédia :
( setq consult-omni-sources-modules-to-load ( list 'consult-omni-wikipedia ))
consult-omni-default-browse-function
Fonction de navigation par défaut pour ouvrir les URL. Cela peut être défini sur la fonction de navigateur externe en :
( setq consult-omni-default-browse-function 'browse-url )
consult-omni-alternate-browse-function
Fonction de navigation secondaire pour ouvrir les URL. Cela peut par exemple être défini sur eww ou sur certains autres navigateurs pour un accès rapide à un navigateur alternatif avec des actions d'embarquement.
( setq consult-omni-alternate-browse-function 'eww-browse-url )
consult-omni-default-preview-function
Fonction par défaut à utiliser pour prévisualiser les liens. Cela peut par exemple être défini sur 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
Cela active/désactive les aperçus pour toutes les sources de consultation omni. Il est recommandé de définir ceci sur t
et d'utiliser preview-key
pour contrôler les aperçus par source.
consult-omni-preview-key
Il s'agit de la clé d'aperçu par défaut. Un bon choix pourrait être « Co ».
( setq consult-omni-preview-key " C-o " )
consult-omni-default-format-candidate
Cette variable a stocke une fonction appelée pour formater les candidats (sur toute source ne disposant pas de fonction de formatage explicite). consult-omni fournit deux exemples de fonctions :
consult-omni--simple-format-candidate
affiche la vignette sans annotation marginale dans le mini-tamponconsult-omni--highlight-format-candidate
affiche le candidat avec une annotation marginale et met également en évidence le terme de recherche. consult-omni-default-count
Par défaut, consult-omni récupère uniquement ce nombre de résultats par source. Il est recommandé de maintenir ce nombre à un niveau faible (par exemple 5 à 10) pour maintenir des performances rapides. La valeur par défaut est définie sur 5 car de nos jours, pour la plupart des cas d'utilisation quotidiens, vous n'aurez probablement pas besoin de plus que les 5 premiers résultats.
( setq consult-omni-default-count " 5 " )
Gardez à l'esprit qu'avec les commandes dynamiques de consult-omni, vous pouvez toujours augmenter le nombre en passant des arguments à -n
, --count
, :n
ou :count
(par exemple en tapant search term -- -n 30
, vous pouvez récupérer jusqu'à 30 résultats.
consult-omni-default-page
Cela revient à accéder aux pages 2, 3,…,N d’une page de résultats de recherche classique. Si la valeur est N, les premiers résultats (N * nombre/page) sont ignorés et la page de résultats suivante est affichée. Il est recommandé de conserver cette valeur par défaut, 0, pour voir les meilleurs résultats.
Gardez à l'esprit qu'avec les commandes dynamiques de consult-omni, vous pouvez toujours changer de page en passant des valeurs aux arguments -p
, --page
, :p
ou :page
(par exemple en tapant search term -- -p 2
, vous peut obtenir la page 2.
consult-omni-default-timeout
Temps maximum en secondes avant que consult-omni
n'abandonne la récupération des résultats à partir d'une source unique dans les commandes STATIC .
consult-omni-url-use-queue
Un booléen, s'il faut utiliser ou non url-queue
.
consult-omni-url-queue-parallel-processes
Nombre de processus url-queue
exécutés en parallèle.
consult-omni-url-queue-timeout
Durée maximale en secondes pendant laquelle une seule tâche url-queue
peut vivre avant d'abandonner.
consult-omni-log-buffer-name
Nom du tampon pour la journalisation des informations, qui est principalement utile pour le débogage.
consult-omni-log-level
Cette variable contrôle la manière dont consult-omni enregistre les informations ou affiche les erreurs. Il peut s'agir de nil
, 'info
ou 'debug
, dans l'ordre de journalisation/affichage de plus de détails.
consult-omni-group-by
C'est le champ qui permet de regrouper les résultats. Par défaut, les résultats sont regroupés par nom de source. Mais cela peut être modifié pour obtenir différents comportements de regroupement. Si la valeur est nil
, les résultats ne sont pas regroupés. Il peut également être défini sur d'autres propriétés des candidats (par exemple :url
, :title
, :domain
, …)
( setq consult-omni-group-by :source )
consult-omni-multi-sources
Il s'agit d'une liste de chaînes de noms de sources (par exemple '("Google", "Wikipedia", "chatGPT")
) qui seront utilisées dans les commandes consult-omni-multi
et consult-omni-multi-static
(voir ci-dessus pour description).
consult-omni-highlight-matches-in-minibuffer
Si consult-omni met en évidence les correspondances du terme de recherche dans les candidats du mini-tampon. Ceci est utile pour mettre en évidence la pertinence des résultats de recherche.
consult-omni-highlight-matches-in-file
Si consult-omni met en évidence les correspondances du terme recherché dans les fichiers (par exemple dans les aperçus ou lors de l'ouverture des fichiers). Ceci est utile pour trouver des correspondances du terme de recherche après l’ouverture des fichiers cibles.
consult-omni-default-interactive-command
Il s'agit d'une fonctionnalité pratique pour lier votre commande interactive consult-omni préférée à la commande appelée consult-omni
, afin qu'elle soit plus facile à retenir et à trouver lorsque vous appelez Mx
. Vous pouvez le lier à l'une des commandes interactives (telles que consult-omni-multi
ou consult-omni-multi-static
) ou vous pouvez le lier à une commande à source unique (par exemple consult-omni-google
, consult-omni-google-static
, consult-omni-google-wikipedia
, …) ou bien vous pouvez définir votre propre commande personnalisée (unique ou multi-source) et l'utiliser à la place.
consult-omni-http-retrieve-backend
Cette variable contrôle quel back-end est utilisé par consult-omni pour les requêtes HTTP. consult-omni prend en charge 3 back-ends différents :
url-retrieve
intégréerequest
(voir emacs-request)plz
(voir svp.el) Par exemple, pour changer le back-end en plz
, vous pouvez faire :
( setq consult-omni-http-retrieve-backend 'plz )
consult-omni-default-autosuggest-command
Commande de suggestion automatique par défaut. consult-omni fournit deux exemples avec consult-omni-dynamic-brave-autosuggest
et consult-omni-dynamic-google-autosuggest
, mais vous pouvez également définir d'autres commandes de suggestion automatique personnalisées à partir d'autres sources (par exemple google, Wikipedia, …)
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest )
consult-omni-dynamic-input-debounce
Dans les commandes dynamiques, le processus de collecte dynamique est démarré uniquement lorsqu'il n'y a pas eu de nouvelle entrée pendant les secondes consult-omni-dynamic-input-debounce
. Si vous tapez lentement ou pensez que vous avez besoin de temps pour réfléchir à ce que vous souhaitez rechercher, vous souhaiterez peut-être augmenter ce nombre afin de ne pas effectuer de recherches prématurément, surtout si vous souhaitez éviter d'exécuter des termes de recherche prématurés sur des services payants. Par défaut, cela hérite de la valeur d'anti-rebond d'entrée intégrée à consult, qui est de 0,5. Personnellement, je trouve cela un peu trop rapide pour consult-omni car je ne veux pas que consult-omni envoie une requête à l'API OpenAI payante pendant que je suis encore en train de taper ma requête, donc je la ralentis à 0,8 - 1 s.
( setq consult-omni-dynamic-input-debounce 0.8 )
consult-omni-dynamic-input-throttle
Dans les commandes dynamiques, le processus de collecte dynamique est démarré uniquement toutes les secondes consult-omni-dynamic-input-throttle
. Si vous utilisez des services API qui ont un nombre limité de requêtes par seconde, vous souhaiterez peut-être augmenter ce nombre pour éviter d'obtenir des erreurs. J'ai défini cela à 2x ma valeur d'anti-rebond d'entrée :
( setq consult-omni-dynamic-input-throttle 1.6 )
consult-omni-dynamic-refresh-delay
Dans les commandes dynamiques, l’interface utilisateur d’achèvement n’est mise à jour que toutes les secondes consult-omni-dynamic-refresh-delay
. Vous souhaiterez probablement l'exécuter aussi rapidement que 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))))
À ma connaissance, aucun autre package Emacs n'offre la fonctionnalité et la polyvalence de consult-omni. Bien qu'il existe plusieurs packages pour les recherches sur le Web (voir la discussion sous le package consult-web), il n'existe pas de package omni-recherche à ma connaissance.
En dehors d'Emacs, il existe bien sûr des outils comme MacOS Spotlight et Alfred, qui fournissent des utilitaires de recherche omni, mais comparés à consult-omni
ils manquent de polyvalence et de personnalisation.
Pour signaler un bug, vérifiez d'abord s'il est déjà signalé dans le *issue tracker* et voyez s'il existe une solution existante ou ajoutez des commentaires et des discussions pertinents sous le même problème. Sinon, déposez un nouveau problème en suivant ces étapes :
consult
et url-retrieve
(ou d'autres commandes pertinentes) fonctionnent comme prévu.emacs -Q
), installez la dernière version de consult-omni (et ses dépendances) sans aucune configuration ni autre package et voyez si le problème persiste.Mx toggle-debug-on-error
) et incluez le contenu de la trace dans votre rapport.consult-omni-url-retrieve-sync
), vous pouvez remplacer consult-omni-log-level
par 'debug
' et inspecter le tampon de journal (tampon caché appelé " **consult-omni-log** » ou autre nom défini dans consult-omni-log-buffer-name
). Si vous choisissez d'inclure ces informations dans votre problème, assurez-vous que les informations personnelles et les secrets (comme les clés API) ne sont pas exposés.Il s'agit d'un package open source et j'apprécie les commentaires, suggestions, idées, etc. De nombreuses fonctionnalités ou sources peuvent être ajoutées à ce package pour améliorer les flux de travail des différents utilisateurs, donc si vous avez des idées, n'hésitez pas à déposer un problème pour une demande de fonctionnalité.
J'aimerais voir l'aide d'autres contributeurs à la fois pour améliorer/maintenir les sources/fonctionnalités actuelles ainsi que pour travailler sur de nouvelles sources ou fonctionnalités. Si vous êtes intéressé et souhaitez contribuer au code, veuillez noter que la branche principale est actuellement stable (aussi stable qu'un travail en cours comme celui-ci peut l'être) et que la branche de développement est le travail en cours en cours. Alors, commencez par la branche de développement pour obtenir les dernières mises à jour en cours et créez une nouvelle branche avec des noms tels que fonctionnalité/nom de la fonctionnalité ou correctif/problème,… Effectuez les modifications, puis créez un nouveau pull. demandez de fusionner à nouveau avec la branche de développement lorsque vous avez terminé vos modifications.
Surtout, gardez à l'esprit que j'utilise une approche de programmation compétente où tout va dans une seule source de vérité , consult-omni.org , puis s'emmêle dans les fichiers appropriés (par exemple, consult-omni.el). Si vous ouvrez une pull-request dans laquelle vous avez directement modifié les fichiers .el, je ne l'approuverai probablement pas car cela sera ensuite écrasé plus tard lorsque je m'emmêlerai du fichier .org. En d’autres termes, ne modifiez pas les fichiers .el ! modifiez uniquement le fichier .org et mélangez-le aux fichiers .el. Gardez à l'esprit que même si une programmation compétente n'a pas beaucoup de sens dans d'autres scénarios, dans ce cas, cela aide vraiment à ajouter de nouvelles sources/fonctionnalités en copiant à partir d'autres exemples (puisque tout est dans un seul fichier org), donc dans ce cas J'insiste pour utiliser la programmation compétente.
Évidemment, ce forfait n'aurait pas été possible sans les fabuleux forfaits de consultation et d'embarquement. Il s'est également inspiré d'autres packages, notamment du prédécesseur counsel-web, ainsi que du mode moteur, emacs-google-this, helm.
De plus, je voudrais remercier @karthink et @minad pour leurs fabuleuses suggestions, discussions, contributions, etc. Ce package n'aurait pas été possible sans l'aide de @karthink dans le prototypage et l'idéation (voir consult-web-mini) et le précieux commentaires et suggestions.