Cocoa Emacs 24.5 Schriftartenprobleme (Inconsolata-dz)

10

Ich versuche, [Inconsolata-dz] [1] als meine Standardschriftart auf Emacs festzulegen. Regular Inconsolata funktioniert gut, aber die dz-Version funktioniert nicht richtig. Die meisten Funktionen, die ich verwende, lösen diesen Fehler immer wieder aus (befolgen Sie alle Online-Anweisungen zum Festlegen der Emacs-Schriftart):

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

Ich habe es endlich zum Laufen gebracht, indem ich dies in meinem init.el:

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

Ich habe auch dies in init.el, das von generiert wurde customize-faces, aber es scheint die Schriftart in Helvetica zu ändern (sofern nicht durch den obigen Code überschrieben):

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

Das Problem mit dem ersten Code oben ist nun, dass Ctrl+Nbeim Erstellen eines neuen Fensters derselbe Fehler "Ungültiger Schriftname" ausgegeben wird.

Ich habe Inconsolata und Inconsolata-dz auf die gleiche Weise auf meinem Mac installiert. Nur die normale Standardmethode zum Installieren von Schriftarten unter OS X.

Weiß jemand, was ich falsch mache und wie ich Inconsolata-dz richtig verwenden kann?

dunkler Himmel
quelle
1
Um zu sehen, welche Schriftarten verfügbar sind, bewerten Sie Folgendes in einem *Scratch*Puffer: (insert (prin1-to-string (x-list-fonts "*"))) Wenn es nicht vorhanden ist, ist es nicht verfügbar.
Lawlist
@lawlist Ich sehe es dort, aber es ist ein sehr langer Name. Wenn ich es in das Set-Face-Attribut ((set-face-attribute 'default nil :family "-*-Inconsolata-g-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1"))einfüge, erhalte ich 'Ungültige Gesichtsgießerei'. Irgendwelche Ideen warum? Was genau soll der Name sein? Inconsolata funktioniert, aber Inconsolata-g und Inconsolata-dz funktionieren nicht, obwohl sie alle auf dieselbe Weise verfügbar und installiert sind. Ich vermute, es ist der Strich im Namen?
Darksky

Antworten:

9

Emacs erlaubt keine Schriftarten mit Bindestrichen. Ich würde die Schriftart in etwas umbenennen, das keine Bindestriche enthält.

Sie können dies mit ttx tun . Angenommen, Sie haben eine Schriftart mit dem Namen Inconsolata-dz for Powerline.otfin Ihrem aktuellen Arbeitsverzeichnis:

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

Anschließend können Sie die erstellte otfDatei nach Belieben umbenennen und in Ihr Schriftartenverzeichnis verschieben.

Sid-Kap
quelle
Haben Sie ein Beispiel oder einen Link zu einer Dokumentation, um Ihre Überzeugung zu untermauern, dass " Emacs keine Schriftarten mit Bindestrichen zulässt "?
Lawlist
5
Mein spezielles Problem war, dass der Fehler "Ungültiger Schriftname: Inconsolata-g für Powerline" angezeigt wurde. Ich habe den Emacs-Quellcode nach "Ungültiger Schriftname:" durchsucht und diese Funktion gefunden . Ich glaube, wenn Sie sich die font_parse_nameFunktion genau ansehen , werden Sie feststellen, dass die XFT-Zeichenfolge analysiert wird, indem Sie sie an den Bindestrichen aufteilen, vorausgesetzt, der gesamte Schriftname ist zwischen zwei Bindestrichen enthalten.
Sid-Kap
1
Vielen Dank @ sid-kap, endlich eine Antwort! Ich habe das nie herausgefunden.
Darksky
3
Sie können die Schriftart umbenennen, ohne die Schriftdateien zu verwenden ttxoder zu konvertieren. Ich besuchte die Schriftart - Dateien Inconsolata-g.otf, Inconsolata-g.sfdund Inconsolata-g.ttfmit Emacsund ersetzt jedes Vorkommen von „Inconsolata-g“ und „Inconsolata-d“ mit „Inconsolata_g“ und „Inconsolata_d“. Dieser Text erscheint auch mit "^ @" vermischt, wie in "I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ - ^ @ g ^ @ Inconsolata-g ", die ich als" I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ _ ^ @ g ^ ersetzt habe @Inconsolata_g ". Ich habe dann die Dateinamen umbenannt Inconsolata_g.*und per Drag & Drop in sie eingefügt Font Book.app, was funktioniert hat.
armando.sano
@ sid-kap Danke, deine Anweisungen waren sehr klar. Gute Antwort.
Harte Vardhan