Problèmes de police de Cocoa Emacs 24.5 (Inconsolata-dz)


10

J'essaie de définir [Inconsolata-dz] [1] comme police par défaut sur Emacs. Inconsolata ordinaire fonctionne bien, mais la version dz ne fonctionne pas correctement. La plupart des fonctions que j'utilise continuent de générer cette erreur (ont suivi toutes les instructions en ligne sur la façon de définir la police Emacs):

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

Je l'ai finalement fait fonctionner en faisant ceci dans mon init.el:

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

J'ai également ceci dans init.el, qui a été généré par customize-faces, mais il semble changer la police en Helvetica (sauf si le code ci-dessus le remplace):

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

Maintenant, le problème avec le premier code ci-dessus est que faire une Ctrl+N, pour créer une nouvelle fenêtre générera la même erreur de nom de police invalide.

J'ai installé Inconsolata et Inconsolata-dz de la même manière sur mon Mac. Juste la façon habituelle et par défaut d'installer des polices sur OS X.

Est-ce que quelqu'un sait ce que je fais mal et comment utiliser correctement Inconsolata-dz?


1
Pour voir quelles polices sont disponibles, évaluez les éléments suivants dans un *Scratch*tampon: (insert (prin1-to-string (x-list-fonts "*"))) S'il n'y en a pas, alors il n'est pas disponible.
Lawlist

@lawlist Je le vois mais c'est un nom très long. Lorsque je l'ai collé dans set-face-attribute, ((set-face-attribute 'default nil :family "-*-Inconsolata-g-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1"))j'obtiens «Fonderie de visage non valide». Des idées pourquoi? Quel est exactement le nom supposé être? Inconsolata fonctionne mais Inconsolata-g et Inconsolata-dz ne fonctionnent pas, même s'ils sont tous disponibles et installés de la même manière. Je soupçonne que c'est le tiret dans le nom?
darksky

Réponses:


9

Emacs n'autorise pas les polices contenant des tirets. Je renommerais la police en quelque chose qui ne contient pas de tirets.

Vous pouvez le faire en utilisant ttx . Par exemple, en supposant que vous avez une police nommée Inconsolata-dz for Powerline.otfdans votre répertoire de travail actuel:

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

Vous pouvez ensuite renommer le otffichier produit comme vous le souhaitez et le déplacer vers votre répertoire de polices.


Avez-vous un exemple ou un lien vers une documentation pour étayer votre croyance selon laquelle " Emacs n'autorise pas les polices contenant des tirets ".
Lawlist

5
Mon problème spécifique était que je voyais l'erreur "Nom de police non valide: Inconsolata-g pour Powerline". J'ai recherché le code source d'Emacs pour "Nom de police invalide:" et j'ai trouvé cette fonction . Je crois que si vous regardez attentivement la font_parse_namefonction, vous constaterez qu'elle analyse la chaîne XFT en la divisant au niveau des tirets, en supposant que le nom de police entier est contenu entre deux tirets.
sid-kap

1
Merci beaucoup @ sid-kap, enfin une réponse! Je n'ai jamais compris celui-ci.
darksky

3
Vous pouvez renommer la police sans utiliser ttxni convertir les fichiers de police. J'ai visité les fichiers de police Inconsolata-g.otf, Inconsolata-g.sfdet Inconsolata-g.ttfavec Emacset remplacé toutes les occurrences de « Inconsolata-g » et « Inconsolata-d » avec « Inconsolata_g » et « Inconsolata_d ». Ce texte apparaît également mélangé avec "^ @" comme dans "I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ - ^ @ g ^ @ Inconsolata-g "que j'ai remplacé par" I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ _ ^ @ g ^ @Inconsolata_g ". J'ai ensuite renommé les noms de fichiers en Inconsolata_g.*les glissant-déposant dans Font Book.app, ce qui a fonctionné.
armando.sano

@ sid-kap Merci, vos instructions étaient très claires. Très bonne réponse.
Harsh Vardhan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.