2012-06-06 25 views
6

Estoy tratando de mostrar caracteres especiales Unicode, en particular, el operador matemático en emacs. Específicamente:Emacs: configuración de fuente para mostrar caracteres Unicode en OSX

   position: 283 of 317 (89%), column: 0 
      character: (displayed as) (codepoint 120046, #o352356, #x1d4ee) 
    preferred charset: unicode (Unicode (ISO10646)) 
code point in charset: 0x1D4EE 
       syntax: w which means: word 
      category: .:Base, L:Left-to-right (strong) 
      buffer code: #xF0 #x9D #x93 #xAE 
      file code: #xF0 #x9D #x93 #xAE 
       (encoded by coding system utf-8-unix) 
       display: no font available 
     Unicode data: 
       Name: MATHEMATICAL BOLD SCRIPT SMALL E 
      Category: Letter, Lowercase 
     Combining class: Ll 
     Bidi category: Ll 
     Decomposition: font e 

Character code properties: customize what to show 
    name: MATHEMATICAL BOLD SCRIPT SMALL E 
    general-category: Ll (Letter, Lowercase) 
    decomposition: (font 101) (font 'e') 

There are text properties here: 
    fontified   t 

Estoy usando GNU Emacs 24 un binario nocturno reciente. El texto anterior se muestra bien en mi navegador y en TextEdit; sin embargo, los caracteres especiales aparecen vacíos cuando se visualizan en emacs.

leí esto desde un viejo Emacs 22 manual: "Un conjunto tipográfico no necesariamente especificar una fuente para todos los códigos de caracteres Si un conjunto tipográfico especifica ningún tipo de letra para un determinado carácter, o si se especifica una fuente que no existe. en su sistema, entonces no puede mostrar ese carácter. En su lugar, mostrará un cuadro vacío ". - Este es el comportamiento exacto que estoy observando

Parece que necesito construir un conjunto de fuentes para poder mostrar esos caracteres arbitrarios (comenzando con los archivos Xdefaults o Xresources).

¿Cómo puedo identificar qué familias de fuentes necesitaré incluir en el conjunto de fuentes para mostrar los operadores de Matemáticas (la mayoría de los ejemplos en línea se refieren a idiomas como el latín, el chino, etc.)? No pude encontrar ningún ejemplo de archivos .Xdefault o .Xresource.

¿Estoy en el camino correcto? ¿Hay una manera más fácil/más obvia de hacer esto?

+0

Está en el tema aquí. Ligeramente. No te preocupes por moverlo. – Will

Respuesta

1

Creo que hay un error conocido con emacs MacOS y personajes que muestran más allá de la BMP. Ver por ejemplo mi informe de error (sin respuesta) al Emacs bugs.

Después de informar este error, recibí un correo electrónico que sugería el uso del “Mac port” version of emacs. Esto aparentemente muestra caracteres que no son BMP.

Por supuesto, sería bueno si el error se solucionó en la línea principal de desarrollo de emacs. También sería bueno si el error fuera oficialmente reconocido ...

2

La función set-fontset-font se puede usar para especificar qué fuente usar para cualquier rango de caracteres; por ejemplo,

(set-fontset-font t '(#x1d4ee . #x1d4ee) (font-spec :family "FreeSerif")) 
+0

¡Gracias! Esto es útil. Esto es muy específico para un personaje. ¿Hay alguna manera más general de que pueda hacer esto? Ahora me doy cuenta de que me están perdiendo muchas más. – GeneralBecos

+0

Probé todas las fuentes del sistema, pero emacs falla al mostrar este carácter (y más). – GeneralBecos

3

Tengo el mismo problema, y ​​tampoco tengo una solución general. Este es mi enfoque para arreglar un solo carácter (o potencialmente un rango), , suponiendo que tienes el carácter en un búfer y no se muestra.

Algunos experimentos demostraron que Menlo es una fuente útil de caracteres, como FreeSerif.

  1. Coloque el cursor antes del carácter no mostrado.

  2. m-x describe-char. Esto le da mucha información sobre el personaje, incluida una línea del "punto de código en el juego de caracteres: 0x2055".

    1. En algún lugar en sus .emacs o archivos relacionados, use esta función. Puede potencialmente arreglar toda una gama de personajes al engancharlos de la familia FreeSerif u otra cosa, pero no tengo buenas opciones para nada excepto unos pocos caracteres.
 
    (defun bbextra-fix-fontset-font (from &optional to family) 
     "Make characters FROM to TO come from FAMILY. 
    Default value of TO is FROM, and of FAMILY is FreeSerif (which 
    seems to have some of the characters)" 
    (set-fontset-font t (cons from (or to from)) 
         (font-spec :family (or family "FreeSerif")))) 

    ;; Here are the characters I have fixed. 
    (bbextra-fix-fontset-font #x2042) 
    (bbextra-fix-fontset-font #x2023) 
    (bbextra-fix-fontset-font #x203D) 
    (bbextra-fix-fontset-font #x2055) 


    ;These come from Menlo 
    (bbextra-fix-fontset-font #x2620 #x2620 "Menlo") ; skull and crossbones 
    (bbextra-fix-fontset-font #x266C#x266C "Menlo") ; 16th notes 
    (bbextra-fix-fontset-font #x2695 #x2695 "Menlo") ; asclepion 
    (bbextra-fix-fontset-font #x2624 #x2624 "Menlo") ; caduceus 
+0

¡Gracias, realmente funciona! Con un poco de trabajo podemos descubrir todos los rangos problemáticos y armar un archivo '.el' para cubrirlos todos. –

Cuestiones relacionadas