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?


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.