ZSH: como chamar widgets ZLE diretamente?

ZSH: como chamar widgets ZLE diretamente?

A documentação diz na seção18.4 Widgets, que "o trabalho de um widget é simplesmente executar alguma pequena ação". Mas não consigo encontrar uma descrição geral de como invocar essas ações, ou seja, como chamar um widget.

Eu vi em exemplos (por exemplo, vejaestas perguntas e respostas) que os widgets podem ser vinculados a chaves usando bindkey KEY WIDGET. Então pode-se chamar o widget usando KEY.

Eu queria alternar set-local-historye tentei:

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

zle -hnão funciona, mas descobriuma descrição dos argumentos aqui. Mas não parece que haja algo parecido --call.

O que estou fazendo de errado? Como é possível chamar o widget sem bindkey? Como posso imprimir o status atual? ( set-local-historyalterna o estado)

Responder1

Você pode executar o widget pelo widget execute-named-cmd, que está vinculado a ESC-x(ligações emacs) ou :(ligações vi):

execute-named-cmd (ESC-x) (:) (unbound)

Leia o nome de um comando do editor e execute-o.

Isto abre umamini-bufferabaixo da linha de comando, onde você pode iniciar os widgets zle. (O preenchimento automático está disponível!):

$ [ESC-x]
execute: set-[TAB]
set-local-history  set-mark-command

Para consultar o estado de zle(incluindo o histórico local), use a variável $ZLE_STATE(acessível apenas dentro das funções do widget):

ZLE_STATE (scalar)

Contém um conjunto de palavras separadas por espaços que descrevem o estado atual do zle.

Atualmente, os estados mostrados são o modo de inserção conforme definido pelos widgets overwrite-mode ou vi-replace e se os comandos de histórico visitarão entradas importadas conforme controlado pelo widget set-local-history. A string contém insert se os caracteres a serem inseridos na linha de comando movem os caracteres existentes para a direita ou overwritese os caracteres a serem inseridos substituem os caracteres existentes.Contém localhistoryse apenas os comandos do histórico local serão visitados ou globalhistoryse os comandos do histórico importado também serão visitados.

As substrings são classificadas em ordem alfabética para que, se você quiser testar duas substrings específicas de uma forma preparada para o futuro, você possa fazer a correspondência fazendo:

if [[ $ZLE_STATE == *globalhistory*insert* ]]; then ...; fi

Todas as citações de man zshzle.

Responder2

Se estiver usando, tmuxvocê pode chamar a chave vinculada com send-keys.

Exemplos:

# Current pane
$ tmux send-keys C-r

# Some targeted pane
$ tmux send-keys -t SESSION_NAME:WINDOW_NUMBER.PANE_NUMBER C-z

informação relacionada