El teclado numérico / bloqueo numérico zsh (z shell) no funciona

46

Acabo de actualizar a zsh / oh-my-zsh. Casi de inmediato noto en mi máquina que el teclado numérico de 10 dígitos no funciona. Estaba trabajando en bash y fish shell.

Curiosamente, si mantengo presionada la tecla fn / function, actúa como bloqueo numérico y funciona, pero no se "bloquea" y tendría que mantener presionada la tecla fn para escribir los números.

¿Alguna idea por ahí?

BradGreens
fuente

Respuestas:

89

La tecla del teclado numérico no envía los mismos símbolos de tecla que la tecla numérica 'normal' en la fila superior. Por ejemplo: el teclado numérico-1-tecla envía KP_1mientras que la tecla-1 solo envía 1.

Algunos terminales reasignan automáticamente la tecla del teclado numérico para enviar los mismos códigos al shell. Además, algunos shells (por ejemplo bash) simplemente interpretan las teclas del teclado numérico como sus equivalentes en el bloque principal.

zshno hace el mapeo automáticamente, pero puede usarlo bindkeypara hacer el mapeo por su cuenta. Tengo lo siguiente en mi ~/.zshrcpara que el teclado funcione:

# 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-stringse une in-stringa out-string. Si in-stringse escribe, out-stringse empuja hacia atrás y se trata como entrada.

Los códigos reales (por ejemplo ^[Oq) pueden ser diferentes en su sistema. Puede presionar Ctrl+ vseguido de la tecla en cuestión para obtener el código de su terminal.

Adaephon
fuente
3
Gracias señor, esto funcionó perfectamente para mí y el consejo Ctrl+ ves genial.
BradGreens
1
Gracias, esto fue realmente útil, pero faltaban algunas teclas para el teclado USB de Apple. Esta es la combinación de teclas para Apple Keyboard: # Teclado # 0. Introduzca bindkey -s "^ [Op" "0" bindkey -s "^ [On" "." bindkey -s "^ [OM" "^ M" # 1 2 3 bindkey -s "^ [Oq" "1" bindkey -s "^ [O" "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" "
y esto también es bueno: stackoverflow.com/questions/18042685/…
krowe
github.com/krowe/kshrc-k800-keybindings Hecho esto basado en esta respuesta.
krowe
16

Para completar la respuesta que dio @adaephon, los siguientes son los enlaces correctos para el teclado USB de Apple (A1243). Estos deben ser agregados 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
fuente
1
Robin, ¿podrías ampliar tu respuesta para incluir dónde OP debería ingresar esta información para corregir su problema?
music2myear
2
Esto funcionó para mí excepto +(tuvo que usar bindkey -s "^[Ok" "+") y =(falta bindkey -s "^[OX" "=")
desde el
4

También complementando la respuesta de @adaephon. Esto es lo que tuve que usar para mi computadora de escritorio Dell, podría ser de ayuda. Simplemente agréguelo a su archivo .zshrc.

(Por cierto, no agregue enlaces de todas las respuestas, solo debe tener un enlace por tecla)

# 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
fuente
¡Bienvenido a Super User! ¿Podría editar su respuesta para incluir una pequeña guía sobre qué es esto y cómo / dónde usarlo?
Excellll
Esta solución me funcionó para zsh con el teclado de Windows (PUTTY, con Terminal > Keyboard > Initial state of numeric pad > Normal)
Ivan Castellanos
3

En mi Mac OSX El Capitan, la tecla de punto es en ^[0nlugar de ^[01. También tengo un teclado inalámbrico Logitech para Mac y también tiene un =signo en el teclado numérico. Mi mapeo final se ve a continuación:

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

Sin embargo, la solución que otros propusieron funciona correctamente.

Mr. Doomsbuster
fuente
1

Si usa Kitty para acceder a un servidor Linux en SSH y el teclado funciona bien con Bash pero no con ZSH, puede intentar agregar lo siguiente en su ~/.zshrcarchivo de configuración:

# 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. Cierre sesión y vuelva a iniciar sesión para volver a cargar la configuración de ZSH, o alternativamente puede escribir lo siguiente en su terminal:

. ~/.zshrc

¡El teclado ahora debería funcionar como se esperaba!

Gabriel Hautclocq
fuente
Esto duplica otra respuesta y no agrega contenido nuevo. No publique una respuesta a menos que realmente tenga algo nuevo que aportar.
DavidPostill
Déjame estar en desacuerdo. Solo esta respuesta tiene códigos similares: superuser.com/a/907695/351420 Y explico el contexto y cómo usar esos códigos, en mi opinión, mejor que esta respuesta.
Gabriel Hautclocq