zsh (shell z) numpad / numlock não funciona

38

Acabei de atualizar para zsh / oh-my-zsh. Quase imediatamente noto na minha máquina que o numpad de 10 dígitos não está funcionando. Ele estava trabalhando em bash e fish shell.

Curiosamente, se eu mantiver pressionada a tecla fn / function ela atua como numlock e funciona, mas não "bloqueia" e eu teria que manter pressionada a tecla fn para digitar os números.

Alguma idéia por aí?

    
por BradGreens 15.04.2014 / 22:42

5 respostas

76

A tecla numpad não envia os mesmos símbolos de tecla que a tecla numérica 'normal' na linha superior. Por exemplo: A tecla numpad-1 envia KP_1 enquanto a tecla 1 apenas envia 1 .

Alguns terminais automaticamente remapear a tecla numpad para enviar os mesmos códigos para o shell. Além disso, alguns shells (por exemplo, bash ) apenas interpretam as teclas numéricas como seus equivalentes no bloco principal.

zsh não faz o mapeamento automaticamente, mas você pode usar bindkey para fazer o mapeamento sozinho. Eu tenho o seguinte no meu ~/.zshrc para obter o funcionamento do teclado:

# Keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[Ol" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + -  * /
bindkey -s "^[Ok" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"

bindkey -s in-string out-string liga in-string a out-string . Se in-string for digitado, out-string será retrocedido e tratado como entrada.

Os códigos reais (por exemplo, ^[Oq ) podem ser diferentes no seu sistema. Você pode pressionar Ctrl + v seguido pela chave em questão para obter o código para o seu terminal.

    
por 15.04.2014 / 23:46
13

Para completar a resposta que @adaephon deu, a seguir estão as ligações corretas para o teclado USB da Apple (A1243). Estes precisam ser adicionados a ~/.zshrc .

# Fix numeric keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + -  * /
bindkey -s "^[Ol" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"
    
por 24.10.2014 / 00:10
3

Também complementando a resposta do @adaephon. Aqui está o que eu tive que usar para o meu Dell Desktop, pode ser de ajuda. Basta adicioná-lo ao seu arquivo .zshrc.

(BTW não adiciona ligações de todas as respostas, você deve ter apenas uma ligação por chave)

# Keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + -  * /
bindkey -s "^[OQ" "/"
bindkey -s "^[OR" "*"
bindkey -s "^[OS" "-"
bindkey -s "^[Ol" "+"
#END Keypad
    
por 29.04.2015 / 18:57
1

No meu Mac OSX El Capitan, a chave do período é ^[0n em vez de ^[01 . Também tenho um teclado sem fio da Logitech para o Mac e também tem um sinal = no teclado numérico. Meu mapeamento final se parece com abaixo:

# Keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + -  * / =
bindkey -s "^[Ok" "+"
bindkey -s "^[Om" "-"
bindkey -s "^[Oj" "*"
bindkey -s "^[Oo" "/"
bindkey -s "^[OX" "="

A solução proposta pelos outros funciona corretamente no entanto.

    
por 22.11.2015 / 23:44
1

Se você usa o Kitty para acessar um servidor linux no SSH e se o teclado está funcionando bem com o Bash, mas não com o ZSH, você pode tentar adicionar o seguinte no arquivo ~/.zshrc config:

# Keypad
# 0 . Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" "."
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + -  * /
bindkey -s "^[Ol" "+"
bindkey -s "^[OS" "-"
bindkey -s "^[OR" "*"
bindkey -s "^[OQ" "/"

Salvar. Faça logout e faça login novamente para recarregar a configuração do ZSH ou, como alternativa, você pode digitar o seguinte no seu terminal:

. ~/.zshrc

O teclado agora deve funcionar como esperado!

    
por 21.12.2016 / 11:53

Tags