Los códigos ansi son caracteres especiales que las antiguas terminales de texto interpretaban como comandos, de forma que podíamos conseguir "efectos especiales" en ellas.
Con esos caracteres especiales podíamos, por ejemplo, borrar la pantalla o hacer que el cursor fuera a una posición determinada.
Actualmente, las ventanas de MS-DOS de Windows o las shell/bash de linux se pueden configurar para que interpreten estos caracteres.
Un código ansi es una secuencia especial de caracteres que un terminal de texto, en vez de mostrar, interpreta como comandos y "ejecuta".
Si tenemos un fichero de texto ascii normal con la palabra "hola" y lo mostramos en un terminal de texto por medio del comando "cat" de unix o el comando "type" de ms-dos, el terminal mostrará la palabra "hola".
Si tenemos el mismo fichero de texto, pero delante de "hola" hemos escrito los caracteres "<esc>[31;44mhola", nuestro texto "hola" saldrá en rojo sobre fondo azul (siempre que nuestro terminal de texto soporte colores). De hecho, el terminal de texto a partir de ese momento escribirá todo con letras rojas sobre fondo azul. El <esc> es el código de escape. Desde el editor "vi" de linux se consigue en el modo de inserción de texto, pulsando control-v y luego escape. Desde un "edit" de ms-dos, pulsando control-p y luego escape.
Actualmente los terminales de texto son las ventanas de comandos que muestran nuestros entornos gráficos de ventanas (gnome, kde, windows, etc). En unix, son las ventanas de shell desde las que ejecutamos comandos, en windows sería la ventanita que nos sale al elegir en el menú de "inicio", "aplicaciones" ... "ms-dos" o "simbolo del sistema". Las de linux soportan los códigos ansi. Las de windows también ... si lo configuramos así (antiguamente se ponia en el fichero config.sys algo asi como "device=[unidad][ruta]ansi.sys").
Los códigos ansi permiten controlar colores de las letras, borrar pantalla, llevar el cursor a una determinada posición, etc, etc.
Esto nos permite que nuestros programas sencillos (no gráficos) de C/C++ puedan escribir su presentación en pantalla de una forma más ordenada y bonita. Basta con hacer "printf" o "cout" de estas secuencias de caracteres para controlar los colores y posiciones de los textos que escribimos. Por ejemplo
escribe en pantalla nuestro "hola" con letra roja y fondo azul.
En la página http://personal.redestb.es/mgtalles/fortran/ansi.htm tienes una tabla más o menos completa de códigos ansi. Aunque lo menciona como algo de ms-dos y en fortran, también funciona en linux con C. En la versión de linux que tengo yo, funciona bien con gnome. Con KDE no lo he conseguido de momento, no muestra las secuencias ansi como si fueran caracteres normales, pero tampoco cambia los colores. También lo he probado en una máquina de SUN con Solaris y funciona correctamente.
Las secuencias ANSI, al menos inicialmente, también permiten la redefinición del teclado, de forma que podemos hacer que al pulsar la admiración !, nos salga un interrogante ? o incluso una cadena completa de texto. Si la cadena de texto es un comando y al final ponemos un retorno de carro, la pulsación de la tecla ejecutará el comando.
Las famosas bombas ansi consisten precisamente en eso, hacer que una tecla ejecute un comando "nocivo". Para "infectar" nuestro ordenador con una bomba de estas, basta con hacer "type" o "cat" de un fichero de texto malicioso.
En la página mencionada anteriormente para los códigos ansi, falta el código para redefinición de teclado, pero aquí lo tienes
<esc>[<codigo_tecla>;<cadena>p
<codigo_tecla>
puede ser
un número que represente la tecla o bien un caracter entre
comillas.
<cadena> puede ser un código que
represente una tecla, un caracter entre comillas o una cadena completa entre
comillas.
Aquí tienes una tabla completa de los códigos de las teclas que he sacado de aqui
He probado a redefinir teclas tanto en linux como en solaris y no lo he conseguido. No sé si se debe a que los termiales de UNIX no soportan dichos códigos (sin embargo no los muestran en pantalla), a algún tema de permisos o de configuración de las terminales.