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

46

Acabei de atualizar para zsh / oh-my-zsh. Quase imediatamente noto na minha máquina que o teclado numérico de 10 dígitos não está funcionando. Ele estava trabalhando em bash e casca de peixe.

Estranhamente, se eu pressionar a tecla fn / function, ela funcionará como numlock e funcionará, mas não "trava" e eu teria que continuar pressionando fn para digitar os números.

Alguma idéia por aí?

BradGreens
fonte

Respostas:

89

A tecla numpad não envia os mesmos símbolos da tecla numérica 'normal' na linha superior. Por exemplo: A tecla numpad-1 envia KP_1enquanto a tecla 1 envia 1.

Alguns terminais remapeiam automaticamente a tecla numpad para enviar os mesmos códigos ao shell. Além disso, algumas conchas (por exemplo bash) apenas interpretam as teclas do teclado numérico como seus equivalentes no bloco principal.

zshnão faz o mapeamento automaticamente, mas você pode usá bindkey-lo por conta própria. Tenho o seguinte no meu ~/.zshrcpara fazer o teclado funcionar:

# 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-stringliga in-string- se a out-string. Se in-stringdigitado, out-stringé retornado e tratado como entrada.

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

Adaephon
fonte
3
Obrigado senhor, isso funcionou perfeitamente para mim e a dica Ctrl+ vé ótima!
precisa saber é o seguinte
1
Obrigado, isso foi realmente útil, mas faltavam algumas teclas para o teclado USB da Apple. Esta é a ligação de teclas do Apple Keyboard: # Teclado # 0. Digite bindkey -s "^ [Op" "0" bindkey -s "^ [Ativado" "." bindkey -s "^ [OM" "^ M" # 1 2 3 bindkey -s "^ [Oq" "1" bindkey -s "^ [Ou" "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" "
e isso é muito bom: stackoverflow.com/questions/18042685/...
krowe
github.com/krowe/kshrc-k800-keybindings Feito isso com base nesta resposta.
krowe
16

Para concluir 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" "/"
bindkey -s "^[OX" "="
Robin Daugherty
fonte
1
Robin, você poderia expandir sua resposta para incluir onde o OP deve inserir essas informações para corrigir o problema?
music2myear
2
Isso funcionou para mim, exceto +(teve de uso bindkey -s "^[Ok" "+") e =(faltando bindkey -s "^[OX" "=")
dain
4

Também complementa a resposta de @adaephon. Aqui está o que eu tive que usar para o meu Dell Desktop, pode ser útil. 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
Daniel Bermudez
fonte
Bem-vindo ao Super Usuário! Você poderia editar sua resposta para incluir um pouco de orientação sobre o que é isso e como / onde usá-lo?
Excellll
Esta solução funcionou para mim para zsh com teclado janelas (arremate, com Terminal > Keyboard > Initial state of numeric pad > Normal)
Ivan Castellanos
3

No meu Mac OSX El Capitan, a chave do período é em ^[0nvez 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 é exibido 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 por outros funciona corretamente, no entanto.

Mr. Doomsbuster
fonte
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, tente adicionar o seguinte no seu ~/.zshrcarquivo de configuração:

# 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" "/"

Salve . Efetue logout e efetue 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!

Gabriel Hautclocq
fonte
Isso duplica outra resposta e não adiciona novo conteúdo. Não poste uma resposta, a menos que você realmente tenha algo novo para contribuir.
DavidPostill
Deixe-me discordar. Somente esta resposta tem códigos semelhantes: superuser.com/a/907695/351420 E eu explico o contexto e como usar esses códigos, imho melhor do que esta resposta.
Gabriel Hautclocq 4/17/17