Problemas de fonte do Cocoa Emacs 24.5 (Inconsolata-dz)

10

Estou tentando definir [Inconsolata-dz] [1] como minha fonte padrão para o Emacs. O Inconsolata regular funciona bem, mas a versão dz não está funcionando corretamente. A maioria das funções que eu uso continua lançando esse erro (segui todas as instruções on-line sobre como definir a fonte do Emacs):

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

Finalmente consegui fazer isso fazendo isso no meu init.el:

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

Eu também tenho isso init.el, que foi gerado por customize-faces, mas parece alterar a fonte para Helvetica (a menos que seja substituído pelo código acima):

(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")))))

Agora, o problema com o primeiro código acima é que Ctrl+N, ao criar a nova janela, será gerado o mesmo erro de nome de fonte inválido.

Instalei o Inconsolata e o Inconsolata-dz da mesma maneira no meu Mac. Apenas a maneira regular e padrão de instalar fontes no OS X.

Alguém sabe o que estou fazendo de errado e como posso usar o Inconsolata-dz corretamente?

céu escuro
fonte
11
Para ver quais fontes estão disponíveis, avalie o seguinte em um *Scratch*buffer: (insert (prin1-to-string (x-list-fonts "*"))) Se não estiver lá, não estará disponível.
lawlist
@lawlist Eu vejo isso lá, mas é um nome muito longo. Quando colei no atributo set-face-attribute, ((set-face-attribute 'default nil :family "-*-Inconsolata-g-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1"))recebo 'Fundição de rosto inválida'. Alguma idéia do porquê? Qual exatamente é o nome que deveria ser? O Inconsolata funciona, mas o Inconsolata-g e o Inconsolata-dz não funcionam, mesmo estando todos disponíveis e instalados da mesma maneira. Eu suspeito que é o traço no nome?
darksky

Respostas:

9

O Emacs não permite fontes com hífens. Renomearia a fonte para algo que não contenha hífens.

Você pode fazer isso usando ttx . Por exemplo, supondo que você tenha uma fonte nomeada Inconsolata-dz for Powerline.otfem seu diretório de trabalho atual:

# 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"

Você pode renomear o otfarquivo produzido para o que quiser e movê-lo para o diretório de fontes.

sid-kap
fonte
Você tem um exemplo ou um link para alguma documentação para apoiar sua crença de que "o Emacs não permite fontes com hífens "?
Lawlist
5
Meu problema específico era que eu estava vendo o erro "Nome de fonte inválido: Inconsolata-g for Powerline". Procurei no código fonte do Emacs "Nome de fonte inválido:" e encontrei esta função . Acredito que, se você observar atentamente a font_parse_namefunção, verá que analisa a cadeia XFT dividindo-a nos hífens, assumindo que o nome completo da fonte esteja contido entre dois hífens.
sid-kap
11
Muito obrigado @ sid-kap, finalmente uma resposta! Eu nunca descobri isso.
darksky
3
Você pode renomear a fonte sem usar ttxnem converter os arquivos de fonte. Eu visitei os arquivos de fontes Inconsolata-g.otf, Inconsolata-g.sfde Inconsolata-g.ttfcom Emacse substituído a cada ocorrência de "Inconsolata-g" e "Inconsolata-d" com "Inconsolata_g" e "Inconsolata_d". Este texto também aparece misturado com "^ @", como em "I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ - ^ @ g ^ @ Inconsolata-g ", que substitui como" I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ _ ^ @ g ^ @Inconsolata_g ". Inconsolata_g.*Renomeei os nomes de arquivos como e arrastei-os para dentro Font Book.app, o que funcionou.
Armando.sano
@ sid-kap Obrigado, suas instruções foram muito claras. Ótima resposta.
Harsh Vardhan