Cocoa Emacs 24.5 Font Issues (Inconsolata-dz)

10

Próbuję ustawić [Inconsolata-dz] [1] jako domyślną czcionkę na Emacsa. Zwykłe Inconsolata działa dobrze, ale wersja dz nie działa poprawnie. Większość funkcji, z których korzystam, wciąż generuje ten błąd (postępowałem zgodnie z instrukcjami online, jak ustawić czcionkę Emacsa):

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

W końcu udało mi się to zrobić, wykonując to w moim init.el:

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

Mam również to w init.el, które zostało wygenerowane przez customize-faces, ale wydaje się, że zmienia czcionkę na Helvetica (chyba że zostanie zastąpione przez powyższy kod):

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

Problem z pierwszym powyższym kodem polega na tym Ctrl+N, że utworzenie nowego okna spowoduje wygenerowanie tego samego błędu nieprawidłowej nazwy czcionki.

Zainstalowałem Inconsolata i Inconsolata-dz w ten sam sposób na moim komputerze Mac. Tylko zwykły, domyślny sposób instalowania czcionek w systemie OS X.

Czy ktoś wie, co robię źle i jak mogę właściwie używać Inconsolata-dz?

ciemne niebo
źródło
1
Aby zobaczyć, jakie czcionki są dostępne, oceń następujące elementy w *Scratch*buforze: (insert (prin1-to-string (x-list-fonts "*"))) Jeśli go nie ma, oznacza to, że nie jest dostępny.
prawnik
@lawlist Widzę to tam, ale to bardzo długa nazwa. Po wklejeniu go do atrybutu set-face ((set-face-attribute 'default nil :family "-*-Inconsolata-g-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1"))otrzymuję komunikat „Niepoprawna odlewnia twarzy”. Jakieś pomysły dlaczego? Jaka dokładnie powinna być ta nazwa? Inconsolata działa, ale Inconsolata-g i Inconsolata-dz nie działają, mimo że wszystkie są dostępne i zainstalowane w ten sam sposób. Podejrzewam, że to myślnik w nazwie?
darksky

Odpowiedzi:

9

Emacs nie zezwala na czcionki z łącznikami. Zmieniłbym nazwę czcionki na coś, co nie zawiera łączników.

Możesz to zrobić za pomocą ttx . Na przykład zakładając, że masz czcionkę o nazwie Inconsolata-dz for Powerline.otfw bieżącym katalogu roboczym:

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

Następnie możesz zmienić nazwę utworzonego otfpliku na dowolne i przenieść go do katalogu czcionek.

sid-kap
źródło
Czy masz przykład lub link do jakiejś dokumentacji potwierdzającej Twoje przekonanie, że „ Emacs nie zezwala na czcionki z łącznikami.
prawnik
5
Mój konkretny problem polegał na tym, że widziałem błąd „Nieprawidłowa nazwa czcionki: Inconsolata-g dla Powerline”. Przeszukałem kod źródłowy Emacsa pod kątem „Nieprawidłowa nazwa czcionki:” i znalazłem tę funkcję . Uważam, że jeśli przyjrzysz się uważnie tej font_parse_namefunkcji, zobaczysz, że analizuje ciąg XFT, dzieląc go na łączniki, zakładając, że cała nazwa czcionki jest zawarta między dwoma łącznikami.
sid-kap
1
Dzięki bardzo @ sid-kap, w końcu odpowiedź! Nigdy tego nie rozgryzłem.
darksky
3
Możesz zmienić nazwę czcionki bez używania ttxani konwertowania plików czcionek. Odwiedziłem pliki czcionek Inconsolata-g.otf, Inconsolata-g.sfdoraz Inconsolata-g.ttfz Emacsi zastąpić wszystkie wystąpienia „Inconsolata-G” i „Inconsolata-d” z „Inconsolata_g” i „Inconsolata_d”. Ten tekst wydaje się także przeplatany z „^ @” jak w „I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ - ^ @ g ^ @ Inconsolata-g ”, które zastąpiłem jako„ I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ _ ^ @ g ^ @Inconsolata_g ”. Następnie Inconsolata_g.*zmieniłem nazwy plików na „ przeciągnij i upuść” Font Book.app, co zadziałało.
armando.sano
@ sid-kap Dziękuję, twoje instrukcje były bardzo jasne. Świetna odpowiedź.
Harsh Vardhan