Traducción de Inglés a Español de un texto de Alan Third que explica cómo funcionan las fuentes en Emacs y como trabajar con idiomas especiales: fuente por defecto, fuentes de reserva, fuentes para otros idiomas, etc
GNU Emacs es un potente editor de texto, muy popular entre programadores y usuarios técnicos. En este texto, que traducimos del inglés al español para ayuda de muchos usuarios que no hablan inglés, explicaremos cómo funciona el sistema de fuentes en Emacs.
Un artículo escrito por Alan Third y publicado originalmente en Idiocy.org
***
Con Emacs, tenía un problema: no conseguía entender cómo funcionaba el sistema de fuentes. Tenía muy claro que los paquetes de fuentes eran la solución a muchos de mis problemas, pero nunca había conseguido averiguar cómo utilizarlos. Os dejo por aquí todo lo que he aprendido sobre la configuración de fuentes en Emacs.
INDICE
Se suele decir que «cada maestrillo tiene su librillo», y en Emacs ocurre lo mismo. Hay tantas formas de configurar la fuente por defecto como usuarios, pero esta es la que más me ha convencido:
(set-face-attribute 'default nil :font "Droid Sans Mono")
Así, se modifica el paquete de fuentes por defecto y se establece la fuente en todos los frames.
Pero ¿qué pasa si utilizas la misma configuración en varias cajas o si la fuente que has elegido no proporciona todos los glifos que necesitas? Por defecto, Emacs busca entre las fuentes existentes hasta que encuentre una que contenga el glifo deseado, pero el proceso puede ser muy lento y, además, un caos1.
Emacs permite que puedas especificar tú mismo cuáles son las fuentes de reserva. Para hacerlo con el paquete de fuentes por defecto, prueba a hacer algo así:
(set-fontset-font t nil "Courier New" nil 'append)
Al usar t como primer argumento, se actualizará el paquete de fuentes por defecto. También es posible crear otros paquetes de fuentes y utilizarlos, pero nunca me ha dado muy buen resultado, así que prefiero modificar el predeterminado y ya está. El segundo argumento, al que volveremos luego, es el rango del glifo. El último argumento, append, es el que ordena a Emacs que añada la fuente al final del paquete de fuentes, por lo que será la opción a la que recurrir después de todas las que incluya el paquete. También se puede utilizar prepend, que, junto con set-face-attribute, pone la fuente en primer lugar, justo después de la establecida por defecto.
Pero volvamos al segundo argumento, el del rango de glifos. Puedes especificar un solo glifo, un rango de glifos, el nombre de un conjunto de caracteres o un idioma.
Por ejemplo, si quieres que se use en una fuente específica.
(set-fontset-font t ?:) "Segoe UI Emoji")
También puedes establecer rangos.
(set-fontset-font t '(?:) .?:/) "Segoe UI Emoji")
Esta opción no es válida para caracteres ASCII, Emacs no lo permite.
Vamos a suponer que sueles usar mucho las letras tailandesas, pero que tu fuente por defecto no las soporta, o que igual te gusta más cómo queda otra fuente para la letra tailandesa.
Busca en script-representative-chars y list-charset-chars para ver si lo que buscas está en la lista y usa ese nombre. Si no, usa describe-char en uno de los caracteres en cuestión y mira las entradas de charset o script.
(set-fontset-font t 'thai" Noto Sans Thai")
Esto acelera muchísimo el proceso, porque Emacs ya no tiene que buscar entre cientos de fuentes para ver si hay alguna compatible.
Si necesitas establecer una fuente de reserva para la letra tailandesa, solo tienes que hacer lo de arriba.
(set-fontset-font t 'thai" Leelawadee UI" nil 'append)
Lo malo es que, si estás usando la configuración en máquinas que no tienen estas fuentes, ni siquiera se va a molestar en buscar una fuente compatible, solo ofrecerá una fila de cajas. Pero no te preocupes, podemos obligar a Emacs a buscar usando font-spec.
(set-fontset-font t 'thai (font-spec :script 'thai) nil 'append)
Puedes poner lo que quieras en esa orden de font-spec; Emacs buscará entre las fuentes algo que se ajuste. No hay razón por la que no se pueda usar font-spec para establecer una fuente específica.
Nuestra configuración completa para la letra tailandesa tendría entonces este aspecto:
(set-fontset-font t 'thai "Noto Sans Thai")
(set-fontset-font t 'thai "Leelawadee UI" nil 'append)
(set-fontset-font t 'thai (font-spec :script 'thai) nil 'append)
Ten en cuenta que solo puedes añadir o preañadir una fuente cuando ya hay algo establecido para ese glifo o rango. Tiene sentido, pero yo antes pensaba que así la añadía a una gran lista dentro del paquete de fuentes en vez de a una dentro de un conjunto de listas, y no entendía por qué no funcionaba.
En vez de apostarlo todo a lo que haga la reserva, puedes ver si una fuente está instalada antes de intentar utilizarla. Es muy fácil, porque todas las familias de fuentes disponibles están en font-family-list2, así que solo habría que mirar la lista:
(member "Noto Sans" (font-family-list))
He configurado algunas fuentes básicas de Noto para varios idiomas para intentar que la navegación por el archivo Hello de Emacs sea más rápida (C-h h). Como no hay paquetes de reserva para estas fuentes, si utilizara esta configuración en un ordenador que no las tuviera, solo se verían un montón de casillas vacías por todas partes. Igual este es el empujón que necesitas para establecer una configuración propia.
(set-face-attribute 'default nil :font "Droid Sans Mono");
; Latin (set-fontset-font t 'latin "Noto Sans")
;; East Asia: 你好, 早晨, こんにちは, 안녕하세요
;;
;; Asegúrate de que estás usando la fuente correcta. Consulta:
;; https://www.google.com/get/noto/help/cjk/.
;;
;; This font requires "Regular". Other Noto fonts dont.
;; ¯\_(ツ)_/¯
(set-fontset-font t 'han "Noto Sans CJK SC Regular")
(set-fontset-font t 'kana "Noto Sans CJK JP Regular")
(set-fontset-font t 'hangul "Noto Sans CJK KR Regular")
(set-fontset-font t 'cjk-misc "Noto Sans CJK KR Regular")
;; South East Asia: ជំរាបសួរ, ສະບາຍດີ, မင်္ဂလာပါ, สวัสดีครับ
(set-fontset-font t 'khmer "Noto Sans Khmer")
(set-fontset-font t 'lao "Noto Sans Lao")
(set-fontset-font t 'burmese "Noto Sans Myanmar")
(set-fontset-font t 'thai "Noto Sans Thai")
;; Africa: ሠላም
(set-fontset-font t 'ethiopic "Noto Sans Ethiopic")
;; Middle/Near East: שלום, السّلام عليكم
(set-fontset-font t 'hebrew "Noto Sans Hebrew")
(set-fontset-font t 'arabic "Noto Sans Arabic")
;; South Asia: નમસ્તે, नमस्ते, ನಮಸ್ಕಾರ, നമസ്കാരം, ଶୁଣିବେ,
;; ආයුබෝවන්, வணக்கம், నమస్కారం, བཀྲ་ཤིས་བདེ་ལེགས༎
(set-fontset-font t 'gujarati "Noto Sans Gujarati")
(set-fontset-font t 'devanagari "Noto Sans Devanagari")
(set-fontset-font t 'kannada "Noto Sans Kannada")
(set-fontset-font t 'malayalam "Noto Sans Malayalam")
(set-fontset-font t 'oriya "Noto Sans Oriya")
(set-fontset-font t 'sinhala "Noto Sans Sinhala")
(set-fontset-font t 'tamil "Noto Sans Tamil")
(set-fontset-font t 'telugu "Noto Sans Telugu")
(set-fontset-font t 'tibetan "Noto Sans Tibetan")
Actualización: 31/3/2019. Yuan Fu nos ha hecho algunas sugerencias. ¡Gracias!
Actualización: 01/04/2019. Se ha añadido un enlace a la traducción al chino.
Actualización: 31/12/2019. Sebastian Urban me ha enviado una configuración de fuentes Noto más completa. Os dejo su mensaje:
Me ha parecido muy útil tu post «Emacs: fuentes y paquetes de fuentes» y me ha apetecido ir más allá. Como hay otras fuentes Noto Sans, he decidido crear una lista que sea lo más completa posible. Tiene la forma de «(set-fontset-font «default-fontset» ‘SCRIPTNAME «Noto Sans FONT»)». No he incluido «Noto Sans Symbols» ni «Noto Sans Symbols2» y utilizo «Noto Sans CJK SC Regular» para ‘cjk-misc’.
Además, como ocupa mucho espacio, las guardo en un archivo aparte y los cargo con «(load …)» desde init.
1 Emacs tiene por defecto la fuente de reserva de Symbola, por lo que es bueno instalarla para no tener que buscar en todo el paquete de fuentes.
2 Visita Xah Lee’s Font Setup page para obtener más información.
[Nota del Traductor]
La experiencia a lo largo de mas de 20 años realizando traducciones profesionales de muchos idiomas nos ha ido curtiendo en el trabajo con fuentes y charsets para idiomas con «caracteres especiales», categoría en la que entran los acentos del español y el francés, la eñe española, la virgulilla portuguesa, el umlaud alemán, etc. Hay muchos idiomas que traen consigo símbolos y caracteres ajenos al ingles, y por eso las fuentes y las codificaciones de caracteres ofrecen diversas variantes para poder cubrirlos.
En el artículo que hoy nos ocupa, traducido de Inglés a Español por Jose, Alan Third nos desvela el funcionamiento de las fuentes en Emacs: fuentes por defecto, fuentes de reserva, fuentes para otros idiomas, etc. Buena lectura!
Articulos relacionados
Traducción al español del artículo «XML Schema 1.1 Tutorial» originalmente publicado en inglés
Traducción del Inglés al Español de un artículo escrito por Justin Searls, programador interesado en la productividad, que reflexiona aquí acerca de cómo sacarle el máximo partido al hardware y software de Apple y en concreto a su iPad Pro de 10,5″. Descubre todas las funciones y...