2012-06-06 67 views
6

我试图显示特殊的Unicode字符,特别是emacs中的数学运算符。具体来说:Emacs:用于在OSX中显示Unicode字符的字体设置

   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 

我正在使用GNU Emacs 24最近晚上的二进制文件。上面的文本在我的浏览器和TextEdit中显示得很好,但是当在emacs中查看时,特殊字符变为空白。

我从旧的Emacs 22 manual阅读:“字体集不一定为所有字符代码的字体如果字体集指定某个字符没有字体,或者如果指定的字体不存在。在你的系统上,那么它不能显示那个字符,它会显示一个空的框。“ - 这是我正在观察的确切行为

看来我可能需要构建一个fontset才能显示这样的任意字符(从Xdefaults或Xresources文件开始)。

如何识别哪些字体系列需要包含在字体集中以显示数学运算符(大多数在线示例是指拉丁文,中文等语言)?我甚至找不到任何.Xdefault或.Xresource文件的例子。

我在正确的轨道上吗?有没有更容易/更明显的方式来做到这一点?

+0

它在这里的话题。略。不要担心移动它。 – Will

回答

1

我相信这是和MacOS Emacs和显示字符超出BMP一个已知的bug。例如,请参阅我的(未答复的)错误报告Emacs bugs

报告此错误后,我有一封电子邮件建议使用“Mac port” version of emacs。这显然显示非BMP字符。

当然,如果bug在emacs开发的主线中得到修复,那将会很不错。如果错误得到官方承认,它也会很好。

2

功能set-fontset-font可以用来指定哪个字体用于任何范围的字符;例如,

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

谢谢!这很有帮助。这对一个角色非常具体。有没有更通用的方法可以做到这一点?我现在意识到我错过了更多。 – GeneralBecos

+0

我尝试了系统中的所有字体,但emacs无法显示此字符(以及更多)。 – GeneralBecos

3

我有同样的问题,我也没有一个通用的解决方案。这是我的方法来修复单个字符(或潜在的范围), 假设你有一个缓冲区中的字符,它不显示。

一些实验表明,Menlo是一个有用的字符来源,如FreeSerif。

  1. 将光标放在未显示的字符之前。

  2. m-x describe-char。这为您提供了大量有关该字符的信息,包括“charset中的代码点:0x2055”形式的一行。

    1. 在您的.emacs或相关文件的某处,使用此函数。它可以通过从FreeSerif系列或其他东西中攫取它们来修复整个角色,但除了少数角色之外,我没有很好的选择。
 
    (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

谢谢,这真的有用!通过一点点的工作,我们可以找出所有有问题的范围,并将“.el”文件放在一起以涵盖所有范围。 –