A dificuldade é que pressionar CapsLock não envia nada para os aplicativos do terminal, então o zsh não sabe disso.
Como sugerido por Stéphane Chazelas , você poderia usar XBindKeys para executar um comando shell quando CapsLock é pressionado. Um comando útil é organizar o envio do sinal SIGWINCH para zsh. Este sinal é enviado pelo kernel quando as configurações do tty size são modificadas (tipicamente por emuladores de terminal quando o tamanho da janela muda). Algumas indicações falsas de mudança de tamanho da janela não vão doer. Isso funcionará mesmo em um shell remoto sobre SSH se você tiver o encaminhamento do X11 na sessão SSH e enviar o sinal para o cliente SSH.
O Zsh não recalcula automaticamente a string de prompt, então diga para fazer isso configurando uma armadilha no SIGWINCH.
Em ~/.xbindkeysrc
:
"pkill -u $USER -SIGWINCH -x 'ssh|zsh'"
Caps_Lock
Em ~/.zshrc
:
# + your CapsLock function
trap 'zle reset-prompt 2> /dev/null' SIGWINCH
(Ou você pode fazer o que eu faço, que é não ter uma tecla CapsLock . Em zsh, você pode usar ESC u
( up-case-word
) para tornar a palavra após o cursor em maiúsculas , e você pode criar mais widgets para ajudar com isso, se quiser.)