<HTML> <HEAD> <TITLE>fuente_ISO-COMO: Más gaitas</TITLE> </HEAD> <BODY> <A HREF="Fuente-ISO-Como-3.html">Anterior</A> <A HREF="Fuente-ISO-Como-5.html">Siguiente</A> <A HREF="Fuente-ISO-Como.html#toc4">Indice</A> <HR> <H2><A NAME="s4">4. Más gaitas</A></H2> <P>Mientras esperamos el día en que las distribuciones de Linux traigan las diferentes definiciones de <CODE>locale</CODE> para su internacionalización, hay algunas cosillas que podemos afinar.</P> <H2><A NAME="ss4.1">4.1 Variables de entorno</A></H2> <P>Puedes ponerlas en <CODE>/etc/profile</CODE> o en tu <CODE>.profile</CODE> particular. He seguido la sintaxis de <CODE>bash</CODE>. Si usas otro shell posiblemente tengas que cambiar <CODE>export</CODE> por la orden equivalente.</P> <H3><CODE>less</CODE></H3> <P>Para visualizar con <CODE>less</CODE> ficheros que contengan caracteres de 8 bits:</P> <P> <BLOCKQUOTE><CODE> <PRE> export LESSCHARDEF=8bcccbcc18b. </PRE> </CODE></BLOCKQUOTE> </P> <P>Esto hará que se consideren como imprimibles <B>todos</B> los caracteres desde el 32 hasta el 255, lo que puede acarrear problemas si se usa en una terminal <CODE>vt200</CODE>, por ejemplo, pero permite ver caracteres gráficos desde el PC. Si tienes una terminal en <CODE>ttySn</CODE> puedes poner esto:</P> <P> <BLOCKQUOTE><CODE> <PRE> export LESSCHARDEF=8bcccbcc18b. if [ "`tty`" = "/dev/ttySn" ] then TERM=vt220d unset LESSCHARDEF export LESSCHARSET=latin1 else TERM=linux fi export TERM </PRE> </CODE></BLOCKQUOTE> </P> <P>lo que hará que si se entra por <CODE>ttySn</CODE>, <CODE>less</CODE> no considere como imprimibles los caracteres del 128 al 160 (los caracteres gráficos en la fuente <CODE>lat1-16.psf</CODE>, pero que son interpretados como caracteres de control por el <CODE>vt200</CODE>).</P> <H3><CODE>LANG, LC_CTYPE</CODE>, etc...</H3> <P>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:</P> <P> <BLOCKQUOTE><CODE> <PRE> export LANG=es_ES </PRE> </CODE></BLOCKQUOTE> </P> <H2><A NAME="ss4.2">4.2 <CODE>isprint</CODE></A></H2> <P>Esta es la función del sistema que decide si un carácter es imprimible o no. Si la distribución soportase <CODE>locale</CODE>, debería funcionar bien, pero tal como está ahora la cuestión, sólo devuelve como imprimibles los caracteres <CODE>ASCII</CODE>. </P> <P>Esto provoca que muchos programas compilados con <CODE>#include <ctype.h></CODE> 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:</P> <P> <BLOCKQUOTE><CODE> <PRE> #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"); } } </PRE> </CODE></BLOCKQUOTE> </P> <P>Graba el texto anterior con el original nombre de <CODE>prueba.c</CODE> y compílalo con</P> <P> <BLOCKQUOTE><CODE> <PRE> $ gcc -s -o prueba prueba.c </PRE> </CODE></BLOCKQUOTE> </P> <P>y pruébalo así:</P> <P> <BLOCKQUOTE><CODE> <PRE> $ export LC_CTYPE=ISO-8859-1 $ ./prueba </PRE> </CODE></BLOCKQUOTE> </P> <P>Seguramente saldrán todos los caracteres como no imprimibles. Por si acaso asegúrate antes probando con otros valores de <CODE>LC_CTYPE</CODE>, tales como <CODE>es_ES</CODE>, <CODE>fr_FR</CODE>, <CODE>pt_PT</CODE>, etc. Para saber más posibles valores de <CODE>LC_CTYPE</CODE>, consulta el fichero <CODE>locale.alias</CODE>, que tendrás (si instalaste X) por <CODE>/var/X11R6/lib/locale</CODE> o algún otro directorio similar.</P> <P>Si, y <B>sólo si</B>, el programa <CODE>prueba</CODE> clasifica como no imprimibles los caracteres que saca, puedes hacer el siguiente cambio en <CODE>/usr/include/ctype.h</CODE>.</P> <P>Primero haz copia de seguridad del fichero:</P> <P> <BLOCKQUOTE><CODE> <PRE> # cd /usr/include # cp -a ctype.h ctype.h.orig </PRE> </CODE></BLOCKQUOTE> </P> <P>En la línea 150 aprox. cambia <BLOCKQUOTE><CODE> <PRE> #define isprint(c) __isctype((c), _ISprint) </PRE> </CODE></BLOCKQUOTE> </P> <P>por</P> <P> <BLOCKQUOTE><CODE> <PRE> #define isprint(c) (((c & 0xff) == 0x1b) || ((c & 0xff) > 0x1f)) </PRE> </CODE></BLOCKQUOTE> </P> <P>Este cambio de <CODE>ctype.h</CODE> fue publicado por Pablo Saratxaga <CODE> <A HREF="mailto:srtxg@f2219.n293.z2.fidonet.org"><srtxg@f2219.n293.z2.fidonet.org></A></CODE> en el difunto grupo <CODE>es.foro.unix.</CODE> Yo he recompilado con él algunos programas como <CODE>ncftp</CODE> y <CODE>tin</CODE>, y ha funcionado muy bien.</P> <H2><A NAME="ss4.3">4.3 Configuración de algunos programas</A></H2> <H3><CODE>dosemu</CODE></H3> <P>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 <CODE>dosemu</CODE> 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 <CODE>/etc/dosemu.conf</CODE>):</P> <P> <BLOCKQUOTE><CODE> <PRE> video { vga console graphics } </PRE> </CODE></BLOCKQUOTE> </P> <P>También es conveniente que tengamos las siguiente opción:</P> <P> <BLOCKQUOTE><CODE> <PRE> keyboard { layout es-latin1 keybint on rawkeyboard on } </PRE> </CODE></BLOCKQUOTE> </P> <P>Con esto y el programa <CODE>keybes.com</CODE> de Pedro Maicas, no debería haber ningún problema para ver y teclear los caracteres mayores de 127.</P> <H3><CODE>pine</CODE></H3> <P>Se puede cambiar la configuración desde el propio programa, o bien editar el siguiente cambio en el fichero <CODE>~/.pinerc</CODE>:</P> <P> <BLOCKQUOTE><CODE> <PRE> character-set=ISO-8859-1 </PRE> </CODE></BLOCKQUOTE> </P> <P>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 <CODE>enable-8bit-nntp-posting</CODE> a la lista <CODE>feature-list</CODE> del fichero mencionado.</P> <P>Existe también un fichero que efectúa cambios globales (para todos los usuarios del sistema). El fichero se llama <CODE>pine.conf</CODE>, y su ubicación depende de la distribución que usemos.</P> <H3><CODE>ELM</CODE></H3> <P>Añadir lo siguiente a <CODE>~/.elm/elmrc</CODE>:</P> <P> <BLOCKQUOTE><CODE> <PRE> charset=ISO-8859-1 displaycharset=ISO-8859-1 textencoding = 8bit </PRE> </CODE></BLOCKQUOTE> </P> <P>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 <CODE>/var/lib/elm/elm.rc</CODE>.</P> <H3><CODE>TIN</CODE></H3> <P>Añadir lo siguiente a <CODE>~/.tin/headers</CODE>:</P> <P> <BLOCKQUOTE><CODE> <PRE> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit </PRE> </CODE></BLOCKQUOTE> </P> <P>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.</P> <HR> <A HREF="Fuente-ISO-Como-3.html">Anterior</A> <A HREF="Fuente-ISO-Como-5.html">Siguiente</A> <A HREF="Fuente-ISO-Como.html#toc4">Indice</A> </BODY> </HTML>