Exclui o mapa de teclado e desativa completamente a chave no zsh

3

Eu quero desabilitar a chave Insert completamente em zsh. Essa chave não tem uso real e só me irrita quando eu a acerto acidentalmente.

Descobri como remover a ligação de overwrite-mode

bindkey -r "^[[2~"

Mas agora, quando eu realmente clico em Insert , em vez de ativar o modo overwrite, ele imprime ~ na posição do cursor.

Coisa semelhante acontece quando pressiono F12 , que não está ligado a nada. Também imprime ~ .

Como eu posso desabilitar completamente a tecla Insert (e F12 ), de forma que pressioná-la não faça nada em zsh?

Eu não quero desabilitar a chave Insert globalmente, porque alguns outros programas podem realmente usá-la para propósitos úteis.

    
por 400 the Cat 01.11.2016 / 17:08

1 resposta

3

Se você pressionar uma tecla especial (como Insert ) que envia uma seqüência de escape que não é reconhecida por zsh , ela fará isso. O zsh tentará fazer algo com os bytes individuais da sequência de escape.

Olhando para o resultado de bindkey , parece que o zsh não tem nenhuma função adequada que possa ser ligada a uma chave para ignorá-lo . Mas você pode voltar Inserir para uma macro vazia:

bindkey -s '\e[2~' ''

Da mesma forma para F12 . Pressione Ctrl + V F12 para ver qual seqüência de escape F12 envia, normalmente

bindkey -s '\e[24~' ''

De acordo com a página de manual zshzle , há uma limitação com essa abordagem:

As well as ZLE commands, key sequences can be bound to other strings, by using 'bindkey -s'. When such a sequence is read, the replacement string is pushed back as input, and the command reading process starts again using these fake keystrokes. This input can itself invoke urther replacement strings, but in order to detect loops the process will be stopped if there are twenty such replacements without a real command being read.

A vinculação a \a , como sugerido originalmente, não parece ter essa desvantagem, ou seja,

bindkey -s '\e[2~' '\a'
    
por 02.11.2016 / 00:16