2011-03-15 27 views
8

Por lo general, encuentro interesantes configuraciones de enlace zsh (a través del comando bindkey) en la Web. Mi pregunta es ¿cómo interpreto a qué se asignaron estas secuencias escapadas? Por ejemplo, aquí hay un fragmento de oh-my-zsh 's key-bindings.zshInterpretar zsh bindkey secuencias escapadas

bindkey "^[[H" beginning-of-line 
bindkey "^[[1~" beginning-of-line 
bindkey "^[[F" end-of-line 
bindkey "^[[4~" end-of-line 

es una referencia sobre cómo representados estos mapas de teclas? Además, ¿es específico de zsh o específico de la plataforma?

Soy consciente de que puedo usar cat o Ctrl-V para encontrar la secuencia escapada correspondiente para ciertas teclas. Dado que podría usar la fuerza bruta para encontrar la coincidencia inversa, pero esto no funcionaría para las teclas que no existen en mi teclado (por ejemplo, las computadoras portátiles Home/End en Mac). Por lo tanto, preferiría métodos que pudieran determinar las claves independientemente del teclado físico.

Respuesta

4

Si se habla de un flujo típico de eventos de unix/linux, la imagen es más o menos la siguiente.

El programa del emulador de terminal recibe los eventos X, tales como el botón "y así" presionado, se suelta otro botón. Esos eventos se pueden rastrear con la utilidad xev, por ejemplo. El emulador de terminal traduce esos eventos en secuencias de escape.

Esta traducción no está inamovible. Se puede configurar. Los diferentes emuladores de terminal se configuran de manera diferente. Por ejemplo xterm traducción se puede configurar en Xdefaults así:

XTerm*VT100*Translations:#override \ 
Ctrl<Key>Left:   string(0x1B) string(OD) \n\ 
Ctrl<Key>Right:   string(0x1B) string(OC) \n\ 

Nota 0x1B que es ESC. ESC también se imprime como ^[.

Ahora, zsh usa zle (y bash usa la biblioteca readline para el mismo propósito) que interpreta algunas de las secuencias para moverse por la línea de entrada y realizar acciones de edición.

Los siguientes textos deben proporcionar más detalles adicionales.

Zsh Line editor description

Wikipedia article on escape sequences

y

Xterm Control Sequences

+0

Pero eso no incluye otros emuladores de terminal que no se estén ejecutando bajo X11. –

+0

Derecha. Esto es muchas en muchas situaciones. Muchos teminals, muchos shells, muchos keyboard drivers, etc. Todos ellos se configuran de forma diferente. Nunca pude encontrar dónde instalar las traducciones en el terminal gnome, por ejemplo. – horsh

+0

Gracias por la explicación. Sin embargo, disculpe a mi ignorante, ya que no estoy seguro de si responde mi pregunta. Busqué las referencias dadas y aún no pude encontrar cómo traducir las secuencias escapadas a las secuencias de teclas correspondientes (es decir, qué teclas presionadas corresponden a "^ [[H") – ejel