consult-omni
Consult-Omni ist ein Paket zum Abrufen von Suchergebnissen aus einer oder mehreren benutzerdefinierten Quellen (Websuchmaschinen, KI-Assistenten, Elfeed-Datenbank, Organisationsnotizen, lokalen Dateien, Desktop-Anwendungen, Mailservern usw.) direkt im Emacs-Minipuffer. Es ist ein Nachfolger von Consult-Web mit erweiterten Features und Funktionalitäten.
Consult-Omni bietet Wrapper und Makros rund um Consult, um es Benutzern zu erleichtern, Ergebnisse aus verschiedenen Quellen zu erhalten und lokale und Webquellen in einer Suche im Omni-Stil zu kombinieren. Mit anderen Worten: Consult-Omni ermöglicht das Abrufen von Multi-Source- oder dynamisch vervollständigten Ergebnissen im Consult-Stil im Minipuffer für eine Vielzahl von Quellen, einschließlich Emacs-Funktionen/-Paketen (z. B. Emacs-Puffer, Organisationsdateien, Elfeed usw.), Befehlszeilenprogrammen ( grep, find, gh, …) oder Websuchmaschinen (Google, Brave, Bing, …).
Consult-Omni kann eine kostenlose Open-Source-Alternative zu anderen Omni-Suchtools wie Alfred oder MacOS Spotlight sein. Es bietet eine Reihe von Standardquellen als Beispiele, aber die Hauptidee besteht darin, unabhängig von der Quelle zu bleiben und den Benutzern das Toolset zur Verfügung zu stellen, mit dem sie ihre eigenen Quellen/Workflows (auch Plugins genannt) definieren können.
Hier ist der obligatorische Screenshot:
Im Screenshot oben verwende ich eine Tastenkombination, um einen Emacs-Frame zu öffnen, rufe consult-omni
auf (ähnlich dem Aufruf von MacOS Spotlight) und suche nach dem Begriff „emacs“. Dann bewege ich mich umher und schaue mir Vorschauen aus verschiedenen Quellen an, darunter Anwendung und gptel , Brave, Google, YouTube, elfeed, mu4e, ....
Hier ist ein weiterer Screenshot, der die Verwendung von Consult-Omni als Anwendungsstarter zeigt:
Zur Erläuterung der Funktionen und zum Vergleich mit einigen anderen Paketen können Sie sich unten meine YouTube-Videos ansehen, sowohl für Consult-Web als auch für Consult-Omni:
Für jede Quelle können Sie statische oder dynamische Befehle haben. Statische Befehle fragen die Verwendung einer Eingabe ab und rufen dann die Ergebnisse ab. Dynamische Befehle führen eine dynamische Vervollständigung durch, während der Benutzer tippt (Ergebnisse anzeigen, während der Benutzer tippt). Dynamische Befehle fühlen sich im Jahr 2024 etwas intuitiver und moderner an, haben aber andererseits den Nachteil, dass die Abfrage mehrmals an die Server gesendet wird, insbesondere wenn Sie langsam tippen! Abhängig vom Dienstanbieter und dem API-Modell möchten Sie möglicherweise vermeiden, dass der Server zu häufig aufgerufen wird (z. B. für Dienste, die Sie pro Abfrage bezahlen). Daher ist für bestimmte Dienste möglicherweise ein statischer Befehl die bessere Wahl als der dynamische Befehl. Mit dem Makro consult-omni-define-source
“ können Sie wählen, ob Sie statische, dynamische oder beides erstellen möchten, indem Sie nil
, t
oder 'both
an das Schlüsselwort :static
übergeben. Hier ist ein Beispiel aus dem Quellcode zum Erstellen sowohl statischer als auch dynamischer Befehle für die Brave-Suche:
(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 )
Hier ist ein Screenshot des interaktiven Befehls STATIC für Wikipedia:
Hier ist ein Screenshot des interaktiven Befehls DYNAMIC für Wikipedia:
Standardmäßig stellt Consult-Omni zwei interaktive Hauptbefehle für mehrere Quellen bereit.
consult-omni-multi
: Dies ist ein interaktiver DYNAMISCHER Befehl, der mehrere Quellen verwendet, wie durch consult-omni-multi-sources
definiert, und die Ergebnisse in Minibuffer-Vervollständigung mit dynamischer Vervollständigung anzeigt (Ergebnisse werden abgerufen, während der Benutzer tippt). Hier ist ein Screenshot: consult-omni-multi-static
: Dies ist ein interaktiver STATIC -Befehl, der mehrere Quellen verwendet, wie durch consult-omni-multi-sources
definiert, und die Ergebnisse in der Minibuffer-Vervollständigung anzeigt. Beachten Sie, dass „consult-omni-multi-static“ keine dynamische Vervollständigung bietet, einige finden es jedoch möglicherweise intuitiver, dies zur Eingrenzung der Ergebnisse zu verwenden. Der Benutzer gibt einen Suchbegriff ein und sobald die Ergebnisse abgerufen sind, werden durch die Eingabe in den Minipuffer die Kandidaten eingegrenzt.Beachten Sie, dass Consult-Omni im Gegensatz zum Vorgänger Consult-Web keine anderen interaktiven Multi-Source-Befehle (z. B. Scholar-Suche) mehr bietet. Es liegt nun am Benutzer, solche Befehle für seinen benutzerdefinierten Workflow zu definieren. Beispielsweise kann ein Benutzer separate interaktive Befehle zum Abfragen von Webquellen im Vergleich zu lokalen Quellen definieren, während ein anderer Benutzer möglicherweise interaktive Befehle für Wissensquellen (wissenschaftliche Referenzen, Notizen usw.) im Vergleich zu Dienstprogrammen (Apps, Puffer, Dateien usw.) definieren möchte. Beispiele für die Definition neuer interaktiver Befehle finden Sie unten in der erweiterten Konfiguration hier.
Argumente können an die dynamischen interaktiven Befehle übergeben werden, und eine weitere Eingrenzung der Ergebnisse kann mithilfe einer Syntax erfolgen, die dem „Perl-Splitting“-Stil in der asynchronen Konsultationssuche ähnelt.
Um die Ergebnisse einzugrenzen, müssen Sie nach der Suchabfrage #
(oder ein anderes in consult-async-split-style
“ definiertes Zeichen) hinzufügen. Geben Sie beispielsweise Folgendes in den Minipuffer ein:
#emacs-Websuche#github
Sucht zuerst nach „emacs web search“ und verwendet dann „github“ zur Eingrenzung.
Darüber hinaus können Argumente auch an dynamische Befehle übergeben werden, wobei eine ähnliche Syntax wie consult-grep
verwendet wird. Geben Sie beispielsweise Folgendes in den Minipuffer ein:
#So durchsuchen Sie eine URL in Emacs -- --model gpt-3.5-turbo
übergibt gpt-3.5-turbo
als Wert für das Schlüsselwortargument :model
an die Back-End-Funktionen aller Quellen, die Ergebnisse abrufen. Wenn eine dieser Quellen das Schlüsselwortargument :model
akzeptiert, wird ihnen der Wert gpt-3.5-turbo
übergeben. Aus diesem Grund wird empfohlen, immer Funktionen zu verwenden, die beliebige Schlüsselwortargumente akzeptieren (auch bekannt als add &allow-other-keys
), um Fehler zu vermeiden, wenn nicht vorhandene Schlüsselwörter an sie übergeben werden.
Anstelle von --
können Sie auch ein Schlüsselwort mit Doppelpunkt verwenden :
. Folgendes würde dem obigen Beispiel ähneln:
#So durchsuchen Sie eine URL in Emacs – :model gpt-3.5-turbo
Bei der Verwendung von Consult beschäftigen wir uns mit verschiedenen Arten von Quellen, entweder Elisp-Funktionen (z. B. buffer-list
, re-search-forward
) oder Befehlszeilenprogrammen (z. B. grep
, notmuch
, gh
, mu
, …). Sie geben eine Liste von Kandidaten zurück, die wiederum an completing--read
übergeben werden. Während „consult“ eine Möglichkeit bietet, mehrere Quellen mit consult--multi
zu kombinieren, ist die Möglichkeit, Quellen unterschiedlicher Art (z. B. Befehlszeilenprogramm mit elisp) zu kombinieren, begrenzt. In Consult-Omni lösen wir dieses Problem, indem wir einige Wrapper und Maschinen um integrierte Consult-Funktionen erstellen und jede Quelle ihren Typ deklarieren lassen. Dieser Typ teilt Consult-Omni mit, wie Kandidaten aus dieser Quelle gesammelt und mit anderen Quellen kombiniert werden sollen. Der Typ kann 'sync
, 'dynamic
oder 'async
sein.
'sync
: Dies ist eine synchrone Quelle. Das heißt, wenn Consult-Omni die Anforderungsfunktion aufruft, um Kandidaten aus dieser Quelle zu sammeln, ruft es diese synchron auf (blockiert den Emacs-Prozess) und wartet auf einen zurückgegebenen Wert (erwartet eine Kandidatenliste oder Null). ). Dies eignet sich beispielsweise für Quellen, die einfach eine Elisp-Funktion ausführen und schnell eine Liste zurückgeben, wie buffer-list
. Der asynchrone Aufruf dieser Funktion bringt fast keinen Gewinn, da der Overhead für die asynchrone Steuerung (Timer und Watcher usw.) wahrscheinlich mehr Zeit kostet als nur der direkte und synchrone Aufruf der Funktion.'dynamic
: Dynamische Quellen sind diejenigen, die einen asynchronen Aufruf der sammelnden Elisp-Funktion erfordern oder erfordern würden. Wenn zum Beispiel das Sammeln von Elementen aus einer Quelle das Senden einer HTTP-Anfrage an einen Server und das Warten auf die Antwort erfordert, sollte ein dynamischer Typ verwendet werden, damit der Emacs-Prozess beim Warten auf die Antwort nicht blockiert wird. In diesem Fall sollte die Anforderungsfunktion für die Quelle (die Funktion, die die Elemente zurückgibt) eine Rückruffunktion annehmen, die aufgerufen wird, wenn die Antwort eintrifft. Dies eignet sich beispielsweise zum Erhalten von Antworten von Websuch-APIs wie den APIs von Google, Brave oder OpenAI.'async
: asynchrone Quellen sind Quellen, die ein externes Befehlszeilenprogramm verwenden und daher einen Prozess erstellen, die Ausgabe des Befehlszeilenprogramms abrufen und analysieren müssen, um Kandidaten zu sammeln. Dies ist beispielsweise geeignet, um Kandidaten von grep
oder notmuch
zu erhalten.Die Consult-Omni-Maschinerie ermöglicht die Kombination mehrerer Quellen unterschiedlicher Art in einem Befehl durch die Kombination von synchronen und asynchronen Aufrufen/Prozessen, sodass der Benutzer Suchergebnisse aus verschiedenen Quellen nahezu in Echtzeit effizient abrufen kann (keine Wartezeit erforderlich, die Kandidaten werden so angezeigt, wie sie sind). ankommen).
Sie können die standardmäßigen Einschiffungsaktionen laden, indem Sie:
( require 'consult-omni-embark )
Mit den Standardaktionen können Sie die Links im Standard- oder Alternativbrowser öffnen und auch den Titel und/oder die URL der Links kopieren oder einfügen. Weitere Einschiffungsaktionen können für Ihren spezifischen Arbeitsablauf definiert werden.
Ein Beispiel finden Sie im YouTube-Video auf Consult-Web: https://youtu.be/7pDfyqBZwvo?t=4962.
Ohne Dokumentzeichenfolgen und Leerzeichen umfasst der Code weniger als 1000 Zeilen und hängt nur von der Konsultation und dem integrierten URL-Abruf ab.
Sie können nur die Teile laden, die Sie benötigen. Wenn Sie beispielsweise lediglich ein Autosuggestion-Dienstprogramm ähnlich helm-google-autosuggest
benötigen, können Sie eine minimale Konfiguration wie diese verwenden:
( 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 ))
Beachten Sie, dass jedes Modul (also jede Quelle) zusätzliche 100–200 Zeilen Code hinzufügt. Das bedeutet auch, dass Sie zum Hinzufügen einer neuen Quelle nur einen kurzen Codeabschnitt schreiben müssen, der diesen Beispielen folgt!
Zahlreiche Anpassungsoptionen sowohl für Quellen als auch für die Ausführung von Aktionen auf die Ergebnisse. Neue Quellen können nach Wunsch mit unterschiedlichem Format, unterschiedlichen Aktionen usw. hinzugefügt werden.
Die dynamische Sammlung ermöglicht komplexe Arbeitsabläufe im laufenden Betrieb. Ändern Sie Abfrageparameter im Handumdrehen, indem Sie Argumente übergeben. Wählen Sie ad hoc eine zufällige Gruppe von Ergebnissen aus, indem Sie „emboot“ verwenden und „emboot“-Aktionen darauf ausführen. Dies ermöglicht auch eine Stapelverarbeitung. Zum Beispiel, um einer Notiz im Organisationsmodus eine lange Ergebnisliste zur späteren Überprüfung hinzuzufügen (wie in diesem YouTube-Video gezeigt: https://youtu.be/7pDfyqBZwvo?t=4774).
Bevor Sie beginnen, stellen Sie sicher, dass Sie drei Punkte verstanden haben:
consult-omni-sources
bereitgestellten Funktionen stellen eine grundlegende Demonstration für die Integration verschiedener Dienste (z. B. Suchanbieter) dar, da jedoch jeder Dienst seine eigenen Geschäftsbedingungen hat (die sich im Laufe der Zeit ändern und je nach Standort variieren können). je nach Standort), ist es schwierig, umfassende Lösungen bereitzustellen und diese über einen längeren Zeitraum aufrechtzuerhalten. Consult-Omni ist unabhängig davon, wie Sie andere Dienste in Ihrem Setup verbinden und integrieren (da weder Consult-Omni noch Emacs Informationen über die Benutzer oder deren Nutzung sammeln), und daher sind letztendlich nur Sie als Benutzer dafür verantwortlich, alles korrekt und korrekt einzurichten Verstehen Sie die Folgen der Nutzung (z. B. Kosten für die Nutzung kostenpflichtiger APIs) und stellen Sie sicher, dass Sie sich an die für Ihren Anwendungsfall relevanten Gesetze und Vorschriften halten (z. B. befolgen Sie Software-Benutzervereinbarungen usw.). Daher ist es wichtig, dass Sie die einzelnen Dienste lesen und verstehen und auch verstehen, was unter der Haube passiert, wenn Sie den Dienst mit Consult-Omni integrieren. Ich versuche mein Bestes, hier und auf den Wiki-Seiten Dokumentation bereitzustellen, und werde versuchen, wenn möglich zu helfen. Bevor Sie jedoch fortfahren, sollten Sie sich darüber im Klaren sein, dass Sie alles auf eigenes Risiko tun. Wenn Sie eine Beispielkonfiguration wünschen, sehen Sie sich Drop-in *Beispielkonfiguration* an. Hier finden Sie eine ausführliche Erklärung.
Um Consult-Omni nutzen zu können, benötigen Sie Emacs >28.0 (ich habe frühere Versionen nicht getestet) und Consult. Obwohl dies die einzigen Anforderungen sind, empfehle ich Ihnen, den Rest dieser README-Datei zu lesen. Ich empfehle einige andere Pakete und nützliche Konfigurationen für verschiedene Einstellungen. Einige dieser zusätzlichen Pakete und Einstellungen können Ihre Erfahrung mit Consult-Omni verbessern. Daher sollten Sie die Installation dieser Pakete in Erwägung ziehen. Beispielsweise kann die Kombination von Consult mit anderen Paketen wie Vertico, Orderless und Embark sowohl die Funktionalität als auch das Benutzererlebnis verbessern.
Consult-Omni ist derzeit nicht auf ELPA oder MELPA. Daher müssen Sie es mit einem alternativen, nicht standardmäßigen Paketmanager wie Straight.el, Elpaca usw. installieren oder die manuelle Installation verwenden.
Um Consult-Omni mit Straight.el zu installieren, können Sie den folgenden Befehl verwenden. Stellen Sie sicher, dass Sie „consult-omni“ nach dem Laden von „consult“ laden (z. B. require 'consult
).
( straight-use-package
'(consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " )))
oder wenn Sie use-package
Makro mit Straight verwenden, können Sie Folgendes tun:
( use-package consult-omni
:straight (consult-omni :type git :host github :repo " armindarvish/consult-omni " :files ( :defaults " sources/*.el " ))
:after consult)
Sie können dieses Repository auch forken und Ihr eigenes Repo verwenden.
Klonen Sie dieses Repo und stellen Sie sicher, dass sich die Dateien in Ihrem Ladepfad befinden, wie in EmacsWiki beschrieben.
Stellen Sie sicher, dass Sie „consult“ laden (z. B. „ require 'consult
), bevor Sie „consult-omni“ laden.
Sie können ALLE Standardquellen durchsuchen, indem Sie das bereitgestellte Modul consult-omni-sources
“ laden und dann die Funktion consult-omni-sources-load-modules
aufrufen:
( require 'consult-omni-sources )
(consult-omni-sources-load-modules)
Dadurch werden Quellen für einige beliebte Dienste bereitgestellt und eine lange Liste interaktiver Befehle hinzugefügt (dynamische Suche, statische Suche oder beides, je nach Quelle). Ich hoffe, im Laufe der Zeit weitere Dienste hinzufügen zu können, hoffentlich auch durch Beiträge der Community. Beachten Sie, dass dies auch gute Beispiele für Sie sind, um zu lernen, wie Sie Ihre eigenen Quellen hinzufügen oder die aktuellen für Ihre spezifischen Anwendungsfälle optimieren.
Sie können auch mehrere Quellen laden (aber nicht alle), indem Sie die Liste consult-omni-sources-modules-to-load
festlegen und dann den Aufruf consult-omni-sources-load-modules
aufrufen:
( require 'consult-omni-sources )
( setq consult-omni-sources-modules-to-load '(consult-omni-google consult-omni-wikipedia))
(consult-omni-sources-load-modules)
Dies beschränkt die Quellen, die Consult-Omni lädt, auf NUR die, die in consult-omni-sources-modules-to-load
definiert sind.
Alternativ können Sie eine einzelne Quelle laden, indem Sie einfach die entsprechende Datei benötigen. Für Wikipedia können Sie beispielsweise Folgendes tun:
( require 'consult-omni-sources )
( require 'consult-omni-wikipedia )
Dadurch würden interaktive Befehle nur für die Wikipedia-Suche hinzugefügt (z. B. consult-omni-wikipedia
und/oder consult-omni-wikipedia-static
“).
Hier finden Sie eine Liste aktueller Quellen. Einzelheiten zum Festlegen und Verwenden der einzelnen Quellen finden Sie auf den Wiki-Seiten (derzeit im Aufbau). Sie können sich das YouTube-Tutorial-Video auch hier ansehen: https://www.youtube.com/watch?v=wNH2E7iT__c
Quelle | Kategorie |
---|---|
Apps | Desktop-Anwendungen |
Bing | Websuchmaschine |
Brave AutoSuggest | Web-Wortvervollständigung/AutoSuggest |
Mutig | Websuchmaschine |
Browserverlauf | Webbrowser-Verlauf |
Konsultieren Sie Pufferquellen | Emacs-Puffer, Dateien, Lesezeichen, … |
kalk | Emacs-Rechner |
chatGPT | Einfache KI-Eingabeaufforderungen |
Konsultationsnotizen | Lokale Notizen |
Wörterbuch | Integriertes Emacs-Wörterbuch |
doiorg | Akademische Referenz |
DuckDuckGo (Limitierte API) | Suchvorschläge |
elfeed | Feeds (RSS, Videos,…) |
fd | Durchsuchen Sie lokale Dateien mit dem Befehl fd |
finden | Durchsuchen Sie lokale Dateien mit dem Befehl „find “. |
GitHub | Durchsuchen Sie GitHub Repos mit dem Befehl gh |
Websuchmaschine | |
Google AutoSuggest | Web-Wortvervollständigung/AutoSuggest |
grep | Durchsuchen Sie lokale Dateien mit dem grep- Befehl |
git-grep | Durchsuchen Sie lokale Git-Dateien mit dem Befehl grep |
ripgrep | Durchsuchen Sie lokale Dateien mit dem Befehl rg |
ripgrep-all | Durchsuchen Sie lokale Dateien mit dem Befehl rga |
gptel | KI-Assistent |
Gehässig | Online-Videos (YouTube) |
Puffert die Textsuche | Suchtext in Emacs-Puffer |
lokalisieren | Durchsuchen Sie lokale Dateien mit dem lokalen Befehl |
Mann | Durchsuchen Sie Handbuchseiten mit dem man -Befehl |
mdfind | Durchsuchen Sie lokale Dateien mit dem OSX-Befehl mdfind |
mu4e | E-Mails durchsuchen |
Notizensuche | Durchsuchen Sie lokale Notizdateien |
nicht viel | E-Mails durchsuchen |
Numi | Rechner mit numi-cli/ Befehl von Numi) |
Org-Agenda | Tagesordnungspunkte der Organisation durchsuchen |
PubMed | Akademische Referenz |
Skopus | Akademische Referenz |
StackOverflow | Community-Forum |
Wikipedia | Enzyklopädie |
YouTube | Online-Videos (YouTube) |
Consult-Omni basiert auf der Idee, dass der Benutzer in der Lage sein sollte, alles basierend auf seinem Anwendungsfall anzupassen. Daher wird vom Benutzer dringend erwartet, dass er lernt, wie man dieses Paket konfiguriert. Daher empfehle ich Ihnen, diesen Abschnitt durchzulesen und zu verstehen, wie Sie das Paket entsprechend Ihren Anforderungen und für Ihren spezifischen Anwendungsfall konfigurieren. Zusätzlich zu diesen Einstellungen verfügen einige Quellen über eigene Anpassungsvariablen usw., die auf den Wiki-Seiten (derzeit im Aufbau) und in diesem YouTube-Tutorial besprochen werden: https://www.youtube.com/watch?v=wNH2E7iT__c.
Die folgenden anpassbaren Variablen werden bereitgestellt:
consult-omni-sources-modules-to-load
Liste der zu ladenden Module. Indem Sie dies vor dem Aufruf von consult-omni-sources-load-modules
festlegen, können Sie die geladenen Module (Quellen) begrenzen und Fehler aufgrund fehlender Anforderungen für bestimmte Quellen vermeiden. Zum Beispiel, um nur Wikipedia zu laden:
( setq consult-omni-sources-modules-to-load ( list 'consult-omni-wikipedia ))
consult-omni-default-browse-function
Standardmäßige Suchfunktion zum Öffnen von URLs. Dies kann auf eine externe Browserfunktion eingestellt werden durch:
( setq consult-omni-default-browse-function 'browse-url )
consult-omni-alternate-browse-function
Sekundäre Suchfunktion zum Öffnen von URLs. Dies kann beispielsweise auf eww oder einige andere Browser eingestellt werden, um schnell auf einen alternativen Browser mit Einschiffungsaktionen zuzugreifen.
( setq consult-omni-alternate-browse-function 'eww-browse-url )
consult-omni-default-preview-function
Standardfunktion zur Vorschau von Links. Dies kann zum Beispiel auf eww gesetzt werden:
( setq consult-omni-default-preview-function # 'eww-browse-url )
oder xwidegt-webkit:
( setq consult-omni-default-preview-function # 'xwidget-webkit-browse-url )
consult-omni-show-preview
Dadurch wird die Vorschau für alle Consult-Omni-Quellen aktiviert/deaktiviert. Es wird empfohlen, dies auf t
zu setzen und preview-key
zu verwenden, um die Vorschau pro Quelle zu steuern.
consult-omni-preview-key
Dies ist der Standard-Vorschauschlüssel. Eine gute Wahl könnte „Co“ sein.
( setq consult-omni-preview-key " C-o " )
consult-omni-default-format-candidate
Diese Variable a speichert eine Funktion, die zum Formatieren der Kandidaten aufgerufen wird (auf jeder Quelle, die keine explizite Formatierungsfunktion hat). Consult-Omni stellt zwei Beispielfunktionen zur Verfügung:
consult-omni--simple-format-candidate
zeigt die Kachel ohne Marginalien-Anmerkung im Minipuffer anconsult-omni--highlight-format-candidate
zeigt den Kandidaten mit Marginalien-Anmerkung an und hebt auch den Suchbegriff hervor. consult-omni-default-count
Standardmäßig ruft Consult-Omni nur bis zu dieser Anzahl an Ergebnissen pro Quelle ab. Es wird empfohlen, diesen Wert niedrig zu halten (z. B. 5 bis 10), um die Leistung schnell zu halten. Der Standardwert ist auf 5 eingestellt, da Sie heutzutage für die meisten alltäglichen Anwendungsfälle wahrscheinlich nicht mehr als die Top-5-Ergebnisse benötigen.
( setq consult-omni-default-count " 5 " )
Beachten Sie, dass Sie mit dynamischen Befehlen von Consult-Omni die Anzahl jederzeit erhöhen können, indem Sie Argumente an -n
, --count
, :n
oder :count
übergeben (z. B. durch Eingabe search term -- -n 30
). Rufen Sie bis zu 30 Ergebnisse ab.
consult-omni-default-page
Dies ähnelt dem Aufrufen der Seiten 2, 3, ..., N auf einer klassischen Suchergebnisseite. Wenn dies auf N eingestellt ist, werden die ersten (N * Anzahl/Seite) Ergebnisse übersprungen und die nächste Ergebnisseite angezeigt. Es wird empfohlen, den Standardwert 0 beizubehalten, um die besten Ergebnisse anzuzeigen.
Beachten Sie, dass Sie mit dynamischen Befehlen von Consult-Omni die Seite jederzeit ändern können, indem Sie Werte an die Argumente -p
, --page
, :p
oder :page
übergeben (z. B. indem Sie search term -- -p 2
eingeben). kann Seite 2 bekommen.
consult-omni-default-timeout
Maximale Zeit in Sekunden, bevor consult-omni
beim Abrufen von Ergebnissen aus einer einzigen Quelle in STATIC- Befehlen aufgibt.
consult-omni-url-use-queue
Ein boolescher Wert, ob url-queue
verwendet werden soll oder nicht.
consult-omni-url-queue-parallel-processes
Anzahl der url-queue
, die parallel ausgeführt werden.
consult-omni-url-queue-timeout
Maximale Zeit in Sekunden, die ein einzelner url-queue
Warteschlangenjob leben kann, bevor er aufgegeben wird.
consult-omni-log-buffer-name
Puffername zum Protokollieren von Informationen, der vor allem zum Debuggen nützlich ist.
consult-omni-log-level
Diese Variable steuert, wie Consult-Omni Informationen protokolliert oder Fehler anzeigt. Es kann entweder nil
, 'info
oder 'debug
sein, in der Reihenfolge der Protokollierung/Anzeige weiterer Details.
consult-omni-group-by
Dies ist das Feld, das zum Gruppieren der Ergebnisse verwendet wird. Standardmäßig werden Ergebnisse nach dem Namen der Quelle gruppiert. Dies kann jedoch geändert werden, um verschiedene Gruppierungsverhalten zu erreichen. Wenn dies auf nil
gesetzt ist, werden die Ergebnisse nicht gruppiert. Es kann auch auf andere Eigenschaften der Kandidaten festgelegt werden (z. B. :url
, :title
, :domain
, …).
( setq consult-omni-group-by :source )
consult-omni-multi-sources
Dies ist eine Liste von Quellennamenszeichenfolgen (z. B. '("Google", "Wikipedia", "chatGPT")
), die in den Befehlen consult-omni-multi
und consult-omni-multi-static
verwendet werden (siehe oben für). Beschreibung).
consult-omni-highlight-matches-in-minibuffer
Ob Consult-Omni Übereinstimmungen des Suchbegriffs in den Minibuffer-Kandidaten hervorhebt. Dies ist nützlich, um die Relevanz der Suchergebnisse hervorzuheben.
consult-omni-highlight-matches-in-file
Ob Consult-Omni Übereinstimmungen des Suchbegriffs in Dateien hervorhebt (z. B. in Vorschauen oder beim Öffnen von Dateien). Dies ist nützlich, um nach dem Öffnen von Zieldateien Übereinstimmungen mit dem Suchbegriff zu finden.
consult-omni-default-interactive-command
Dies ist eine praktische Funktion, um Ihren bevorzugten interaktiven Befehl „consult-omni“ an den Befehl consult-omni
zu binden, sodass Sie ihn leichter merken und finden können, wenn Sie Mx
aufrufen. Sie können dies an einen der interaktiven Befehle binden (z. B. consult-omni-multi
oder consult-omni-multi-static
“) oder Sie können es an einen Einzelquellenbefehl binden (z. B. consult-omni-google
, consult-omni-google-static
, consult-omni-google-wikipedia
, …) oder alternativ können Sie Ihren eigenen benutzerdefinierten Befehl (einzelne oder mehrere Quellen) definieren und diesen stattdessen verwenden.
consult-omni-http-retrieve-backend
Diese Variable steuert, welches Backend von Consult-Omni für HTTP-Anfragen verwendet wird. Consult-Omni unterstützt 3 verschiedene Backends:
url-retrieve
request
(siehe Emacs-Anfrage)plz
(siehe plz.el) Um beispielsweise das Backend in plz
zu ändern, können Sie Folgendes tun:
( setq consult-omni-http-retrieve-backend 'plz )
consult-omni-default-autosuggest-command
Standardmäßiger Autosuggest-Befehl. Consult-Omni bietet zwei Beispiele mit consult-omni-dynamic-brave-autosuggest
und consult-omni-dynamic-google-autosuggest
. Sie können jedoch auch andere benutzerdefinierte Autosuggest-Befehle aus anderen Quellen (z. B. Google, Wikipedia usw.) definieren.
( setq consult-omni-default-autosuggest-command # 'consult-omni-dynamic-brave-autosuggest )
consult-omni-dynamic-input-debounce
Bei dynamischen Befehlen wird der dynamische Erfassungsprozess nur gestartet, wenn seit consult-omni-dynamic-input-debounce
Sekunden keine neue Eingabe erfolgt ist. Wenn Sie langsam tippen oder der Meinung sind, dass Sie Zeit brauchen, um darüber nachzudenken, was Sie suchen möchten, können Sie diese Zahl erhöhen, damit Sie die Suche nicht vorzeitig ausführen, insbesondere wenn Sie vermeiden möchten, vorzeitige Suchbegriffe bei kostenpflichtigen Diensten einzugeben. Standardmäßig erbt dies vom integrierten Input-Debounce-Wert von Consult, der 0,5 beträgt. Persönlich finde ich das etwas zu schnell für Consult-Omni, weil ich nicht möchte, dass Consult-Omni eine Anfrage an die kostenpflichtige OpenAI-API sendet, während ich noch meine Anfrage eingebe, also verlangsame ich sie auf 0,8 bis 1 Sekunde.
( setq consult-omni-dynamic-input-debounce 0.8 )
consult-omni-dynamic-input-throttle
Bei dynamischen Befehlen wird der dynamische Erfassungsprozess nur alle consult-omni-dynamic-input-throttle
Sekunden gestartet. Wenn Sie API-Dienste verwenden, die eine begrenzte Anzahl von Abfragen pro Sekunde haben, möchten Sie diese Zahl möglicherweise erhöhen, um Fehler zu vermeiden. Ich habe dies auf das Zweifache meines Eingabe-Entprellwerts eingestellt:
( setq consult-omni-dynamic-input-throttle 1.6 )
consult-omni-dynamic-refresh-delay
Bei dynamischen Befehlen wird die Abschluss-Benutzeroberfläche nur alle consult-omni-dynamic-refresh-delay
Sekunden aktualisiert. Sie möchten dies wahrscheinlich so schnell wie consult-omni-dynamic-input-debounce
ausführen.
( 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))))
Meines Wissens nach bietet kein anderes Emacs-Paket die Funktionalität und Vielseitigkeit von Consult-Omni. Während es mehrere Pakete für die Websuche gibt (siehe die Diskussion unter „Consult-Web-Paket“), ist mir kein Omni-Suchpaket bekannt.
Außerhalb von Emacs gibt es natürlich Tools wie MacOS Spotlight und Alfred, die Omni-Suchdienstprogramme bereitstellen, aber im Vergleich zu consult-omni
mangelt es ihnen an Vielseitigkeit und Anpassbarkeit.
Um einen Fehler zu melden, überprüfen Sie zunächst, ob er bereits im *Issue-Tracker* gemeldet wurde, und prüfen Sie, ob es bereits eine Lösung gibt, oder fügen Sie relevante Kommentare und Diskussionen zu demselben Problem hinzu. Wenn nicht, reichen Sie ein neues Problem ein, indem Sie die folgenden Schritte ausführen:
consult
als auch url-retrieve
(oder andere relevante Befehle) wie erwartet funktionieren.emacs -Q
) die neueste Version von Consult-Omni (und seine Abhängigkeiten) ohne Konfiguration oder andere Pakete und prüfen Sie, ob das Problem weiterhin besteht.Mx toggle-debug-on-error
) und fügen Sie den Backtrace-Inhalt in Ihren Bericht ein.consult-omni-url-retrieve-sync
), können Sie consult-omni-log-level
in 'debug
“ ändern und den Protokollpuffer (versteckter Puffer namens „) überprüfen. **consult-omni-log**“ oder ein anderer in consult-omni-log-buffer-name
festgelegter Name). Wenn Sie diese Informationen in Ihr Problem aufnehmen möchten, stellen Sie bitte sicher, dass persönliche Informationen und Geheimnisse (z. B. API-Schlüssel) nicht offengelegt werden.Dies ist ein Open-Source-Paket, und ich freue mich über Feedback, Vorschläge, Ideen usw. Es gibt viele Funktionen oder Quellen, die zu diesem Paket hinzugefügt werden können, um die Arbeitsabläufe verschiedener Benutzer zu verbessern. Wenn Sie also Ideen haben, können Sie diese gerne einreichen Problem für eine Funktionsanfrage.
Ich würde gerne Hilfe von anderen Mitwirkenden sehen, sowohl bei der Verbesserung/Pflege aktueller Quellen/Funktionen als auch bei der Arbeit an neuen Quellen oder Funktionen. Wenn Sie interessiert sind und zum Code beitragen möchten, beachten Sie bitte, dass der Hauptzweig derzeit stabil ist (so stabil wie ein Work-in-Progress wie dieser nur sein kann) und der Entwicklungszweig der aktuelle Work-in-Progress ist. Beginnen Sie also mit dem Entwicklungszweig, um die neuesten Work-in-Progress-Updates zu erhalten, und erstellen Sie einen neuen Zweig mit Namen wie Feature/Name des Features oder Fix/Problem usw. Nehmen Sie die Änderungen vor und erstellen Sie dann einen neuen Pull Bitten Sie um eine erneute Zusammenführung mit dem Entwicklungszweig , wenn Sie mit Ihren Änderungen fertig sind.
Denken Sie vor allem daran, dass ich einen kompetenten Programmieransatz verwende, bei dem alles in eine einzige Quelle der Wahrheit , Consult-Omni.org, gelangt und dann in die entsprechenden Dateien (z. B. Consult-Omni.el) eingespeist wird. Wenn Sie eine Pull-Anfrage öffnen, in der Sie die .el-Dateien direkt bearbeitet haben, werde ich sie wahrscheinlich nicht genehmigen, da sie später überschrieben wird, wenn ich mich mit der .org-Datei befasse. Mit anderen Worten: Bearbeiten Sie die .el-Dateien nicht! Bearbeiten Sie nur die .org-Datei und konvertieren Sie sie in .el-Dateien. Denken Sie daran, dass kompetentes Programmieren in anderen Szenarien möglicherweise nicht viel Sinn macht, in diesem Fall jedoch beim Hinzufügen neuer Quellen/Funktionen durch Kopieren aus anderen Beispielen wirklich hilfreich ist (da sich alles in einer Organisationsdatei befindet), daher in diesem Fall Ich bestehe darauf, die kompetente Programmierung zu verwenden.
Natürlich wäre dieses Paket ohne die fantastischen Beratungs- und Einschiffungspakete nicht möglich gewesen. Es wurde auch von anderen Paketen inspiriert, einschließlich, aber nicht beschränkt auf, dem Vorgänger Counsel-Web sowie Engine-Mode, Emacs-Google-This und Helm.
Darüber hinaus möchte ich @karthink und @minad für ihre großartigen Vorschläge, Diskussionen, Beiträge usw. danken. Dieses Paket wäre ohne die Hilfe von @karthink beim Prototyping und der Ideenfindung (siehe Consult-Web-Mini) und ohne die wertvolle Hilfe von @minad nicht möglich gewesen Kommentare und Vorschläge.