Blog ElCodiguero
27 Aug 2014 Linux & UNIX

Configurar flechas y teclas Inicio, Fin en ksh

ksh es seguramente la segunda shell más popular en los sistemas Unix, detrás de Bash y sus variantes. Es una shell muy avanzada, de la que Bash toma muchas de las características que damos por sentadas a la hora de utilizar la línea de comandos. Sin embargo, puede resultar difícil de usar debido a que fue diseñada para ser usada con teclados de terminales, no con los teclados QWERTY modernos.

Configurar ksh para que acepte teclas como las flechas, Inicio (Home), Fin (End), o Retroceso (Backspace) es sencillo, aunque no intuitivo y depende del emulador de terminal que se use. Lo siguiente me funcionó correctamente en Solaris.

Como muchas veces es más sencillo entender las herramientas en vez de intentar cambiarlas a nuestro gusto, veremos primero cómo funciona la edición de la línea de comandos, tanto en ksh como en Bash.

Modos de edición

La línea de comandos, así como el historial de órdenes ingresadas, se puede editar de dos modos. En Linux en general el modo predefinido es el modo "emacs", en el cual lo escrito se puede modificar usando comandos similares a los del editor Emacs. Este editor es bastante más amigable con las teclas especiales que la alternativa, el modo "vi", en el cual usamos órdenes de vi para editar la línea de comandos (ej.: "dw" borra una palabra).

El modo de edición se cambia usando

set -o *modo*

Donde modo es vi o emacs. Cualquiera de estos modos permite navegar la línea de comandos, aunque no con las flechas del teclado. La siguiente es una tabla incompleta con algunas equivalencias:

Acción Tecla modo vi modo emacs
Comando anterior Arriba k Ctrl-p
Comando siguiente Abajo j Ctrl-n
Caracter anterior Izquierda h Ctrl-b
Caracter siguiente Derecha l Ctrl-f
Principio de línea Inicio ^ Ctrl-A
Fin de línea Fin $ Ctrl-E
Borrar caracter anterior Retroceso X Ctrl-h
Borrar caracter siguiente Suprimir x Ctrl-d
Borrar palabra siguiente N/A dw Ctrl-w

Como vemos, de forma nativa la shell tiene soporte para las acciones usuales de edición de texto, por lo que lograr que las teclas del teclado moderno funcionen es nada más cuestión de hacer que la shell asigne una tecla particular (ej.: Arriba) a la acción esperada (Comando anterior)

Asignar teclas

Para decir a ksh que asigne las teclas, debemos agregar lo siguiente al archivo .profile:

set -o emacs
alias __A='^P'    # Flecha arriba = Ctrl-P
alias __B='^N'    # Flecha abajo = Ctrl-N
alias __C='^F'    # Flecha derecha = Ctrl-F
alias __D='^B'    # Flecha izquierda = Ctrl-B
alias __H='^A'    # Inicio = Ctrl-A
alias __Y='^E'    # Fin = Ctrl-E

Notas:

En general lo mejor es no luchar contra el sistema operativo, y cambiar el shell de login cuando es posible, bash tiene un soporte excelente para los teclados modernos. Cuando no es posible cambiar el shell, sin embargo, vale la pena intentar que el uso de la línea de comandos sea lo más cómodo posible.

Activa Javascript para para cargar los comentarios, basados en DISQUS

El Blog de ElCodiguero funciona sobre Pelican

Inicio | Blog | Acerca de