23 Soporte de Juego de Caracteres Internacional

Emacs soporta una amplia variedad de juegos de caracteres internacionales, incluyendo las variantes europea y vietnamita del alfabeto latino, así como los alfabetos árabe, brahmánico (para lenguas como el bengalí, el hindi y el tailandés), cirílico, etíope, georgiano, griego, han (para chino y japonés), hangul (para coreano), hebreo e IPA. Emacs también admite varias codificaciones de estos caracteres que usan otros programas internacionalizados, como procesadores de texto y programas de correo.

Emacs permite editar texto con caracteres internacionales soportando todas las actividades relacionadas:

  • Puede visitar archivos con caracteres no ASCII, guardar texto no ASCII y pasar texto no ASCII entre Emacs y los programas que invoca (como compiladores, correctores ortográficos y programas de correo). Configurar su entorno de lenguaje (vea 23.2 Entornos de Lenguaje (o Idioma)) se encarga de configurar los sistemas de codificación y otras opciones para un lenguaje o cultura específicos. Alternativamente, puede especificar cómo Emacs debe codificar o decodificar el texto para cada comando; vea 23.9 Especificar un Sistema de Codificación para el Texto de un Archivo.

  • Puede mostrar caracteres no ASCII codificados por los distintos scripts. Esto funciona usando las fuentes apropiadas en las pantallas gráficas (vea 23.15. Definir Juegos de Fuentes), y enviando códigos especiales a las pantallas de texto (vea 23.13 Sistemas de Codificación para E/S de Terminal). Si algunos caracteres no se visualizan correctamente, consulte 23.17 Caracteres no Visualizables, donde se describen los posibles problemas y se explica cómo solucionarlos.

  • Los caracteres de escrituras cuyo orden natural del texto es de derecha a izquierda se reordenan para su visualización (véase 23.20 Edición Bidireccional). Estas escrituras incluyen el árabe, el hebreo, el siríaco, el thaana y algunas otras.

  • Puede insertar caracteres no ASCII o buscarlos. Para ello, puede especificar un método de entrada de Emacs (ver 23.4 Selección de un Método de Entrada) adecuado para su idioma, o usar el método de entrada por defecto configurado cuando elige su entorno de idioma. Si su teclado puede generar caracteres no ASCII, puede seleccionar un sistema de codificación de teclado apropiado (vea 23.13 Sistemas de Codificación para E/S de Terminal), y Emacs aceptará esos caracteres. En pantallas gráficas, los sistemas modernos normalmente proporcionan sus métodos de entrada nativos, y los caracteres Latin-1 también pueden ser introducidos usando el prefijo C-x 8, ver 23.18 Modo de Edición Unibyte.

    Con el Sistema X Window, su configuración regional debería estar ajustada a un valor apropiado para asegurarse de que Emacs interpreta la entrada de teclado correctamente; vea 23.12. Sistemas de Codificación para la Entrada de Teclado X.

El resto de este capítulo describe estas cuestiones en detalle.

23.1 Introducción a los Juegos de Caracteres Internacionales

Los Usuarios de juegos de caracteres y scripts internacionales han establecido muchos sistemas de codificación más o menos estándar para almacenar archivos. Estos sistemas de codificación son típicamente multibyte, lo que significa que se usan secuencias de dos o más bytes para representar caracteres individuales no ASCII.

Internamente, Emacs usa su propia codificación de caracteres multibyte, que es un superconjunto del estándar Unicode. Esta codificación interna permite mezclar caracteres de casi todas las escrituras conocidas en un único búfer o cadena. Emacs traduce entre la codificación de caracteres multibyte y otros sistemas de codificación cuando lee y escribe archivos, y cuando intercambia datos con subprocesos.

El comando C-h h (view-hello-file) muestra el archivo etc/HELLO, que ilustra varios scripts mostrando cómo decir «hola» en muchos idiomas. Si algunos caracteres no pueden mostrarse en su terminal, aparecen como ? o como recuadros huecos (consulte 23.17 Caracteres no Visualizables).

Los teclados, incluso en los países donde se usan estos juegos de caracteres, no suelen tener teclas para todos los caracteres que contienen. Puede usar C-x 8 RET (insertar carácter) para insertar caracteres que su teclado no admite. Véase 8.1 Inserción de Texto. Existen abreviaturas para algunos caracteres comunes; por ejemplo, puede insertar una comilla simple izquierda tecleando Ctrl-x 8[ (C-x 8 [), o en el modo de Comillas Eléctricas, normalmente tecleando simplemente ` (`). Vea 26.5 Comillas. Emacs también soporta varios métodos de entrada, típicamente uno para cada script o lenguaje, que hacen más fácil teclear caracteres en el script. Ver 23.3 Métodos de Entrada.

La tecla de prefijo Ctrl-x RETURN (C-x RET) se usa para comandos relacionados con caracteres multibyte, sistemas de codificación y métodos de entrada.

El comando C-x = (what-cursor-position) muestra información sobre el carácter en el punto. Además de la posición del carácter, que se describió en 8.9 Información sobre la posición del cursor, este comando muestra cómo está codificado el carácter. Por ejemplo, muestra la siguiente línea en el área de eco para el carácter c:

Char: c (99, #o143, #x63) point=28062 of 36168 (78%) column=53

Los cuatro valores después de Char: describen el carácter que sigue al punto, primero mostrándolo y luego dando su código de carácter en decimal, octal y hexadecimal. Para un carácter multibyte no ASCII, éstos van seguidos de file y de la representación del carácter, en hexadecimal, en el sistema de codificación del búfer, si dicho sistema de codificación codifica el carácter de forma segura y con un solo byte (véase 23.5 Sistemas de Codificación). Si la codificación del carácter es mayor que un byte, Emacs muestra file ....

En raras ocasiones, Emacs encuentra bytes crudos: bytes simples cuyos valores están en el rango de 128 (0200 octal) a 255 (0377 octal), que Emacs no puede interpretar como parte de una codificación conocida de algún carácter no ASCII. Tales bytes brutos se tratan como si pertenecieran a un juego de caracteres especial de ocho bits (eight-bit); Emacs los muestra como códigos octales escapados (esto puede personalizarse; véase 15.24 Personalización de la Pantalla). En este caso, C-x = muestra raw-byte en lugar de file. Además, C-x = muestra los códigos de carácter de los bytes raw como si estuvieran en el rango #x3FFF80..#x3FFFFF, que es donde Emacs los mapea para distinguirlos de los caracteres Unicode en el rango #x0080..#x00FF.

Con un argumento prefijo (C-u C-x =), este comando llama adicionalmente al comando describe-char, que muestra una descripción detallada del carácter:

  • El nombre del juego de caracteres, y los códigos que identifican al carácter dentro de ese juego de caracteres; los caracteres ASCII se identifican como pertenecientes al juego de caracteres ascii.

  • La escritura, sintaxis y categorías del carácter.

  • Qué teclas hay que teclear para introducir el carácter en el método de entrada actual (si admite el carácter).

  • La codificación del carácter, tanto internamente en el búfer, como externamente si guardas el búfer en un archivo.

  • Si está ejecutando Emacs en una pantalla gráfica, el nombre de la fuente y el código del glifo para el carácter. Si está ejecutando Emacs en un terminal de texto, el(los) código(s) enviado(s) al terminal.

  • Si el carácter se compuso en pantalla con alguno de los caracteres siguientes para formar uno o más grupos de grafemas, la información de composición: los glifos de la fuente si el marco está en una pantalla gráfica, y los caracteres que se compusieron.

  • Las propiedades de texto del carácter (ver Propiedades de Texto en el Manual de Referencia de Emacs Lisp), incluyendo cualquier cara no predeterminada usada para mostrar el carácter, y cualquier superposición que lo contenga (ver Superposiciones en el mismo manual).

He aquí un ejemplo, con algunas líneas plegadas para que quepan en este manual:

            position: 1 of 1 (0%), column: 0
            character: ê (displayed as ê) (codepoint 234, #o352, #xea)
    preferred charset: unicode (Unicode (ISO10646))
code point in charset: 0xEA
               script: latin
               syntax: w        which means: word
             category: .:Base, L:Left-to-right (strong), c:Chinese,
                    j:Japanese, l:Latin, v:Viet
             to input: type "C-x 8 RET ea" or
                      "C-x 8 RET LATIN SMALL LETTER E WITH CIRCUMFLEX"
         buffer code: #xC3 #xAA
           file code: #xC3 #xAA (encoded by coding system utf-8-unix)
             display: by this font (glyph code)
   xft:-PfEd-DejaVu Sans Mono-normal-normal-
     normal-*-15-*-*-*-m-0-iso10646-1 (#xAC)

 Character code properties: customize what to show
   name: LATIN SMALL LETTER E WITH CIRCUMFLEX
   old-name: LATIN SMALL LETTER E CIRCUMFLEX
   general-category: Ll (Letter, Lowercase)
   decomposition: (101 770) ('e' '^')
                     posición: 1 de 1 (0%), columna: 0
                     carácter: ê (visualizado como ê) (codepoint 234, #o352, #xea)
juego de caracteres preferido: unicode (Unicode (ISO10646))
   punto de código en charset: 0xEA
                    escritura: latín
    sintaxis: w que significa: palabra
                 categoría: .:Base, L:Izquierda a derecha (fuerte), c:Chino,
                            j:japonés, l:latín, v:vietnamita
              para introducir: escriba "C-x 8 RET ea" o
                              "C-x 8 RET LETRA PEQUEÑA LATINA E CON CIRCUMFLEX"
              código de búfer: #xC3 #xAA
               código archivo: #xC3 #xAA (codificado por el sistema de codificación utf-8-unix)
                visualización: por esta fuente (código de glifo)
            xft:-PfEd-DejaVu Sans Mono-normal-normal-
              normal-*-15-*-*-*-m-0-iso10646-1 (#xAC)

Propiedades del código de caracteres: personalice qué mostrar
  nombre: LETRA PEQUEÑA LATINA E CON CIRCUMFLEX
  old-name: LETRA PEQUEÑA LATINA E CON CIRCUMFLEX
  categoría-general Ll (letra, minúscula)
  descomposición: (101 770) ('e' '^')

23.2 Entornos de Lenguaje (o Idioma)

Todos los conjuntos de caracteres soportados están admitidos en los búferes de Emacs siempre que estén habilitados los caracteres multibyte; no es necesario seleccionar un idioma en particular para mostrar sus caracteres. Sin embargo, es importante seleccionar un entorno de lenguaje para establecer varios valores por defecto. A grandes rasgos, el entorno de idioma representa una elección de escritura preferida más que una elección de idioma.

Dicho entorno controla qué sistemas de codificación reconocer al leer texto (véase 23.6. Reconocimiento de Sistemas de Codificación). Esto se aplica a archivos, correo entrante y cualquier otro texto que lea en Emacs. También puede especificar el sistema de codificación por defecto que puede usar cuando crea un archivo. Cada entorno de lenguaje también especifica un método de entrada por defecto.

Para seleccionar un entorno de idioma, personalice current-language-environment o use el comando M-x set-language-environment. No hace ninguna diferencia qué búfer es el actual cuando use este comando, porque los efectos se aplican globalmente a la sesión de Emacs. Vea la variable language-info-alist para la lista de entornos de lenguaje soportados, y use el comando C-h L entorno-de-lenguaje RET (describe-language-environment) para más información sobre entorno-de-lenguaje. Los entornos de idioma admitidos son:

ASCII, Arabic, Belarusian, Bengali, Brazilian Portuguese, Bulgarian, Burmese, Cham, Chinese-BIG5, Chinese-CNS, Chinese-EUC-TW, Chinese-GB, Chinese-GB18030, Chinese-GBK, Croatian, Cyrillic-ALT, Cyrillic-ISO, Cyrillic-KOI8, Czech, Devanagari, Dutch, English, Esperanto, Ethiopic, French, Georgian, German, Greek, Gujarati, Hebrew, IPA, Italian, Japanese, Kannada, Khmer, Korean, Lao, Latin-1, Latin-2, Latin-3, Latin-4, Latin-5, Latin-6, Latin-7, Latin-8, Latin-9, Latvian, Lithuanian, Malayalam, Oriya, Persian, Polish, Punjabi, Romanian, Russian, Sinhala, Slovak, Slovenian, Spanish, Swedish, TaiViet, Tajik, Tamil, Telugu, Thai, Tibetan, Turkish, UTF-8, Ukrainian, Vietnamese, Welsh, and Windows-1255.

Para mostrar la(s) secuencia(s) de comandos usada(s) por su entorno lingüístico en una pantalla gráfica, necesita tener fuentes adecuadas. Vea 23.14 Conjunto de fuentes (fontsets), para más detalles sobre cómo configurar sus fuentes.

Algunos sistemas operativos le permiten especificar la configuración regional del juego de caracteres que está usando configurando las variables de entorno de configuración regional LC_ALL, LC_CTYPE o LANG. (Si se establece más de una de ellas, la primera que no esté vacía especifica su configuración regional para este propósito). Durante el arranque, Emacs busca el nombre de su locale en la tabla de alias de locale del sistema, compara su nombre canónico con las entradas en el valor de las variables locale-charset-language-names y locale-language-names (la primera anula a la segunda), y selecciona el entorno de lenguaje correspondiente si encuentra una coincidencia. También ajusta la tabla de visualización y el sistema de codificación del terminal, el sistema de codificación de la configuración regional, el sistema de codificación preferido según sea necesario para la configuración regional y, por último pero no menos importante, la forma en que Emacs decodifica los caracteres no ASCII enviados por el teclado.

Si modifica las variables de entorno LC_ALL, LC_CTYPE, o LANG mientras ejecuta Emacs (usando M-x setenv), puede que quiera invocar el comando set-locale-environment después para reajustar el entorno de lenguaje desde la nueva localización.

La función set-locale-environment normalmente usa el sistema de codificación preferido establecido por el entorno del lenguaje para decodificar los mensajes del sistema. Pero si su localización coincide con una entrada de la variable locale-preferred-coding-systems, Emacs usa el sistema de codificación correspondiente. Por ejemplo, si la localización ja_JP.PCK coincide con japanese-shift-jis en locale-preferred-coding-systems, Emacs usa esa codificación aunque normalmente use utf-8.

Puede anular el entorno de idioma elegido al arrancar usando explícitamente el comando set-language-environment, o personalizando current-language-environment en su archivo init.

Para mostrar información sobre los efectos de un determinado entorno de idioma, use el comando C-h L entorno-de-lenguaje RET (describe-language-environment). Esto le indica para qué lenguajes es útil este entorno de lenguaje, y enumera los juegos de caracteres, sistemas de codificación y métodos de entrada que van con él. También muestra algunos ejemplos de texto para ilustrar los scripts usados en este entorno de lenguaje. Si da una entrada vacía para lang-env, este comando describe el entorno de lenguaje elegido.

Puede personalizar cualquier entorno de idioma con el gancho normal set-language-environment-hook. El comando set-language-environment ejecute ese hook (gancho) después de configurar el nuevo entorno de idioma. Las funciones del gancho pueden comprobar un entorno de idioma específico comprobando la variable current-language-environment. Este gancho es donde debe poner los ajustes no predeterminados para entornos de idioma específicos, como los sistemas de codificación para la entrada de teclado y la salida de terminal, el método de entrada predeterminado, etc.

Antes de empezar a configurar el nuevo entorno de idioma, set-language-environment ejecuta primero el gancho exit-language-environment-hook. Este gancho es útil para deshacer las personalizaciones que se hicieron con set-language-environment-hook. Por ejemplo, si ha configurado un enlace especial para una tecla en un entorno de idioma específico usando set-language-environment-hook, debería ejecutar exit-language-environment-hook para restaurar el enlace normal para esa tecla.

23.3 Métodos de Entrada

Un método de entrada es un tipo de conversión de caracteres diseñado específicamente para la entrada interactiva. Esta sección describe los métodos de entrada que vienen con Emacs; para los métodos de entrada nativos proporcionados por el SO subyacente, vea 23.18 Modo de Edición Unibyte.

En Emacs, normalmente cada lenguaje tiene su propio método de entrada; a veces varios lenguajes que usan los mismos caracteres pueden compartir un método de entrada. Algunos lenguajes soportan varios métodos de entrada.

El tipo más simple de método de entrada funciona mapeando letras ASCII en otro alfabeto; esto le permite usar otro alfabeto en lugar de ASCII. Los métodos de entrada griego y ruso funcionan de este modo.

Una técnica más potente es la composición: convertir secuencias de caracteres en una sola letra. Muchos métodos de entrada europeos usan la composición para producir una sola letra no ASCII a partir de una secuencia formada por una letra seguida de caracteres acentuados (o viceversa). Por ejemplo, algunos métodos convierten la secuencia o ^ en una sola letra acentuada. Estos métodos de entrada no tienen comandos especiales propios; lo único que hacen es componer secuencias de caracteres de imprenta.

Los métodos de entrada de caracteres silábicos suelen usar el mapeo seguido de la composición. Es el caso del tailandés y el coreano. En primer lugar, las letras se convierten en símbolos de determinados sonidos o marcas tonales y, a continuación, las secuencias que forman una sílaba completa se convierten en un signo silábico.

El chino y el japonés requieren métodos más complejos. En los métodos de entrada chinos, primero se introduce la grafía fonética de una palabra china (en el método de entrada chinese-py, entre otros), o una secuencia de porciones del carácter (métodos de entrada chinese-4corner y chinese-sw, entre otros). Una secuencia de entrada suele corresponder a muchos caracteres chinos posibles. El Usuario selecciona el que le interesa usando teclas como Ctrl-f (C-f), Ctrl-b (C-b), Ctrl-n (C-n), Ctrl-p (C-p) (o las teclas de flecha) y dígitos, que tienen un significado especial en esta situación.

Los caracteres posibles están dispuestos conceptualmente en varias filas, cada una de las cuales contiene hasta 10 alternativas. Normalmente, Emacs muestra sólo una fila cada vez, en el área de eco; (i/j) aparece al principio, para indicar que ésta es la fila i/enésima de un total de j filas. Teclee Ctrl-n (C-n) o Ctrl-p (C-p) para mostrar la fila siguiente o la anterior.

Teclee Ctrl-f (C-f) y Ctrl-b (C-b) para avanzar y retroceder entre las alternativas de la fila actual. Al hacer esto, Emacs resalta la alternativa actual con un color especial; teclee Ctrl-SPACE (C-SPC) para seleccionar la alternativa actual y usarla como entrada. Las alternativas de la fila también están numeradas; el número aparece antes de la alternativa. Al teclear un número se selecciona la alternativa asociada de la fila actual y se usa como entrada.

TAB en estos métodos de entrada en chino muestra un búfer con todos los caracteres posibles a la vez; si se pulsa con ratón-2 sobre uno de ellos, se selecciona esa alternativa. Las teclas Ctrl-f (C-f), Ctrl-b (C-b), Ctrl-n (C-n), Ctrl-p (C-p) y los dígitos siguen funcionando como de costumbre, pero realizan el resaltado en el búfer que muestra los caracteres posibles, en lugar de hacerlo en el área de eco.

Para introducir caracteres según el método de transliteración pīnyīn en su lugar, use el método de entrada chino-sisheng. Se trata de un método basado en la composición, en el que, por ejemplo, pi1 da como resultado .

En los métodos de entrada japoneses, primero se introduce una palabra entera usando la ortografía fonética; después, una vez que la palabra está en el búfer, Emacs la convierte en uno o más caracteres usando un gran diccionario. Una ortografía fonética corresponde a varias palabras japonesas diferentes; para seleccionar una de ellas, use C-n y C-p para recorrer las alternativas.

A veces resulta útil interrumpir el procesamiento del método de entrada para que los caracteres que acaba de introducir no se combinen con los caracteres siguientes. Por ejemplo, en el método de entrada latin-1-postfix, la secuencia o ^ se combina para formar una o con acento. ¿Qué ocurre si desea introducirlos como caracteres separados?

Una forma es escribir el acento dos veces; se trata de una función especial para introducir la letra y el acento por separado. Por ejemplo, o ^ ^ le da los dos caracteres o^. Otra forma es escribir otra letra después de la o -algo que no se combine con ella- y borrarla inmediatamente. Por ejemplo, puede escribir o o DEL ^ para obtener o y ^ por separado. Otro método, más general pero no tan fácil de escribir, es usar C-\ C-\ entre dos caracteres para impedir que se combinen. Este es el comando C-\ (toggle-input-method) usado dos veces. Véase 23.4 Selección de un Método de Entrada.

C-\ C-\ es especialmente útil dentro de una búsqueda incremental, porque deja de esperar a que se combinen más caracteres y empieza a buscar lo que ya ha introducido.

Para saber cómo introducir el carácter después del punto usando el método de entrada actual, escriba Ctrl-u Ctrl-x = (C-u C-x =). Véase 8.9 Información sobre la posición del cursor.

Las variables input-method-highlight-flag y input-method-verbose-flag controlan cómo los métodos de entrada explican lo que está sucediendo. Si input-method-highlight-flag no es nulo, la secuencia parcial se resalta en el búfer (para la mayoría de los métodos de entrada, algunos desactivan esta característica). Si input-method-verbose-flag es no-nil, la lista de posibles caracteres a escribir a continuación se muestra en el área de eco (pero no cuando se está en el minibúfer).

Puede modificar el funcionamiento de un método de entrada realizando los cambios en una función que añada a la variable gancho quail-activate-hook. Véase 50.2.2 Ganchos (Hooks). Por ejemplo, puede redefinir algunas de las teclas del método de entrada definiendo las combinaciones de teclas en el mapa de teclas devuelto por la función quail-translation-keymap, usando define-key. Véase 50.3.6. Reasignación de Teclas en el Archivo de Inicio.

Los métodos de entrada se inhiben cuando el texto del búfer es de sólo lectura por algún motivo. De este modo, las combinaciones de teclas de un solo carácter funcionan en modos que hacen que el texto del búfer o partes de él sean de sólo lectura, como el modo de sólo lectura y el modo de imagen, incluso cuando un método de entrada está activo.

Otra forma de escribir caracteres que no se encuentran en el teclado es usar C-x 8 RET (insert-char) para insertar un único carácter basándose en su nombre Unicode o punto de código; consulte 8.1 Inserción de Texto.

Existen comandos especializados para insertar Emoji, que se pueden encontrar en el mapa de teclas C-x 8 e. C-x 8 e e (emoji-insert) le permitirá navegar por las diferentes categorías de Emoji y elegir una. C-x 8 e l (emoji-list) abrirá un nuevo búfer y listará todos los Emoji; pulsando (o usando RETURN (RET)) sobre un carácter emoji lo insertará en el búfer actual. Finalmente, C-x 8 e s (emoji-search) le permitirá buscar Emoji basados en sus nombres.

describe-char muestra mucha información sobre el carácter/glifo en cuestión (incluidos los emojis). A veces es útil obtener una descripción rápida del nombre, y puedes usar el comando C-x 8 e d (emoji-describe) para hacerlo. Está pensado principalmente para ayudarlo a distinguir entre diferentes variantes de Emoji (que pueden parecerse mucho), pero también le dirá los nombres de caracteres que no son Emoji.

23.4 Selección de un Método de Entrada

Ctrl-\ (C-\)

Activa o desactiva el uso del método de entrada seleccionado (toggle-input-method).

Ctrl-x RETURN Ctrl-\ método RETURN
(C-x RET C-\ método RET)

Selecciona un nuevo método de entrada para el búfer actual (set-input-method).

Ctrl-x \ método RETURN (C-x \ método RET)

Activa temporalmente el método de entrada transitoria seleccionado ; se desactivará automáticamente tras insertar un solo carácter (activate-transient-input-method).

Ctrl-h I método RETURN (C-h I método RET)
Ctrl-h Ctrl-\ método RETURN (C-h C-\ método RET)

Describe el método de entrada (describe-input-method). Por defecto, describe el método de entrada actual (si existe). Esta descripción debería darle todos los detalles de cómo usar cualquier método de entrada en particular.

Alt-x list-input-methods (M-x list-input-methods)

Muestra una lista de todos los métodos de entrada admitidos.

Para elegir un método de entrada para el búfer actual, use C-x RET C-\ (set-input-method). Este comando lee el nombre del método de entrada del minibúfer; el nombre normalmente empieza por el entorno de lenguaje con el que se va a usar. La variable current-input-method registra qué método de entrada está seleccionado.

Los métodos de entrada usan varias secuencias de caracteres ASCII para representar caracteres no ASCII. A veces es útil desactivar temporalmente el método de entrada. Para ello, escriba Ctrl-\ (C-\, toggle-input-method). Para volver a activar el método de entrada, escriba Ctrl-\ (C-\) de nuevo.

Si teclea Ctrl-\ (C-\) y aún no ha seleccionado un método de entrada, se le pedirá que especifique uno. Esto tiene el mismo efecto que usar C-x RET C-\ para especificar un método de entrada.

Cuando se invoca con un argumento numérico, como en C-u C-\, toggle-input-method siempre le pregunta por un método de entrada, sugiriendo el seleccionado más recientemente como predeterminado.

Seleccionar un entorno de lenguaje especifica un método de entrada por defecto para usar en varios búferes. Cuando tiene un método de entrada por defecto, puede seleccionarlo en el búfer actual tecleando Ctrl-\. La variable default-input-method especifica el método de entrada por defecto (nil significa que no hay ninguno).

En algunos entornos de lenguaje, que soportan varios métodos de entrada diferentes, puede que quiera usar un método de entrada diferente del elegido por defecto por set-language-environment. Si lo desea, puede ordenar a Emacs que seleccione un método de entrada por defecto diferente para un determinado entorno de lenguaje, usando set-language-environment-hook (ver 23.2 Entornos de Lenguaje (o Idioma)). Por ejemplo:

(defun my-chinese-setup ()
   "Set up my private Chinese environment."
   (if (equal current-language-environment "Chinese-GB")
       (setq default-input-method "chinese-tonepy")))
 (add-hook 'set-language-environment-hook 'my-chinese-setup)

Esto establece que el método de entrada por defecto sea chinese-tonepy siempre que elija un entorno de lenguaje Chinese-GB.

Puede ordenar a Emacs que active un determinado método de entrada automáticamente. Por ejemplo:

(add-hook 'text-mode-hook
 (lambda () (set-input-method "german-prefix")))

Esto activa automáticamente el método de entrada prefijo-alemán en el modo Texto.

Algunos métodos de entrada para scripts alfabéticos funcionan (en efecto) remapeando el teclado para emular varias distribuciones de teclado comúnmente usadas para esos scripts. La forma correcta de realizar esta reasignación depende de la distribución real de su teclado. Para especificar la distribución de tu teclado, use el comando M-x quail-set-keyboard-layout.

Puede usar el comando M-x quail-show-key para mostrar qué tecla (o secuencia de teclas) debe pulsar para introducir el carácter siguiente al punto, usando la distribución de teclado seleccionada. El comando C-u C-x = también muestra esa información, además de otra información sobre el carácter.

M-x list-input-methods muestra una lista de todos los métodos de entrada soportados. La lista ofrece información sobre cada método de entrada, incluida la cadena que lo representa en la línea de modo.

A veces puede ser conveniente activar un método de entrada de forma transitoria, para insertar un solo carácter. Tecleando Ctrl-x \ (C-x \, activate-transient-input-method, activar-método-de-entrada-transitorio) habilitará temporalmente un método de entrada, le permitirá insertar un solo carácter usando las reglas del método de entrada, y luego deshabilitará automáticamente el método de entrada. Si aún no se ha seleccionado ningún método de entrada transitorio, C-x \ le pedirá un método de entrada; las siguientes invocaciones de este comando activarán el método de entrada transitorio seleccionado. Para seleccionar otro método de entrada de transitorios, escriba C-u C-x \. Puede seleccionar un método transitorio que sea diferente del método de entrada que seleccionó usando C-u C-\.

23.5 Sistemas de Codificación

Usuarios de varios lenguajes han establecido muchos sistemas de codificación más o menos estándar para representarlos. Emacs no usa estos sistemas de codificación internamente; en su lugar, convierte de varios sistemas de codificación a su propio sistema cuando lee datos, y convierte el sistema de codificación interno a otros sistemas de codificación cuando escribe datos. La conversión es posible al leer o escribir archivos, al enviar o recibir desde el terminal, y al intercambiar datos con subprocesos.

Emacs asigna un nombre a cada sistema de codificación. La mayoría de los sistemas de codificación se usan para un idioma, y el nombre del sistema de codificación empieza con el nombre del idioma. Algunos sistemas de codificación se usan para varios idiomas; sus nombres suelen empezar por iso. También existen sistemas de codificación especiales, como no-conversion, raw-text y emacs-internal.

Una clase especial de sistemas de codificación, conocidos colectivamente como codepages (paginas de código), está diseñada para soportar texto codificado por software MS-Windows y MS-DOS. Los nombres de estos sistemas de codificación son cpnnnn, donde nnnn es un número de 3 ó 4 dígitos de la página de codificación. Puede usar estas codificaciones como cualquier otro sistema de codificación; por ejemplo, para visitar un archivo codificado en la página 850, escriba C-x RET c cp850 RET C-x C-f nombrearchivo RET.

Además de convertir varias representaciones de caracteres no ASCII, un sistema de codificación puede realizar la conversión de final de línea. Emacs maneja tres convenciones diferentes para separar líneas en un archivo: nueva línea (Unix), retorno de carro seguido de salto de línea (DOS) y sólo retorno de carro (Mac).

Ctrl-h Ctrl codificación RETURN (C-h C codificación RET)

Describe la codificación del sistema de codificación (describe-coding-system).

Ctrl-h Ctrl-RETURN (C-h C RET)

Describe los sistemas de codificación que se están usando en este momento (describe-coding-system).

Alt-x list-codificación-systems (M-x list-codificación-systems)

Muestra una lista de todos los sistemas de codificación compatibles.

El comando C-h C (describe-coding-system) muestra información sobre sistemas de codificación particulares, incluyendo la conversión de final de línea especificada por esos sistemas de codificación. Puede especificar un nombre de sistema de codificación como argumento; alternativamente, con un argumento vacío, describe los sistemas de codificación actualmente seleccionados para varios propósitos, tanto en el búfer actual como por defecto, y la lista de prioridades para reconocer sistemas de codificación (ver 23.6. Reconocimiento de Sistemas de Codificación).

Para mostrar una lista de todos los sistemas de codificación soportados, escriba Alt-x list-coding-systems (M-x list-coding-systems). La lista ofrece información sobre cada sistema de codificación, incluida la letra que lo representa en la línea de modo (véase 1.3 La Línea de Modo).

Cada uno de los sistemas de codificación que aparecen en esta lista -excepto no-conversion, que significa sin conversión de ningún tipo- especifica cómo y si convertir los caracteres de impresión, pero deja que la elección de la conversión de final de línea se decida en función del contenido de cada archivo. Por ejemplo, si el archivo parece usar la secuencia de retorno de carro y salto de línea para separar líneas, se usará la conversión de fin de línea DOS.

Cada uno de los sistemas de codificación enumerados tiene tres variantes, que especifican exactamente qué hacer para la conversión de fin de línea:

…-unix

No haga ninguna conversión de final de línea; asuma que el archivo usa newline para separar líneas. (Esta es la convención normalmente usada en sistemas Unix y GNU, y macOS).

…-dos

Suponga que el archivo usa el retorno de carro seguido del salto de línea para separar las líneas y haga la conversión correspondiente. (Esta es la convención que se usa normalmente en los sistemas Microsoft. [9] )

…-mac

Asuma que el archivo usa el retorno de carro para separar líneas, y haga la conversión apropiada. (Esta era la convención usada en el Mac OS clásico).

Estas variantes de los sistemas de codificación (list-coding-systems) se omiten de la lista de sistemas de codificación para abreviar, ya que son totalmente predecibles. Por ejemplo, el sistema de codificación iso-latin-1 tiene variantes iso-latin-1-unix, iso-latin-1-dos e iso-latin-1-mac.

Los sistemas de codificación unix, dos y mac son alias de undecided-unix, undecided-dos y undecided-mac, respectivamente. Estos sistemas de codificación sólo especifican la conversión de final de línea, y dejan que la conversión del código de caracteres se deduzca del propio texto.

El sistema de codificación raw-text es bueno para un archivo que es principalmente texto ASCII, pero puede contener valores de bytes por encima de 127 que no están destinados a codificar caracteres no ASCII. Con raw-text, Emacs copia esos valores de byte sin cambiarlos, y pone enable-multibyte-characters a nil en el búfer actual para que se interpreten correctamente. raw-text maneja la conversión de final de línea de la forma habitual, basándose en los datos encontrados, y tiene las tres variantes habituales para especificar el tipo de conversión de final de línea a usar.

Por el contrario, el sistema de codificación sin conversión no especifica ninguna conversión de código de caracteres: ninguna para valores de bytes no ASCII y ninguna para finales de línea. Esto es útil para leer o escribir archivos binarios, archivos tar y otros archivos que deben examinarse textualmente. También establece enable-multibyte-characters a nil.

La forma más sencilla de editar un archivo sin ningún tipo de conversión es con el comando M-x find-file-literally. Esto usa no-conversion, y también suprime otras características de Emacs que podrían convertir el contenido del archivo antes de que lo vea. Ver 19.2 Visitar Archivos.

El sistema de codificación emacs-internal (o utf-8-emacs, que es equivalente) significa que el archivo contiene caracteres no ASCII almacenados con la codificación interna de Emacs. Este sistema de codificación maneja la conversión de final de línea basándose en los datos encontrados, y tiene las tres variantes habituales para especificar el tipo de conversión de final de línea.

23.6. Reconocimiento de Sistemas de Codificación

Siempre que Emacs lee un trozo de texto dado, intenta reconocer qué sistema de codificación usar. Esto se aplica a archivos que se leen, salidas de subprocesos, texto de selecciones X, etc. Emacs puede seleccionar el sistema de codificación correcto automáticamente la mayoría de las veces, una vez que haya especificado sus preferencias.

Algunos sistemas de codificación pueden reconocerse o distinguirse por las secuencias de bytes que aparecen en los datos. Sin embargo, hay sistemas de codificación que no pueden distinguirse, ni siquiera potencialmente. Por ejemplo, no hay forma de distinguir entre Latin-1 y Latin-2; usan los mismos valores de byte con diferentes significados.

Emacs maneja esta situación mediante una lista prioritaria de sistemas de codificación. Siempre que el Editor lee un archivo, si no se especifica el sistema de codificación a usar, este comprueba los datos contra cada sistema de codificación, empezando por el primero en prioridad y bajando por la lista, hasta que encuentra un sistema de codificación que se ajusta a los datos. Entonces convierte el contenido del archivo asumiendo que está representado en este sistema de codificación.

La lista de prioridades de los sistemas de codificación depende del entorno lingüístico seleccionado (véase 23.2 Entornos de Lenguaje (o Idioma)). Por ejemplo, si usa el francés, probablemente querrá que Emacs prefiera el latín-1 al latín-2; si usa el checo, probablemente querrá que se prefiera el latín-2. Esta es una de las razones para especificar un entorno de lenguaje.

Sin embargo, puede alterar la lista de prioridades del sistema de codificación en detalle con el comando M-x prefer-coding-system. Este comando lee el nombre de un sistema de codificación del minibúfer y lo añade al principio de la lista de prioridades, de modo que se prefiere a todos los demás. Si usa este comando varias veces, cada vez que lo use añadirá un elemento al principio de la lista de prioridades.

Si usa un sistema de codificación que especifica el tipo de conversión de final de línea, como iso-8859-1-dos, lo que esto significa es que Emacs debería intentar reconocer iso-8859-1 con prioridad, y debería usar la conversión de final de línea DOS cuando reconozca iso-8859-1.

A veces un nombre de archivo indica qué sistema de codificación usar para el archivo. La variable file-coding-system-alist especifica esta correspondencia. Existe una función especial modify-coding-system-alist para añadir elementos a esta lista. Por ejemplo, para leer y escribir todos los archivos .txt usando el sistema de codificación chinese-iso-8bit, puede ejecutar esta expresión Lisp:

(modify-coding-system-alist 'file "\\.txt\\'" 'chinese-iso-8bit)

El primer argumento debe ser file (archivo), el segundo argumento debe ser una expresión regular que determine a qué archivos se aplica esto, y el tercer argumento dice qué sistema de codificación usar para estos archivos.

Emacs reconoce qué tipo de conversión de fin de línea usar basándose en el contenido del archivo: si sólo ve retornos de carro, o sólo retornos de carro seguidos de secuencias de salto de línea, entonces elige la conversión de fin de línea en consecuencia. Puede inhibir el uso automático de la conversión de fin de línea estableciendo la variable inhibit-eol-conversion en no-nil. Si lo hace, los archivos estilo DOS se mostrarán con los caracteres ^M visibles en el búfer; algunas personas prefieren esto a la más sutil indicación de tipo de fin de línea (DOS) cerca del borde izquierdo de la línea de modo (véase 1.3 La Línea de Modo).

Por defecto, la detección automática del sistema de codificación es sensible a las secuencias de escape. Si Emacs ve una secuencia de caracteres que comienza con un carácter de escape, y la secuencia es válida como un código ISO-2022, eso le dice a Emacs que use una de las codificaciones ISO-2022 para decodificar el archivo.

Sin embargo, puede haber casos en los que desee leer secuencias de escape en un archivo tal cual. En tal caso, puede establecer la variable inhibit-iso-escape-detection a no nulo. Entonces la detección de código ignora cualquier secuencia de escape, y nunca usa una codificación ISO-2022. El resultado es que todas las secuencias de escape se hacen visibles en el búfer.

El valor por defecto de inhibit-iso-escape-detection es nil. Le recomendamos que no lo cambie permanentemente, sólo para una operación específica. Esto se debe a que algunos archivos fuente de Emacs Lisp en la distribución de Emacs contienen caracteres codificados en el sistema de codificación iso-2022-7bit, y no serán decodificados correctamente cuando visite esos archivos si suprime la detección de secuencias de escape.

Las variables auto-coding-alist y auto-coding-regexp-alist son la forma más potente de especificar el sistema de codificación para ciertos patrones de nombres de archivo, o para archivos que contengan ciertos patrones, respectivamente. Estas variables incluso anulan las etiquetas -*-coding:-*- del propio archivo (véase 23.7 Especificar el Sistema de Codificación de un Archivo). Por ejemplo, Emacs usa auto-coding-alist para ficheros tar y de archivo, para evitar que se confunda con una etiqueta -*-coding:-*- en un miembro del archivo y piense que se aplica al fichero de archivos (al archivo empaquetado) como un todo.

Otra forma de especificar un sistema de codificación es con la variable auto-coding-functions. Por ejemplo, una de las funciones de codificación automática incorporadas detecta la codificación de los archivos XML. A diferencia de las dos anteriores, esta variable no anula ninguna etiqueta -*-coding:-*-.

23.7 Especificar el Sistema de Codificación de un Archivo

Si Emacs reconoce la codificación de un archivo incorrectamente, puede releer el archivo usando el sistema de codificación correcto con C-x RET r (revert-búfer-with-coding-system). Este comando pregunta por el sistema de codificación a usar. Para ver qué sistema de codificación usó Emacs para decodificar el archivo, mira la letra mnemotécnica del sistema de codificación cerca del borde izquierdo de la línea de modo (ver 1.3 La Línea de Modo), o teclee Ctrl-h C (C-h C, describe-coding-system).

Puede especificar el sistema de codificación para un archivo en particular en el propio archivo, usando la construcción -*-...-*- al principio, o una lista de variables locales al final (vea 50.2.4. Variables locales en Archivos). Esto se hace definiendo un valor para la «variable» llamada coding (codificación). Emacs no tiene realmente una variable codificación; en lugar de establecer una variable, esto usa el sistema de codificación especificado para el archivo. Por ejemplo, -*-mode: C; coding: latin-1; -*- especifica usar el sistema de codificación Latin-1, así como el modo C. Cuando se especifica la codificación explícitamente en el archivo, se anula file-coding-system-alist (lista de sistemas de codificación del archivo).

23.8. Elección de Sistemas de Codificación para la Salida

Una vez que Emacs ha elegido un sistema de codificación para un búfer, almacena ese sistema de codificación en buffer-file-coding-system. Esto lo convierte en el predeterminado para las operaciones que escriben desde este búfer a un archivo, como save-buffer y write-region. Puede especificar un sistema de codificación diferente para la salida de archivos desde el búfer usando set-buffer-file-coding-system (vea 23.9 Especificar un Sistema de Codificación para el Texto de un Archivo).

Puede insertar cualquier carácter que Emacs soporte en cualquier búfer de Emacs, pero la mayoría de los sistemas de codificación sólo pueden manejar un subconjunto de estos caracteres. Por lo tanto, es posible que los caracteres que inserte no puedan ser codificados con el sistema de codificación que se usará para guardar el búfer. Por ejemplo, podría visitar un archivo de texto en polaco, codificado en iso-8859-2, y añadirle algunas palabras en ruso. Cuando guarde ese búfer, Emacs no podrá usar el valor actual de buffer-file-coding-system, porque los caracteres que añadió no pueden ser codificados por ese sistema de codificación.

Cuando ocurre esto, Emacs prueba el sistema de codificación más preferido (establecido por M-x prefer-coding-system o M-x set-language-environment). Si ese sistema de codificación puede codificar con seguridad todos los caracteres del búfer, Emacs lo usa, y almacena su valor en buffer-file-coding-system. Si no, Emacs muestra una lista de sistemas de codificación adecuados para codificar el contenido del búfer, y le pide que elija uno de esos sistemas de codificación.

Si inserta los caracteres inadecuados en un mensaje de correo, Emacs se comporta de forma un poco diferente. Adicionalmente comprueba si el sistema de codificación más preferido está recomendado para usar en mensajes MIME; si no es así, le informa de este hecho y le pregunta por otro sistema de codificación. Esto se hace para que no envíe inadvertidamente un mensaje codificado de forma que el software de correo de su destinatario tenga dificultades para descodificarlo. (Todavía puede usar un sistema de codificación inadecuado si introduce su nombre en la pregunta).

Cuando envía un mensaje de correo (ver 33 Envío de Correo), Emacs tiene cuatro maneras diferentes de determinar el sistema de codificación a usar para codificar el texto del mensaje. Primero pruebe con el valor propio del búfer de sistema de codificación del archivo del búfer, si no es nulo. En segundo lugar, use el valor de sendmail-coding-system, si no es nulo. En tercer lugar, use el valor de default-sendmail-coding-system. Si estos tres valores son nulos, Emacs codifica el correo saliente usando el sistema de codificación por defecto para archivos nuevos (es decir, el valor por defecto de buffer-file-coding-system), que es controlado por la elección del entorno de lenguaje.

23.9 Especificar un Sistema de Codificación para el Texto de un Archivo

En los casos en los que Emacs no elige automáticamente el sistema de codificación adecuado para el contenido de un archivo, puede usar estos comandos para especificar uno:

Ctrl-x RETURN f codificación RETURN
(C-x RET f codificación RET)

Usa la codificación del sistema para guardar o volver a visitar el archivo en el búfer actual (set-buffer-file-coding-system).

Ctrl-x RETURN c codificación RETURN
(C-x RET c codificaión RET)

Especifica la codificación del sistema de codificación para el comando inmediatamente siguiente (universal-coding-system-argument).

Ctrl-x RETURN r codificación RETURN
(C-x RET r codificación RET)

Revierte el archivo actual usando el sistema de codificación (revert-búfer-with-coding-system).

Alt-x recode-region RETURN correcto RETURN erróneo RETURN
(M-x recode-region RET correcto RET erróneo RET)

Convierte una región que se descodificó usando un sistema de codificación erróneo, descodificándola y usando en su lugar el sistema de codificación correcto.

El comando C-x RET f (set-buffer-file-coding-system) establece el sistema de codificación de archivos para el búfer actual (es decir, el sistema de codificación que se usará al guardar o revertir el archivo). El sistema de codificación se especifica usando el minibúfer. También puede invocar este comando haciendo clic con ratón-3 en el indicador del sistema de codificación en la línea de modo (véase 1.3 La Línea de Modo).

Si especifica un sistema de codificación que no puede manejar todos los caracteres del búfer, Emacs le advertirá sobre los caracteres problemáticos, y le pedirá que elija otro sistema de codificación, cuando intente guardar el búfer (vea 23.8. Elección de Sistemas de Codificación para la Salida).

También puede usar este comando para especificar la conversión de final de línea (vea conversión de final de línea) para codificar el búfer actual. Por ejemplo, C-x RET f dos RET hará que Emacs guarde el texto del búfer actual con retorno de carro estilo DOS seguido de finales de línea con salto de línea.

Otra forma de especificar el sistema de codificación de un archivo es cuando se visita el archivo. Primero use el comando C-x RET c (universal-coding-system-argument); este comando usa el minibúfer para leer un nombre de sistema de codificación. Después de salir del minibúfer, el sistema de codificación especificado se usa para el comando inmediatamente siguiente.

Así, por ejemplo, si el comando inmediatamente siguiente es C-x C-f, lee el archivo usando ese sistema de codificación (y registra el sistema de codificación para cuando guarde el archivo más tarde). O si el comando inmediatamente siguiente es C-x C-w, escribe el archivo usando ese sistema de codificación. Cuando se especifica el sistema de codificación para guardar de esta manera, en lugar de con C-x RET f, no hay advertencia si el búfer contiene caracteres que el sistema de codificación no puede manejar.

Otros comandos de archivo afectados por un sistema de codificación especificado son C-x i y C-x C-v, así como las variantes para otras ventanas de C-x C-f. C-x RET c también afecta a los comandos que inician subprocesos, incluyendo M-x shell (ver 39 Ejecución de comandos de shell desde Emacs). Si el comando inmediatamente siguiente no usa el sistema de codificación, entonces C-x RET c finalmente no tiene efecto.

Una forma sencilla de visitar un archivo sin conversión es con el comando M-x find-file-literally. Véase 19.2 Visitar Archivos.

El valor por defecto de la variable buffer-file-coding-system especifica la elección del sistema de codificación que se puede usar cuando se crea un nuevo archivo. Se aplica cuando se encuentra un nuevo archivo, y cuando se puede crear un búfer y luego guardarlo en un archivo. Seleccionar un entorno de lenguaje típicamente establece esta variable a una buena elección de sistema de codificación por defecto para ese entorno de lenguaje.

Si visita un archivo con un sistema de codificación incorrecto, puede corregirlo con C-x RET r (revert-búfer-with-coding-system). Esto visita el archivo actual de nuevo, usando un sistema de codificación que Usted especifique.

Si un trozo de texto ya ha sido insertado en un búfer usando un sistema de codificación incorrecto, puede rehacer la decodificación del mismo usando M-x recode-region. Esta opción le preguntará cuál es el sistema de codificación correcto y, a continuación, cuál es el sistema de codificación incorrecto que se ha usado, y realizará la conversión. Primero codifica la región usando el sistema de codificación incorrecto, y luego la decodifica de nuevo usando el sistema de codificación correcto.

23.10 Sistemas Codificación para la Comunicación Interprocesos

Esta sección explica cómo especificar sistemas de codificación para usar en la comunicación con otros procesos.

Ctrl-x RETURN x codificación RETURN
(C-x RET x codificación RET)

Usa la codificación del sistema para transferir selecciones a y desde otras aplicaciones gráficas (set-selection-coding-system).

Ctrl-x RETURN X codificación RETURN
(C-x RET X codificación RET)

Usa la codificación del sistema para transferir una selección -la siguiente- hacia o desde otra aplicación gráfica (set-next-selection-coding-system).

Ctrl-x RETURN p codificación-entrada RETURN codificación-salida RETURN
(C-x RET p codificación-entrada RET codificación-salida RET)

Usa los sistemas de codificación codificación-entrada y codificación-salida para la entrada y salida del subproceso en el búfer actual (set-buffer-process-coding-system).

El comando C-x RET x (set-selection-coding-system) especifica el sistema de codificación para enviar el texto seleccionado a otras aplicaciones de ventanas, y para recibir el texto de las selecciones realizadas en otras aplicaciones. Este comando se aplica a todas las selecciones posteriores, hasta que se anula usando el comando de nuevo. El comando C-x RET X (set-next-selection-coding-system) especifica el sistema de codificación para la siguiente selección hecha en Emacs o leída por Emacs.

La variable x-select-request-type especifica el tipo de datos a solicitar al sistema X Window para recibir selecciones de texto de otras aplicaciones. Si el valor es nil (por defecto), Emacs intenta UTF8_STRING y COMPOUND_TEXT, en este orden, y usa varios heurísticos para elegir el más apropiado de los dos resultados; si ninguno de ellos tiene éxito, Emacs vuelve a STRING. Si el valor de x-select-request-type es uno de los símbolos COMPOUND_TEXT, UTF8_STRING, STRING, o TEXT, Emacs usa sólo ese tipo de petición. Si el valor es una lista de algunos de estos símbolos, el Editor intenta sólo los tipos de petición de la lista, en orden, hasta que uno de ellos tiene éxito, o hasta que la lista se agota.

El comando C-x RET p (set-buffer-process-coding-system) especifica el sistema de codificación para la entrada y salida a un subproceso. Este comando se aplica al búfer actual; normalmente, cada subproceso tiene su propio búfer, por lo que puede usar este comando para especificar la traducción hacia y desde un subproceso concreto dando el comando en el búfer correspondiente.

También puede usar C-x RET c (universal-coding-system-argument) justo antes del comando que ejecuta o inicia un subproceso, para especificar el sistema de codificación para comunicarse con ese subproceso. Véase 23.9 Especificar un Sistema de Codificación para el Texto de un Archivo.

El valor predeterminado para la traducción de la entrada y salida del proceso depende del entorno lingüístico actual.

La variable locale-coding-system especifica un sistema de codificación a usar cuando se codifican y decodifican cadenas del sistema tales como mensajes de error del sistema y formatos format-time-string y marcas de tiempo. Ese sistema de codificación también puede usarse para decodificar entradas de teclado no ASCII en el sistema X Window y también se usará para codificar el texto enviado a la salida estándar y a los flujos de error en el modo por lotes. Debe elegir un sistema de codificación que sea compatible con la representación de texto del sistema subyacente, que normalmente se especifica mediante una de las variables de entorno LC_ALL, LC_CTYPE y LANG. (La primera, en el orden especificado anteriormente, cuyo valor no esté vacío es la que determina la representación de texto).

23.11 Sistemas de Codificación de Nombres de Archivos

Ctrl-x RETURN F codificación RETURN
(C-x RET F codificación RET)

Usa el sistema de codificación para codificar y descodificar nombres de archivo (set-file-name-coding-system).

El comando C-x RET F (set-file-name-coding-system) especifica un sistema de codificación a usar para codificar los nombres de archivo. No tiene ningún efecto sobre la lectura y escritura del contenido de los archivos.

De hecho, todo lo que hace este comando es establecer el valor de la variable file-name-coding-system (nombre-de-archivo-sistema-de-codificación). Si establece la variable a un nombre de sistema de codificación (como un símbolo Lisp o una cadena), Emacs codifica los nombres de archivo usando ese sistema de codificación para todas las operaciones de archivo. Esto hace posible usar caracteres no ASCII en los nombres de archivo-o, al menos, aquellos caracteres no ASCII que el sistema de codificación especificado puede codificar.

Si file-name-coding-system es nil, Emacs usa un sistema de codificación por defecto determinado por el entorno de lenguaje seleccionado, y almacenado en la variable default-file-name-coding-system (normalmente UTF-8).

Cuando Emacs se ejecuta en versiones de MS-Windows descendientes de la familia NT (Windows 2000, XP y todas las versiones posteriores), el valor de file-name-coding-system se ignora en gran medida, ya que Emacs usa por defecto APIs que permiten pasar nombres de archivo Unicode directamente. Por el contrario, en Windows 9X, los nombres de archivo se codifican usando file-name-coding-system, que debe establecerse a la codepage (ver 23.5 Sistemas de Codificación) pertinente para la configuración regional actual del sistema. El valor de la variable w32-unicode-filenames controla si Emacs usa las APIs Unicode cuando llama a funciones del SO que aceptan nombres de archivo. Esta variable es establecida por el código de inicio a nil en Windows 9X, y a t en versiones más recientes de MS-Windows.

Si se produce un error al codificar un nombre de archivo, use el comando M-x recode-file-name para cambiar el sistema de codificación del nombre de archivo. Este comando solicita un nombre de archivo existente, su antiguo sistema de codificación y el sistema de codificación al que desea convertirlo.

23.12. Sistemas de Codificación para la Entrada de Teclado X

Los métodos de entrada bajo el sistema X Window especifican sus propios sistemas de codificación que deben usarse para decodificar la entrada del teclado. Por defecto, Emacs determina el sistema de codificación usado para cada método de entrada automáticamente al establecer la conexión con el servidor del método de entrada, y usa ese sistema de codificación específico para decodificar la entrada del teclado. Sin embargo, esa determinación puede fallar a veces; en esa situación, se usa en su lugar el sistema de codificación locale (ver 23.10 Sistemas Codificación para la Comunicación Interprocesos).

Si el método de entrada no anuncia correctamente el sistema de codificación que usa para codificar el texto, entonces el sistema de codificación usado por Emacs para decodificar el texto de los métodos de entrada debe ser especificado manualmente. El valor de la variable x-input-coding-system, cuando se establece en un símbolo, se usa incondicionalmente como el sistema de codificación usado para decodificar la entrada del teclado desde los métodos de entrada.

23.13 Sistemas de Codificación para E/S de Terminal

Ctrl-x RETURN t codificación RETURN
(C-x RET t codificación RET)

Usa la codificación del sistema para la salida del terminal (set-terminal-coding-system).

Ctrl-x RETURN k codificación RETURN
(C-x RET k codificación RET)

Usa la codificación del sistema para la entrada del teclado (set-keyboard-coding-system).

El comando C-x RET t (set-terminal-coding-system) especifica el sistema de codificación para la salida del terminal. Si especifica un código de caracteres para la salida del terminal, todos los caracteres emitidos al terminal se traducen a ese sistema de codificación.

Esta función es útil para algunos terminales de sólo caracteres construidos para soportar idiomas o conjuntos de caracteres específicos, por ejemplo, terminales europeos que soportan uno de los conjuntos de caracteres latinos ISO. Es necesario especificar el sistema de codificación del terminal cuando se usa texto multibyte, para que Emacs sepa qué caracteres puede manejar realmente el terminal.

Por defecto, la salida al terminal no se traduce en absoluto, a menos que Emacs pueda deducir el sistema de codificación apropiado de tu tipo de terminal o de tu especificación de localización (ver 23.3 Métodos de Entrada).

El comando C-x RET k (set-keyboard-coding-system), o la variable keyboard-coding-system, especifica el sistema de codificación para la entrada del teclado. La traducción del código de caracteres de la entrada del teclado es útil para terminales con teclas que envían caracteres gráficos no ASCII, por ejemplo, algunos terminales diseñados para ISO Latin-1 o subconjuntos de ésta.

Por defecto, la entrada del teclado se traduce en función de la configuración regional del sistema. Si su terminal no admite realmente la codificación implícita en su configuración regional (por ejemplo, si descubre que inserta un carácter no ASCII al escribir M-i), deberá establecer keyboard-coding-system en nil para desactivar la codificación. Para ello, escriba

(set-keyboard-coding-system nil)

en su archivo init.

Establecer keyboard-coding-system no tiene efecto en MS-Windows, excepto en sistemas Windows 9X antiguos, en cuyo caso la codificación debe coincidir con la actual codepage de la consola de MS-Windows, que puede cambiarse llamando a w32-set-console-codepage.

Existe una similitud entre usar una traducción del sistema de codificación para la entrada del teclado, y usar un método de entrada: ambos definen secuencias de entrada del teclado que se traducen en caracteres individuales. Sin embargo, los métodos de entrada están diseñados para usarlos de forma interactiva por humanos, y las secuencias que se traducen suelen ser secuencias de caracteres de impresión ASCII. Los sistemas de codificación suelen traducir secuencias de caracteres no gráficos.

23.14 Conjunto de fuentes (fontsets)

Una fuente normalmente define formas para un único alfabeto o script. Por lo tanto, mostrar todo el rango de scripts que Emacs soporta requiere una colección de muchas fuentes. En Emacs, tal colección se llama conjunto de fuentes (fontsets). Un conjunto de fuentes está definido por una lista de especificaciones de fuentes, cada una asignada para manejar un rango de códigos de caracteres, y puede recurrir a otro conjunto de fuentes para caracteres que no están cubiertos por las fuentes que especifica.

Cada fontset tiene un nombre, como una fuente. Sin embargo, mientras que las fuentes se almacenan en el sistema y los nombres de las fuentes disponibles los define el sistema, los conjuntos de fuentes se definen dentro del propio Editor. Una vez que ha definido un conjunto de fuentes, puede usarlo dentro de Emacs especificando su nombre, en cualquier lugar donde podría usar una sola fuente. Por supuesto, los conjuntos de fuentes de Emacs pueden usar sólo las fuentes que soporta su sistema. Si algunos caracteres aparecen en la pantalla como cajas vacías o códigos hexadecimales, esto significa que el juego de fuentes que se está usando para ellos no tiene un tipo de letra para esos caracteres. En este caso, o si los caracteres se muestran, pero no tan bien como le gustaría, puede que necesite instalar fuentes adicionales o modificar el juego de fuentes para usar fuentes específicas ya instaladas en su sistema (ver más abajo). Su sistema operativo puede tener fuentes opcionales que puede instalar; o puede instalar el paquete GNU Intlfonts, que incluye fuentes para la mayoría de los scripts soportados. [10]

Emacs crea automáticamente tres conjuntos de fuentes: el estándar (standard fontset), el de inicio (startup fontset) y el predeterminado (default fontset). El juego de fuentes por defecto es el más probable que tenga fuentes para una amplia variedad de caracteres no ASCII, y es la opción por defecto para los otros dos juegos de fuentes, y si establece una fuente por defecto en lugar de un juego de fuentes. Sin embargo, no especifica los nombres de las familias de fuentes, por lo que los resultados pueden ser algo aleatorios si se usa directamente. Puede especificar un juego de fuentes concreto iniciando Emacs con la opción -fn. Por ejemplo,

emacs -fn fontset-standard

También puede especificar un conjunto de fuentes con el recurso Font (ver Apéndice D Opciones y Recursos de X).

Si no se especifica un conjunto de fuentes para usar, Emacs usa una fuente ASCII, con fontset-default como alternativa para los caracteres que la fuente no cubre. El conjunto de fuentes estándar sólo se usa si se solicita explícitamente, a pesar de su nombre.

Para mostrar la información sobre un conjunto de fuentes específico, use el comando M-x describe-fontset. Este comando pide un nombre de juego de fuentes, por defecto el usado por el marco actual, y entonces muestra todos los subjuegos de caracteres y las fuentes asignadas a ellos en ese juego de fuentes. Para ver qué fuentes está usando Emacs en una sesión iniciada sin un juego de fuentes específico (que es lo que ocurre normalmente), escriba fontset-default RETURN (fontset-default RET) en el prompt, o simplemente RETURN (RET) para describir el juego de fuentes usado por el marco actual.

Un juego de fuentes no especifica necesariamente una fuente para cada código de carácter. Si un juego de fuentes no especifica ninguna fuente para un carácter determinado, o si especifica una fuente que no existe en su sistema, no podrá mostrar ese carácter correctamente. En su lugar, mostrará el carácter como un código hexadecimal, un espacio en blanco o un recuadro vacío. (Ver 15.20 Cómo se Muestra el Texto, para más detalles.) O un fontset puede especificar una fuente para algún rango de caracteres, pero puede que no te guste su apariencia visual. Si ocurre esto, es posible que desee modificar su conjunto de fuentes; consulte 23.16 Modificar Conjunto de Fuentes, para saber cómo hacerlo.

xset fp+ /usr/local/share/emacs/fonts
xset fp rehash

23.15. Definir Juegos de Fuentes

Cuando se ejecuta en X, Emacs crea automáticamente un juego de fuentes estándar de acuerdo con el valor de standard-fontset-spec. El nombre de este juego de fuentes es

-*-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-standard

o simplemente fontset-standard para abreviar.

En GNUstep y macOS, el conjunto de fuentes estándar se crea usando el valor de ns-standard-fontset-spec, y en MS Windows se crea usando el valor de w32-standard-fontset-spec.

Las variantes negrita (bold), cursiva (italic) y negrita-cursiva (bold-italic) del conjunto de fuentes estándar se crean automáticamente. Sus nombres tienen bold en lugar de medium, o i en lugar de r o ambos.

Emacs genera un juego de fuentes automáticamente, basado en cualquier fuente ASCII por defecto que especifiques con el recurso Font o el argumento -fn, o la fuente por defecto que Emacs encontró cuando se inició. Este es el conjunto de fuentes de inicio y su nombre es fontset-startup. Emacs genera este juego de fuentes reemplazando el campo charset_registry por fontset, y reemplazando el campo charset_encoding por startup, y luego usando la cadena resultante para especificar un juego de fuentes.

Por ejemplo, si inicia Emacs con una fuente de esta forma,

emacs -fn "*courier-medium-r-normal--14-140-*-iso8859-1"

Emacs genera el siguiente juego de fuentes y lo usa para el marco inicial de la ventana X:

-*-courier-medium-r-normal-*-14-140-*-*-*-*-fontset-startup

El conjunto de fuentes de inicio usará la fuente que especifique, o una variante con un registro y codificación diferentes, para todos los caracteres soportados por esa fuente, y recurrirá a fontset-default para otros caracteres.

Con el recurso X Emacs.Font, puede especificar un nombre de conjunto de fuentes igual que un nombre de fuente real. Pero tenga cuidado de no especificar un nombre de conjunto de fuentes en un recurso comodín como Emacs*Font, esa especificación comodín coincide con varios otros recursos, como los menús, y los menús no pueden manejar conjuntos de fuentes. Ver Apéndice D Opciones y Recursos de X.

Puede especificar conjuntos de fuentes adicionales usando recursos X llamados Fontset-n, donde n es un número entero empezando por 0. El valor del recurso debe tener esta forma:

tipo de fuente, [conjunto de cracteres:fuente]…

donde tipo de fuente (fontpattern) debe tener la forma de un nombre de fuente X estándar (véase el ejemplo anterior de fontset-startup), excepto los dos últimos campos. Deben tener la forma fontset-alias.

Cada tipo de fuentes (tipo de fuente) tiene dos nombres, uno largo y otro corto. El nombre largo es tipo de fuente. El nombre corto es fontset-alias, los 2 últimos campos del nombre largo (por ejemplo, fontset-startup para el fontset creado automáticamente al iniciarse). Puede referirse al conjunto de fuentes por cualquiera de los dos nombres.

La construcción charset:font especifica qué fuente usar (en este conjunto de fuentes) para un conjunto de caracteres en particular. Aquí, conjunto de caracteres (charset) es el nombre de un conjunto de caracteres, y fuente (fuente) es la fuente a usar para ese conjunto de caracteres. Puede usar esta construcción cualquier número de veces al definir un juego de fuentes.

Para los otros juegos de caracteres, Emacs elige una fuente basándose en fontpattern. Reemplaza fontset-alias con valores que describen el juego de caracteres. Para la fuente de caracteres ASCII, fontset-alias se sustituye por ISO8859-1.

Además, cuando varios campos consecutivos son comodines, Emacs los colapsa en un único comodín. Esto se hace para evitar usar fuentes autoescaladas. Las fuentes hechas escalando fuentes más grandes no son útiles para editar, y escalar una fuente más pequeña tampoco es útil, porque es mejor usar la fuente más pequeña en su propio tamaño, que es lo que hace Emacs.

Así, si patrón o tipo de fuente (fontpattern) es

-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24

la especificación de la fuente para los caracteres ASCII sería la siguiente:

-*-fixed-medium-r-normal-*-24-*-ISO8859-1

y la especificación de la fuente para los caracteres chinos GB2312 sería ésta:

-*-fixed-medium-r-normal-*-24-*-gb2312*-*

Es posible que no tenga ninguna fuente china que coincida con la especificación de fuentes anterior. La mayoría de las distribuciones X sólo incluyen fuentes chinas que song ti o fangsong ti en el campo de familia. En tal caso, Fontset-n especificarse como:

Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
        chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*

Entonces, las especificaciones de fuentes para todos los caracteres excepto el chino GB2312 tienen fixed en el campo familia, y la especificación de fuentes para los caracteres chinos GB2312 tiene un comodín * en dicho campo.

La función que procesa el valor del recurso fontset para crear el conjunto de fuentes se llama create-fontset-from-fontset-spec. También puede llamar a esta función explícitamente para crear un conjunto de fuentes.

Consulte 22.8 Fuentes, para obtener más información sobre la denominación de fuentes.

23.16 Modificar Conjunto de Fuentes

No siempre se pueden crear conjuntos de fuentes desde cero. Si sólo se requieren cambios menores, puede ser más fácil modificar un conjunto de fuentes existente, normalmente fontset-default. Modificar fontset-default también afectará a otros conjuntos de fuentes que lo usen como alternativa, por lo que puede ser una forma efectiva de arreglar problemas con las fuentes que Emacs elige para un script en particular.

Los conjuntos de fuentes pueden modificarse usando la función set-fontset-font, especificando un carácter, un conjunto de caracteres, un script, o un rango de caracteres para modificar la fuente, y una especificación de fuente para la fuente a usar. Algunos ejemplos son:

;; Prefer a big5 font for han characters.
(set-fontset-font "fontset-default"
                  'han (font-spec :registry "big5")
                   nil 'prepend)

;; Use MyPrivateFont for the Unicode private use area.
(set-fontset-font "fontset-default"  '(#xe000 . #xf8ff)
                  "MyPrivateFont")

;; Use Liberation Mono for latin-3 charset.
(set-fontset-font "fontset-default" 'iso-8859-3
                  "Liberation Mono")

;; Use DejaVu Sans Mono as a fallback in fontset-startup
;; before resorting to fontset-default.
(set-fontset-font "fontset-startup" nil "DejaVu Sans Mono"
                  nil 'append)
;; Se prefiere una fuente big5 para los caracteres han.
(set-fontset-font "fontset-default"
                  han (font-spec :registry "big5")
                  nil 'prepend)

;; Usar MyPrivateFont para el área de uso privado Unicode.
(set-fontset-font "fontset-default" '(#xe000 . #xf8ff)
                  "MyPrivateFont")

;; Usar Liberation Mono para el juego de caracteres latin-3.
(set-fontset-font "fontset-default" 'iso-8859-3
                  "Liberation Mono")

;; Usar DejaVu Sans Mono como alternativa en fontset-startup
;; antes de recurrir a fontset-default.
(set-fontset-font "fontset-startup" nil "DejaVu Sans Mono"
                  nil 'append)

Ver Conjunto de Fuentes en GNU Emacs Lisp Reference Manual, para más detalles sobre cómo usar la función set-fontset-font.

Si no conoce el código en el punto del carácter o el script al que pertenece, puede preguntar a Emacs. Con el punto en el carácter, teclee Ctrl-u Ctrl-x = (C-u C-x =, what-cursor-position), y esta información, junto con mucha más, se mostrará en el búfer *Help* que Emacs despliega. Ver 8.9 Información sobre la posición del cursor. Por ejemplo, los caracteres japoneses pertenecen a la escritura kana, pero el texto japonés también los mezcla con caracteres chinos, así que lo siguiente usa la escritura han para configurar Emacs para usar la fuente Kochi Gothic para el texto japonés:

(set-fontset-font "fontset-default" 'han "Kochi Gothic")

(Por comodidad, el script han en Emacs está configurado para soportar todos los caracteres chinos, japoneses y coreanos, también conocidos como CJK, no sólo los caracteres chinos).

Para ver la lista de scripts conocidos, consulta la variable script-representative-chars.

Los ajustes del juego de fuentes como los anteriores sólo afectan a los caracteres que la fuente por defecto no soporta, así que si la fuente Kochi Gothic cubre caracteres latinos, no se usará para mostrar escrituras latinas, ya que la fuente por defecto usada por Emacs suele cubrir el latín básico.

Algunas fuentes instaladas en su sistema pueden estar rotas, o producir resultados desagradables para los caracteres para los que se usan, y puede que quiera ordenar a Emacs que las ignore completamente mientras busca una fuente adecuada para mostrar un carácter. Puede hacerlo añadiendo las fuentes problemáticas al valor de la variable face-ignored-fonts, que es una lista. Aquí tiene un ejemplo para poner en su ~/.emacs:

(add-to-list 'face-ignored-fonts "Some Bad Font")

23.17 Caracteres no Visualizables

Puede haber algunos caracteres no ASCII que su terminal no pueda mostrar. La mayoría de los terminales de texto soportan un único juego de caracteres (use la variable default-terminal-coding-system para decirle a Emacs cuál es, 23.13 Sistemas de Codificación para E/S de Terminal); los caracteres que no pueden ser codificados en ese sistema de codificación se muestran como ? por defecto.

Las pantallas gráficas pueden mostrar un rango más amplio de caracteres, pero puede que no tenga fuentes instaladas para todos ellos; los caracteres que no tienen fuente aparecen como una caja hueca.

Si usa caracteres Latin-1 pero su terminal no puede mostrar Latin-1, puede hacer que muestre secuencias ASCII mnemotécnicas en su lugar, por ejemplo, "o para o-umlaut. Para ello, cargue la biblioteca iso-ascii.

Si su terminal puede mostrar Latin-1, puede mostrar caracteres de otros juegos de caracteres europeos usando una mezcla de caracteres Latin-1 equivalentes y mnemónicos ASCII. Para ello, personalice la variable latin1-display. Las secuencias mnemotécnicas ASCII corresponden en su mayoría a las de los métodos de entrada de prefijos.

23.18 Modo de Edición Unibyte

Los juegos de caracteres ISO 8859 Latin-n definen códigos de caracteres en el rango 0240 a 0377 octal (160 a 255 decimal) para manejar las letras acentuadas y la puntuación que necesitan varios idiomas europeos (y algunos no europeos). Tenga en cuenta que Emacs considera los bytes con códigos en este rango como bytes brutos, no como caracteres, incluso en un búfer de unibyte, es decir, si desactiva los caracteres multibyte. Sin embargo, Emacs puede seguir manejando estos códigos de caracteres como si pertenecieran a uno de los conjuntos de caracteres de byte único a la vez. Para especificar cuál de estos códigos usar, invoque M-x set-language-environment y especifique un entorno de lenguaje adecuado como Latin-n. Deshabilitar Caracteres Multibyte en el Manual de Referencia de GNU Emacs Lisp.

Emacs también puede mostrar bytes en el rango de 160 a 255 como caracteres legibles, siempre que el terminal o fuente en uso los soporte. Esto funciona automáticamente. En una pantalla gráfica, Emacs también puede mostrar caracteres de un byte a través de conjuntos de fuentes, en efecto mostrando los caracteres multibyte equivalentes según el entorno de lenguaje actual. Para solicitar esto, establezca la variable unibyte-display-via-language-environment a un valor no nulo. Tenga en cuenta que esto sólo afecta a cómo se muestran estos bytes, pero no cambia el hecho fundamental de que Emacs los trata como bytes en bruto, no como caracteres.

Si su terminal no soporta la visualización del juego de caracteres Latin-1, Emacs puede mostrar estos caracteres como secuencias ASCII que al menos le dan una idea clara de lo que son los caracteres. Para ello, cargue la biblioteca iso-ascii. Podrían implementarse bibliotecas similares para otros conjuntos de caracteres Latin-n, pero no se ha hecho hasta ahora.

Normalmente los caracteres no ISO-8859 (códigos decimales entre 128 y 159 inclusive) se muestran como escapes octales. Puede cambiar esto para las versiones extendidas no estándar de los juegos de caracteres ISO-8859 usando la función standard-display-8bit de la biblioteca disp-table.

Hay dos formas de introducir caracteres no ASCII de un solo byte:

  • Puede usar un método de entrada para el entorno lingüístico seleccionado. Véase 23.3 Métodos de Entrada. Cuando se usa un método de entrada en un búfer unibyte, el carácter no ASCII que se especifica con él se convierte a unibyte.

  • Si su teclado puede generar códigos de caracteres 128 (decimal) y superiores, que representan caracteres no ASCII, puede escribir directamente esos códigos de caracteres.

    En una pantalla gráfica, no debería tener que hacer nada especial para usar estas teclas; simplemente deberían funcionar. En un terminal de texto, debe usar el comando M-x set-keyboard-coding-system o personalizar la variable keyboard-coding-system para especificar qué sistema de codificación usa su teclado (consulte 23.13 Sistemas de Codificación para E/S de Terminal). Activar esta característica probablemente le obligará a usar ESC (ESC) para escribir caracteres Meta; sin embargo, en un terminal de consola o en un emulador de terminal como xterm, puede hacer que Meta se convierta en ESC y seguir siendo capaz de escribir caracteres de 8 bits presentes directamente en el teclado o usando las teclas Compose o AltGr (AltGr). Ver 2 Tipos de Entrada del Usuario.

    Muchos sistemas modernos proporcionan métodos de entrada nativos para muchos lenguajes cuyos caracteres no tienen pulsaciones de teclado asignadas. Si Emacs fue construido con soporte para estos métodos de entrada nativos, puede activar tal método de entrada y escribir los caracteres que soportan. Cómo activar y usar estos métodos de entrada depende del sistema y del método de entrada, y no se describirá aquí; consulte la documentación de su sistema. Aquí describimos algunas facilidades de Emacs para controlar el uso de los métodos de entrada nativos.

    En Emacs construido con el kit de herramientas GTK, la variable x-gtk-use-native-input controla si Emacs debe recibir caracteres producidos por los métodos de entrada GTK. Si el valor es nil, por defecto, Emacs usa los métodos de entrada X (XIM), en caso contrario use los métodos de entrada GTK. El recurso X: useXIM controla si usar XIM, y el recurso X inputStyle controla la visualización en X del texto de previsualización generado por los métodos de entrada nativos; ver D.2 Tabla de Recursos X para Emacs.

    En MS-Windows, Emacs soporta métodos de entrada nativos proporcionados por IMM, el Gestor de Métodos de Entrada, pero eso puede desactivarse si es necesario; ver Uso del Teclado en MS-Windows.

  • Puede usar la combinación de teclas Ctrl-x 8 (C-x 8) como prefijo de caracteres de composición para introducir caracteres latinos-1 no ASCII y otros caracteres de impresión. C-x 8 sirve para la inserción (tanto en el minibúfer como en otros búferes), para la búsqueda y en cualquier otro contexto en el que se permita una secuencia de teclas. C-x 8 funciona cargando la biblioteca iso-transl. Una vez cargada esa biblioteca, la tecla modificadora Alt (Alt), si el teclado dispone de ella, sirve para lo mismo que C-x 8: usar Alt junto con un carácter acentuado para modificar la letra siguiente. Además, si el teclado dispone de teclas para los caracteres de acento muerto Latin-1, también se definen para componer con el carácter siguiente, una vez cargado iso-transl.

    Usar C-x 8 C-h para listar todas las traducciones C-x 8 disponibles.

23.19 Juegos de Caracteres

En Emacs, charset es la abreviatura de «juego de caracteres» (character set). Emacs soporta los juegos de caracteres más populares (como ascii, iso-8859-1, cp1250, big5 y unicode), además de algunos juegos de caracteres propios (como emacs, unicode-bmp y eight-bit). Todos los caracteres soportados pertenecen a uno o más conjuntos de caracteres.

Emacs normalmente hace lo correcto con respecto a los charsets, de modo que no tiene que preocuparse por ellos. Sin embargo, a veces es útil conocer algunos de los detalles subyacentes sobre los juegos de caracteres.

Un ejemplo es la selección de fuentes (véase 22.8 Fuentes). Cada entorno de lenguaje (ver 23.2 Entornos de Lenguaje (o Idioma)) define una lista de prioridades para los distintos conjuntos de caracteres. Cuando se busca una fuente, Emacs inicialmente intenta encontrar una que pueda mostrar los conjuntos de caracteres de mayor prioridad. Por ejemplo, en el entorno de idioma japonés, el conjunto de caracteres japanese-jisx0208 tiene la prioridad más alta, por lo que Emacs intenta usar una fuente cuya propiedad de registro sea JISX0208.1983-0.

Hay dos comandos que se pueden usar para obtener información sobre los juegos de caracteres. El comando M-x list-charset-chars pide un nombre de juego de caracteres y muestra todos los caracteres de ese juego. El comando M-x describe-character-set pide un nombre de juego de caracteres, y muestra información sobre ese juego, incluyendo su representación interna dentro de Emacs.

M-x list-character-sets muestra una lista de todos los juegos de caracteres soportados. La lista proporciona los nombres de los juegos de caracteres e información adicional para identificar cada juego; para más detalles, consulte el Registro Internacional ISO de Juegos de Caracteres Codificados para Usar con Secuencias de Escape (ISO-IR) mantenido por la Sociedad de Procesamiento de la Información de Japón/Comisión de Estándares de Tecnología de la Información de Japón (IPSJ/ITSCJ). En esta lista, los conjuntos de caracteres se dividen en dos categorías: los conjuntos de caracteres normales aparecen en primer lugar, seguidos de los conjuntos de caracteres suplementarios. Un juego de caracteres suplementario es aquel que se usa para definir otro juego de caracteres (como padre o subconjunto), o para proporcionar compatibilidad con versiones anteriores de Emacs.

Para averiguar a qué juego de caracteres pertenece un carácter en el búfer, pon punto delante de él y teclee Ctrl-u Ctrl-x = (C-u C-x =) (ver 23.1 Introducción a los Juegos de Caracteres Internacionales).

23.20 Edición Bidireccional

Emacs soporta la edición de texto escrito en alfabetos, como el Árabe, el Farsi y el Hebreo, cuyo orden natural del texto horizontal es de derecha a izquierda. Sin embargo, los dígitos y el texto latino incrustado en estos alfabetos se muestran de izquierda a derecha. Tampoco es infrecuente que haya pequeñas porciones de texto en árabe o hebreo incrustadas en un documento que, por lo demás, es latino; por ejemplo, como comentarios y cadenas en el archivo fuente de un programa. Por estas razones, el texto que usa estos alfabetos es bidireccional: una mezcla de caracteres de izquierda a derecha y de derecha a izquierda.

Esta sección describe las facilidades y opciones proporcionadas por Emacs para editar texto bidireccional.

Emacs almacena el texto de derecha a izquierda y bidireccional en el llamado orden lógico (o de lectura): la posición del búfer o cadena del primer carácter que se lee precede a la del siguiente carácter. El reordenamiento del texto bidireccional en el orden visual se produce en el momento de la visualización. Como resultado, las posiciones de los caracteres ya no aumentan monotónicamente con sus posiciones en pantalla. Emacs implementa el Algoritmo Bidireccional Unicode (UBA) descrito en el Anexo #9 del Estándar Unicode, para la reordenación del texto bidireccional en pantalla. Se desvía del UBA sólo en cómo se muestran las líneas de continuación cuando la dirección del texto es opuesta a la dirección del párrafo base, por ejemplo, cuando una línea larga de texto en inglés aparece en un párrafo de derecha a izquierda.

La variable local del búfer bidi-display-reordering controla si el texto del búfer se reordena para su visualización. Si su valor no es nulo, Emacs reordena los caracteres que tienen direccionalidad de derecha a izquierda cuando se muestran. El valor por defecto es t.

Cada párrafo de texto bidireccional puede tener su propia dirección base, de derecha a izquierda o de izquierda a derecha. El texto de los párrafos de izquierda a derecha comienza en la pantalla en el margen izquierdo de la ventana y se trunca o continúa cuando alcanza el margen derecho. Por el contrario, el texto de los párrafos de derecha a izquierda se muestra comenzando en el margen derecho y se continúa o trunca en el margen izquierdo. Por defecto, los límites de los párrafos son líneas vacías, es decir, líneas formadas enteramente por caracteres de espacio en blanco. Para cambiar esto, puede personalizar las dos variables bidi-paragraph-start-re y bidi-paragraph-separate-re, cuyos valores deben ser expresiones regulares (cadenas); por ejemplo, para que una sola nueva línea inicie un nuevo párrafo, establezca ambas variables a "^". Estas dos variables son locales al búfer (ver 50.2.3 Variables Locales).

Emacs determina la dirección base de cada párrafo dinámicamente, basándose en el texto al principio del párrafo. Sin embargo, a veces un búfer puede necesitar forzar una cierta dirección base para sus párrafos. La variable bidi-paragraph-direction, si no es nula, desactiva la determinación dinámica de la dirección base, y en su lugar fuerza a todos los párrafos del búfer a tener la dirección especificada por su valor buffer-local. El valor puede ser right-to-left (de derecha a izquierda) o left-to-right (de izquierda a derecha). Cualquier otro valor se interpreta como nil.

Alternativamente, puede controlar la dirección base de un párrafo insertando caracteres especiales de formato delante del párrafo. El carácter especial RIGHT-TO-LEFT MARK (MARCA DE DERECHA A IZQUIERDA), o RLM, fuerza la dirección de derecha a izquierda en el párrafo siguiente, mientras que LEFT-TO-RIGHT MARK (MARCA DE IZQUIERDA A DERECHA), o LRM, fuerza la dirección de izquierda a derecha. (Puede usar C-x 8 RET para insertar estos caracteres.) En una sesión GUI, los caracteres LRM y RLM se muestran como caracteres en blanco muy finos; en terminales de texto se muestran como espacios en blanco.

Debido a que los caracteres son reordenados para su visualización, los comandos de Emacs que operan en el orden lógico o en tramos de posiciones del búfer pueden producir efectos inusuales. Por ejemplo, los comandos C-f y C-b mueven el punto en el orden lógico, por lo que el cursor a veces saltará cuando el punto atraviese texto bidireccional reordenado. Del mismo modo, una región resaltada que cubra un rango contiguo de posiciones de caracteres puede parecer discontinua si la región abarca texto reordenado. Esto es normal y similar al comportamiento de otros programas que soportan texto bidireccional.

Los comandos de movimiento del cursor vinculados a las teclas de flecha, como (LEFT, IZQUIERDA) y Ctrl- (C-RIGHT C-DERECHA), son sensibles a la dirección base del párrafo actual. En un párrafo de izquierda a derecha, los comandos ligados a DERECHA con o sin modificadores se mueven hacia adelante a través del texto del búfer, pero en un párrafo de derecha a izquierda se mueven hacia atrás. Esto refleja el hecho de que en un párrafo de derecha a izquierda las posiciones del búfer aumentan predominantemente al desplazarse hacia la izquierda en la pantalla.

Cuando se sale de un párrafo, el significado de las teclas de flecha puede cambiar si la dirección base del párrafo anterior o del siguiente es diferente de la del párrafo del que se ha salido. Cuando esto ocurra, deberá ajustar la tecla de flecha que pulse a la nueva dirección base.

Por defecto, LEFT (IZQUIERDA) y RIGHT (DERECHA) se mueven en el orden lógico, pero si visual-order-cursor-movement es no nulo, estos comandos se mueven al carácter que está, correspondientemente, a la izquierda o a la derecha de la posición actual de la pantalla, moviéndose a la línea de pantalla siguiente o anterior según corresponda. Tenga en cuenta que esto podría mover el punto a muchas posiciones de búfer, dependiendo del contexto bidireccional circundante.

El texto bidireccional a veces usa caracteres de formato especiales para afectar a la reordenación del texto en pantalla. Los caracteres LRM y RLM, mencionados anteriormente, son dos de ellos, pero hay más. Se muestran por defecto como glifos de espacio fino en los marcos GUI, y como espacios simples en los marcos de modo texto. Si quiere conocer estos caracteres de control especiales, para que su efecto en la visualización no sea una sorpresa, puede activar el modo de visualización sin glifos (glyphless-display-mode) (vea 15.20 Cómo se Muestra el Texto). Este modo menor hará que estos caracteres de formato se muestren como siglas dentro de un pequeño recuadro, de modo que destaquen en pantalla y su efecto sea más fácil de entender.