2015-10-12 37 views
0

我想使用SourceCodePro作为我的默认字体,但它并不涵盖范围内的波斯语字符,例如#x0600直到#x06FF。 我试过这样的东西如何在emacs中为某些utf-8字符使用不同的ttf字体?

(set-fontset-font t 
      'ascii 
      "Source Code Pro-12") 
(set-fontset-font t 
      (cons (decode-char 'ucs #x0600) 
      (decode-char 'ucs #x6FF)) 
      "Roya-13") 

但它没有奏效。 我也尝试过使用fontset-standardfontset-default这样

(set-face-font 'default "fontset-default") 
(set-fontset-font "fontset-default" 
     'emacs (font-spec :name "Source Code Pro")) 
(set-fontset-font "fontset-default" 
      'iso-8859-1 (font-spec :name "Source Code Pro")) 
(set-face-attribute 'font-lock-comment-face nil 
      :family "Inconsolata" :height 140) 
(set-fontset-font "fontset-default" 
      '(#x0600 . #x06FF) (font-spec :name "Roya:pixelsize=16:foundry=farsiweb:weight=normal:slant=normal:width=normal:scalable=true")) 
(set-fontset-font "fontset-default" 
      '(#x0750 . #x075F) (font-spec :name "Roya:pixelsize=16:foundry=farsiweb:weight=normal:slant=normal:width=normal:scalable=true")) 
(set-fontset-font "fontset-default" 
      '(#x08A0 . #x08FF) (font-spec :name "Roya:pixelsize=16:foundry=farsiweb:weight=normal:slant=normal:width=normal:scalable=true")) 
(set-fontset-font "fontset-default" 
      '(#xFB50 . #xFDFF) (font-spec :name "Roya:pixelsize=16:foundry=farsiweb:weight=normal:slant=normal:width=normal:scalable=true")) 
(set-fontset-font "fontset-default" 
      '(#xFD70 . #xFEFF) (font-spec :name "Roya:pixelsize=16:foundry=farsiweb:weight=normal:slant=normal:width=normal:scalable=true")) 
(set-fontset-font "fontset-default" 
      '(#x1EE00 . #x1EEFF) (font-spec :name "Roya:pixelsize=16:foundry=farsiweb:weight=normal:slant=normal:width=normal:scalable=true")) 

这也不能工作。

更新:使用`后使帧函数使之成为工作 感谢指导意见@legoscia

(defun zzgraph/fix-fontset (&optional frame) 
(set-fontset-font "fontset-default" 'arabic "Roya")) 
(add-hook 'after-make-frame-functions 'zzgraph/fix-fontset) 
+0

[这里](http://superuser.com/a/778348/4542)和[这里](https://github.com/legoscia/dotemacs/blob /master/dotemacs.org#fix-the-display-of-emoji)是为我工作的片段。 – legoscia

+0

@legoscia谢谢!第二个工作正常。所以我们在制作新帧时总是必须挂钩!这很奇怪,并且它对latin脚本不起作用,因为我使用'(添加到列表'默认帧alist'(字体。“源代码Pro”))'在函数之外来改变默认面对于拉丁字符 –

+0

@legoscia您能否让您的评论成为答案?你也有什么想法,为什么使用'后make-frame-functions'是必要的?它与在守护进程模式下运行Emacs有什么关系? –

回答

0

在Emacs中24,你不需要设置框的字体到"fontset-default"。只需修改fontset-default就足以改变默认的回退行为。在您发布的代码段中,字体:name包含大量不属于名称的额外行李。尝试消除这一点,并使用“Roya”。如果您有其他字体称为“Roya”,那么您可能需要包含的不仅仅是字体名称,以区分哪种字体,但您应该使用单独的属性来执行此操作,而不是将它们作为:name属性的一部分进行捆绑。

因此,在总结:

(set-face-font 'default "SourceCodePro") 
(set-fontset-font "fontset-default" 
        '(#x0600 . #x06FF) (font-spec :name "Roya")) 
(set-fontset-font "fontset-default" 
        '(#x0750 . #x075F) (font-spec :name "Roya")) 
(set-fontset-font "fontset-default" 
        '(#x08A0 . #x08FF) (font-spec :name "Roya")) 
(set-fontset-font "fontset-default" 
        '(#xFB50 . #xFEFF) (font-spec :name "Roya")) 
(set-fontset-font "fontset-default" 
        '(#x1EE00 . #x1EEFF) (font-spec :name "Roya")) 
+0

我试过了,它只是不起作用,我认为它可能与我运行守护进程模式有关,但@legoscia [建议](http://stackoverflow.com/questions/33074370/how-can-i -use-a-different-ttf-fonts-for-certain-utf-8-characters-in-emacs/33116025#comment53975001_33074370)使用'after-make-frame-functions' hook,效果很好。 –

相关问题