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.
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
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.
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.