可可Emacs 24.5字体问题(Inconsolata-dz)


10

我正在尝试将[Inconsolata-dz] [1]设置为Emacs的默认字体。常规Inconsolata可以正常工作,但是dz版本无法正常工作。我使用的大多数功能都会抛出此错误(在线上有所有有关如何设置Emacs字体的说明):

set-face-attribute: Invalid font name: "-*-Inconsolata-dz-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1"

我终于在我的电脑上完成了这项工作init.el

(setq initial-frame-alist '((font . "Inconsolata-dz-13")))
(setq default-frame-alist '((font . "Inconsolata-dz-13")))

我在中也有这个init.el,它是由生成的customize-faces,但是它似乎将字体更改为Helvetica(除非被上面的代码覆盖):

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(custom-safe-themes
   (quote
    ("e16a771a13a202ee6e276d06098bc77f008b73bbac4d526f160faa2d76c1dd0e"
     "d677ef584c6dfc0697901a44b885cc18e206f05114c8a3b7fde674fce6180879"
     "8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4"
     default))))

(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(default ((t (:inherit nil :stipple nil :inverse-video nil
             :box nil :strike-through nil :overline nil
             :underline nil :slant normal
             :weight normal :height 140 :width normal
             :foundry "nil" :family "Inconsolata-dz")))))

现在,上面第一个代码的问题是,执行Ctrl+N创建新窗口的,将引发相同的无效字体名称错误。

我在Mac上以相同的方式安装了Inconsolata和Inconsolata-dz。只是在OS X上安装字体的常规默认方法。

有谁知道我在做什么错以及如何正确使用Inconsolata-dz?


1
若要查看可用的字体,请在*Scratch*缓冲区中评估以下内容: (insert (prin1-to-string (x-list-fonts "*"))) 如果不存在,则说明该字体不可用。
法律名单

@lawlist我在那看到它,但是它是一个很长的名字。当我将其粘贴到set-face-attribute中时((set-face-attribute 'default nil :family "-*-Inconsolata-g-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1")),得到“无效的面部铸造”。有什么想法吗?这个名字到底应该是什么?Inconsolata可以工作,但是Inconsolata-g和Inconsolata-dz不能工作,即使它们都可用并以相同的方式安装。我怀疑这是破折号吗?
darksky 2015年

Answers:


9

Emacs不允许使用带有连字符的字体。我将字体重命名为不包含连字符的东西。

您可以使用ttx进行此操作。例如,假设您Inconsolata-dz for Powerline.otf在当前工作目录中具有一种命名的字体:

# Convert the font to ttx format (an xml-like font format)
ttx "Inconsolata-dz for Powerline.otf"

# Replace all instances of "Inconsolata-dz" with "InconsolataDZ" in the ttx file
sed -i 's/Inconsolata-dz/InconsolataDZ/g' "Inconsolata-dz for Powerline.ttx"

# Convert the resulting ttx file back to an otf file. 
# (Will create a file called "Inconsolata-dz for Powerline#1.otf".)
ttx "Inconsolata-dz for Powerline.ttx"

然后,您可以将生成的otf文件重命名为所需的任何文件,并将其移动到fonts目录。


您是否有示例或一些文档的链接来支持您的信念,即“ Emacs不允许使用带有连字符的字体 ”?
法律列表

5
我的特定问题是我看到错误“无效的字体名称:Powerline的Inconsolata-g”。我在Emacs源代码中搜索“无效字体名称:”,并找到了此功能。我相信,如果仔细看一下font_parse_name函数,您会发现通过在连字符之间拆分XFT字符串来进行分析,并假设整个字体名称都包含在两个连字符之间。
sid-kap

1
非常感谢@ sid-kap,最后是一个答案!我从来没有想过这个。
darksky '16

3
您可以重命名字体,而无需使用ttx或转换字体文件。我访问了字体文件Inconsolata-g.otfInconsolata-g.sfdInconsolata-g.ttfEmacs替换了每次出现的“ Inconsolata-g”和“ Inconsolata-d”,并将它们替换为“ Inconsolata_g”和“ Inconsolata_d”。此文本也与“ ^ @”混合出现,如“ I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @-^ @ g我已替换为“ I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ _ ^ @ g ^的^ @ Inconsolata-g” @Inconsolata_g”。然后,我将文件名重命名为,Inconsolata_g.*然后将它们拖放到中Font Book.app,这样就可以了。
armando.sano

@ sid-kap谢谢,您的指示非常清楚。好答案。
Harsh Vardhan '18 -4-2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.