Anterior Siguiente Indice

4. Más gaitas

Mientras esperamos el día en que las distribuciones de Linux traigan las diferentes definiciones de locale para su internacionalización, hay algunas cosillas que podemos afinar.

4.1 Variables de entorno

Puedes ponerlas en /etc/profile o en tu .profile particular. He seguido la sintaxis de bash. Si usas otro shell posiblemente tengas que cambiar export por la orden equivalente.

less

Para visualizar con less ficheros que contengan caracteres de 8 bits:

export LESSCHARDEF=8bcccbcc18b.

Esto hará que se consideren como imprimibles todos los caracteres desde el 32 hasta el 255, lo que puede acarrear problemas si se usa en una terminal vt200, por ejemplo, pero permite ver caracteres gráficos desde el PC. Si tienes una terminal en ttySn puedes poner esto:

export LESSCHARDEF=8bcccbcc18b.
if [ "`tty`" = "/dev/ttySn" ]
then
   TERM=vt220d
   unset LESSCHARDEF
   export LESSCHARSET=latin1
else
   TERM=linux
fi
export TERM

lo que hará que si se entra por ttySn, less no considere como imprimibles los caracteres del 128 al 160 (los caracteres gráficos en la fuente lat1-16.psf, pero que son interpretados como caracteres de control por el vt200).

LANG, LC_CTYPE, etc...

Estas variables son las que se usan para presentar el formato de la fecha, orden alfabético, etc. Desgraciadamente que yo sepa aún no están implementadas en las distribuciones habituales de Linux. De todas formas puedes añadir esto:

export LANG=es_ES

4.2 isprint

Esta es la función del sistema que decide si un carácter es imprimible o no. Si la distribución soportase locale, debería funcionar bien, pero tal como está ahora la cuestión, sólo devuelve como imprimibles los caracteres ASCII.

Esto provoca que muchos programas compilados con #include <ctype.h> no muestren correctamente los caracteres no ASCII. Como esto puede cambiar en un futuro, es importante que antes de aplicar el cambio que se propondrá a continuación compruebes tu sistema con el siguiente programa:

#include <locale.h>
#include <ctype.h>

void main(void)
{
unsigned char c;

setlocale(LC_CTYPE,"");

for (c=191;c<211;c++)
        {
        printf("%d - %c ",c,c);
        if (isprint(c)) puts("es imprimible");
        else puts("no es imprimible");
        }
}

Graba el texto anterior con el original nombre de prueba.c y compílalo con

$ gcc -s -o prueba prueba.c

y pruébalo así:

$ export LC_CTYPE=ISO-8859-1
$ ./prueba

Seguramente saldrán todos los caracteres como no imprimibles. Por si acaso asegúrate antes probando con otros valores de LC_CTYPE, tales como es_ES, fr_FR, pt_PT, etc. Para saber más posibles valores de LC_CTYPE, consulta el fichero locale.alias, que tendrás (si instalaste X) por /var/X11R6/lib/locale o algún otro directorio similar.

Si, y sólo si, el programa prueba clasifica como no imprimibles los caracteres que saca, puedes hacer el siguiente cambio en /usr/include/ctype.h.

Primero haz copia de seguridad del fichero:

# cd /usr/include
# cp -a ctype.h ctype.h.orig

En la línea 150 aprox. cambia

#define      isprint(c)      __isctype((c), _ISprint)

por

#define isprint(c)      (((c & 0xff) == 0x1b) || ((c & 0xff) > 0x1f))

Este cambio de ctype.h fue publicado por Pablo Saratxaga <srtxg@f2219.n293.z2.fidonet.org> en el difunto grupo es.foro.unix. Yo he recompilado con él algunos programas como ncftp y tin, y ha funcionado muy bien.

4.3 Configuración de algunos programas

dosemu

Si arrancamos dosemu en modo texto, los caracteres que ocupen una posición mayor que el 127 ya no se verán bien. Para remediarlo se puede habilitar el acceso a la VGA, con lo que dosemu usará el juego de caracteres de nuestra tarjeta gráfica, que es del tipo IBM, por lo menos si usamos Linux en un ix86. Esto se consigue poniendo lo siguiente en el fichero de configuración (generalmente /etc/dosemu.conf):

video { vga  console  graphics }

También es conveniente que tengamos las siguiente opción:

keyboard {  layout es-latin1  keybint on  rawkeyboard on  }

Con esto y el programa keybes.com de Pedro Maicas, no debería haber ningún problema para ver y teclear los caracteres mayores de 127.

pine

Se puede cambiar la configuración desde el propio programa, o bien editar el siguiente cambio en el fichero ~/.pinerc:

character-set=ISO-8859-1

Desde la versión 3.92, Pine ya permite poner artículos con 8 bits en los grupos de noticias (en el correo dependerá de la versión de sendmail y de cómo esté configurado). Para habilitar esta opción, añadir enable-8bit-nntp-posting a la lista feature-list del fichero mencionado.

Existe también un fichero que efectúa cambios globales (para todos los usuarios del sistema). El fichero se llama pine.conf, y su ubicación depende de la distribución que usemos.

ELM

Añadir lo siguiente a ~/.elm/elmrc:

charset=ISO-8859-1
displaycharset=ISO-8859-1
textencoding = 8bit

También se pueden hacer estos cambios para todos los usuarios. Basta añadir lo mismo al fichero general de configuración, que en la Slackware está en /var/lib/elm/elm.rc.

TIN

Añadir lo siguiente a ~/.tin/headers:

Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Algunas versiones modernas, como la 1.3 unoff, ya incorporan este tipo de cabeceras, por lo que la edición de este fichero es innecesaria.


Anterior Siguiente Indice