2015-10-12 46 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,效果很好。 –

相關問題