ZSH: ¿cómo llamar directamente a los widgets ZLE?

ZSH: ¿cómo llamar directamente a los widgets ZLE?

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-historyy probé:

$ zle set-local-history 1
zle: widgets can only be called when ZLE is active

zle -hno 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-historycambia 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 o overwritesi los caracteres que se insertarán sobrescriben los caracteres existentes.Contiene localhistorysi solo se visitarán los comandos del historial local o globalhistorysi 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, tmuxpuede 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

información relacionada