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-history
e tentei:
$ zle set-local-history 1
zle: widgets can only be called when ZLE is active
zle -h
nã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-history
alterna 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 ouoverwrite
se os caracteres a serem inseridos substituem os caracteres existentes.Contémlocalhistory
se apenas os comandos do histórico local serão visitados ouglobalhistory
se 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, tmux
você 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