La documentación dice en la sección18.4 Aparatos, que "el trabajo de un widget es simplemente realizar alguna pequeña acción". Pero no puedo encontrar una descripción general de cómo invocar estas acciones, es decir, cómo llamar a un widget.
Lo he visto en ejemplos (por ejemplo verestas preguntas y respuestas) que los widgets pueden agruparse vinculados a claves usando bindkey KEY WIDGET
. Entonces uno puede llamar al widget usando KEY
.
Quería alternar set-local-history
y probé:
$ zle set-local-history 1
zle: widgets can only be called when ZLE is active
zle -h
no funciona, pero he encontradouna descripción de los argumentos aquí. Pero no parece que haya algo así --call
.
¿Qué estoy haciendo mal? ¿Cómo es posible llamar al widget sin clave de enlace? ¿Cómo puedo imprimir el estado actual? ( set-local-history
cambia el estado)
Respuesta1
Puede ejecutar el widget mediante el widget execute-named-cmd
, que está vinculado a ESC-x
(enlaces de emacs) o :
(enlaces de vi):
execute-named-cmd (ESC-x) (:) (unbound)
Lea el nombre de un comando del editor y ejecútelo.
Esto abre unminibúferdebajo de la línea de comando, donde puede iniciar los widgets zle. (¡El autocompletado está disponible!):
$ [ESC-x]
execute: set-[TAB]
set-local-history set-mark-command
Para consultar el estado de zle
(incluido el historial local), use la variable $ZLE_STATE
(solo accesible dentro de las funciones del widget):
ZLE_STATE (scalar)
Contiene un conjunto de palabras separadas por espacios que describen el estado actual del archivo.
Actualmente, los estados que se muestran son el modo de inserción establecido por los widgets de modo de sobrescritura o vi-replace y si los comandos de historial visitarán las entradas importadas según lo controlado por el widget set-local-history. La cadena contiene
insert
si los caracteres que se insertarán en la línea de comando mueven los caracteres existentes hacia la derecha ooverwrite
si los caracteres que se insertarán sobrescriben los caracteres existentes.Contienelocalhistory
si solo se visitarán los comandos del historial local oglobalhistory
si también se visitarán los comandos del historial importados.Las subcadenas están ordenadas en orden alfabético, de modo que si desea probar dos subcadenas específicas de una manera preparada para el futuro, puede hacer coincidir haciendo lo siguiente:
if [[ $ZLE_STATE == *globalhistory*insert* ]]; then ...; fi
Todas las citas de man zshzle
.
Respuesta2
Si está utilizando, tmux
puede llamar a la clave vinculada con send-keys
.
Ejemplos:
# Current pane
$ tmux send-keys C-r
# Some targeted pane
$ tmux send-keys -t SESSION_NAME:WINDOW_NUMBER.PANE_NUMBER C-z