2015-10-12 13 views
0

Я хочу использовать SourceCodePro как мой шрифт по умолчанию, но он не охватывает персидские символы, которые находятся в области, например, #x0600 до #x06FF. Я попытался Somthing как этотКак я могу использовать разные шрифты ttf для некоторых символов utf-8 в emacs?

(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-standard и fontset-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")) 

этого не получилось.

Update: благодаря рекомендации от @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 Спасибо! вторая работала нормально. Поэтому мы всегда должны называть крюк, когда создаем новые рамки! это странно, и это не сработало для латинского скрипта, потому что я использовал '(add-to-list 'default-frame-alist' (font." Source Code Pro "))' вне функции, чтобы изменить значение по умолчанию для латинских символов –

+0

@legoscia можете ли вы ответить на свой вопрос? а также у вас есть идея, почему необходимо использовать 'after-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-sure-utf-8-characters-in-emacs/33116025 # comment53975001_33074370), чтобы использовать «после-make-frame-функции», работает очень хорошо. –