Problemas con teclas y el caracter ~ en GNU/Linux (Inicio, Fin y Supr)
February 14th, 2008 by BusindreEs común encontrarse después de instalar una distro GNU/Linux que en ciertas consolas / terminales algunas de las teclas como son "Supr", "Inicio" y "Fin" no funcionan correctamente devolviendo el caracter "~" al ser presionadas. Esto tiene fácil solución, lo único que tenemos que hacer es modificar el fichero inputrc, ya sea el ubicado en /etc o el $HOME/.inputrc de cada home de usuario, el cual de no existir podemos crearlo sin ningún problema. Como en la mayoría de configuraciones, la configuración inputrc de nuestro home sobrescribe o complementa la de configuración global que encontramos en el directorio global /etc/.
El fichero inputrc se encarga de mapear las pulsaciones de teclado en ciertas situaciones. Es el fichero de inicio utilizado por la función readline (librería readline), que es la encargada de dar funcionalidad a las teclas pulsadas en la aplicación que use dicha librería readline, que en el caso de este articulo es Bash, pero realmente es usada por la mayoría de los interpretes de comandos usados en GNU/Linux. Como vemos al leer el contenido del archivo inputrc, están mapeadas las teclas pero mediante caracteres de escape extraños:
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
Este mapeo de ejemplo muestra como readline interpreta una pulsación y que tarea realiza al ser pulsada. Si tenemos problemas con algunas teclas solo debemos cambiar su funcionalidad o bien añadirla si no se encuentra. También podemos darle funcionalidades a otras teclas con otros fines, eso ya cada uno que lo configure como guste. Para poder saber que código se le pasa a readline al pulsar una determinada tecla de nuestro teclado, usaremos la combinación "Ctrl + V + Tecla" sobre la terminal que queremos corregir.
Ejemplo:
Ctrl + V + Tecla Inicio -> ^[[7^
Ctrl + V + Tecla Fin -> ^[[8^
Viendo esa salida en el fichero inputrc deberíamos poner
"\e[7~": beginning-of-line
"\e[8~": end-of-line
Dejo abajo un ejemplo de inputrc modificado como ejemplo complementario.
# Modified by Chris Lynn
# Allow the command prompt to wrap to the next line
set horizontal-scroll-mode Off
# Enable 8bit input
set meta-flag On
set input-meta On
# Turns off 8th bit stripping
set convert-meta Off
# Keep the 8th bit for display
set output-meta On
# none, visible or audible
set bell-style none
# All of the following map the escape sequence of the
# value contained inside the 1st argument to the
# readline specific functions
"\eOd": backward-word
"\eOc": forward-word
# for linux console
"\e[7~": beginning-of-line
"\e[8~": end-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
# for xterm
"\eOH": beginning-of-line
"\eOF": end-of-line
# for Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line
# End /etc/inputrc
Posted in How To |
March 10th, 2008 at 5:08 am
cómo hago para escribir caracteres ascii, q no están en el teclado, como éste:| ?
March 10th, 2008 at 3:56 pm
* Si quieres escribir codigos ASCII y ver su representación en la pantalla debes ir a una TTY (Cntrl + Alt + Teclas F*) y usar la tecla (Alt + Número (Teclado Numérico)).
Ejemplo:
Alt + 64 = @
NOTA: El teclado numérico debe estar desactivado.
* Si quieres escribir codigos en Hesadecimal y ver su representación en la pantalla podemos hacerlo de la siguiente forma:
Sintaxis: $’\x**’
Siendo ** el codido HEXADECIMAL del caracter que queremos mostrar en pantalla
Ejemplos:
$ echo $'\x21'!
$ echo $'\x22'"
$ echo $'\x41'A
$ echo $'\x42'B
PD: Los Números en Hexadecimal NO en ASCII