In der Dokumentation heißt es im Abschnitt18.4 Widgets, dass „die Aufgabe eines Widgets einfach darin besteht, eine kleine Aktion auszuführen“. Ich kann jedoch keine allgemeine Beschreibung finden, wie diese Aktionen aufgerufen werden, d. h. wie ein Widget aufgerufen wird.
Ich habe in Beispielen gesehen (siehe zum Beispieldiese Frage und Antwort), dass Widgets mit an Schlüssel gebunden werden können bindkey KEY WIDGET
. Anschließend kann man das Widget mit aufrufen KEY
.
Ich wollte umschalten set-local-history
und habe Folgendes versucht:
$ zle set-local-history 1
zle: widgets can only be called when ZLE is active
zle -h
funktioniert nicht, aber ich habe festgestellteine Beschreibung der Argumente hier. Aber so etwas scheint es nicht zu geben --call
.
Was mache ich falsch? Wie kann ich das Widget ohne Bindkey aufrufen? Wie kann ich den aktuellen Status ausdrucken? ( set-local-history
schaltet den Status um)
Antwort1
Sie können das Widget über das Widget ausführen , das an (Emacs-Bindungen) oder (VI-Bindungen) execute-named-cmd
gebunden ist :ESC-x
:
execute-named-cmd (ESC-x) (:) (unbound)
Liest den Namen eines Editorbefehls und führt ihn aus.
Dies eröffnet eineMini-Pufferunterhalb der Kommandozeile, wo Sie zle-Widgets starten können. (Autovervollständigung ist verfügbar!):
$ [ESC-x]
execute: set-[TAB]
set-local-history set-mark-command
Um den Status zle
(einschließlich des lokalen Verlaufs) abzufragen, verwenden Sie die Variable $ZLE_STATE
(nur innerhalb von Widget-Funktionen zugänglich):
ZLE_STATE (scalar)
Enthält eine Reihe durch Leerzeichen getrennter Wörter, die den aktuellen ZLE-Status beschreiben.
Derzeit werden die Zustände des Einfügemodus angezeigt, der von den Widgets „overwrite-mode“ oder „vi-replace“ festgelegt wird, und ob Verlaufsbefehle importierte Einträge besuchen, wie vom Widget „set-local-history“ gesteuert. Die Zeichenfolge enthält,
insert
ob in die Befehlszeile einzufügende Zeichen vorhandene Zeichen nach rechts verschieben oderoverwrite
ob einzufügende Zeichen vorhandene Zeichen überschreiben.Es enthält die Angabelocalhistory
, ob nur lokale Verlaufsbefehle oderglobalhistory
auch importierte Verlaufsbefehle aufgerufen werden.Die Teilzeichenfolgen werden in alphabetischer Reihenfolge sortiert, sodass Sie, wenn Sie zukunftssicher auf zwei bestimmte Teilzeichenfolgen testen möchten, wie folgt einen Abgleich durchführen können:
if [[ $ZLE_STATE == *globalhistory*insert* ]]; then ...; fi
Alle Zitate aus man zshzle
.
Antwort2
Wenn Sie verwenden, tmux
können Sie den gebundenen Schlüssel mit aufrufen send-keys
.
Beispiele:
# Current pane
$ tmux send-keys C-r
# Some targeted pane
$ tmux send-keys -t SESSION_NAME:WINDOW_NUMBER.PANE_NUMBER C-z