Problemi con i font di Cocoa Emacs 24.5 (Inconsolata-dz)


10

Sto cercando di impostare [Inconsolata-dz] [1] come carattere predefinito su Emacs. Inconsolata regolare funziona bene, ma la versione dz non funziona correttamente. La maggior parte delle funzioni che utilizzo continuano a generare questo errore (seguite tutte le istruzioni online su come impostare il carattere Emacs):

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

Finalmente sono riuscito a farlo facendo questo nel mio init.el:

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

Ho anche questo in init.el, che è stato generato da customize-faces, ma sembra cambiare il carattere in Helvetica (a meno che non venga sovrascritto dal codice sopra):

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

Ora il problema con il primo codice sopra è che facendo un Ctrl+N, per creare una nuova finestra genererà lo stesso errore del nome del carattere non valido.

Ho installato Inconsolata e Inconsolata-dz allo stesso modo sul mio Mac. Solo il normale modo predefinito di installare i caratteri su OS X.

Qualcuno sa cosa sto facendo di sbagliato e come posso usare Inconsolata-dz correttamente?


1
Per vedere quali caratteri sono disponibili, valuta quanto segue in un *Scratch*buffer: (insert (prin1-to-string (x-list-fonts "*"))) Se non è presente, non è disponibile.
elenco delle leggi

@lawlist Lo vedo lì ma è un nome molto lungo. Quando l'ho incollato nell'attributo set-face ((set-face-attribute 'default nil :family "-*-Inconsolata-g-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1")), ottengo "Fonderia di volti non validi". Qualche idea sul perché? Come deve essere esattamente il nome? Inconsolata funziona ma Inconsolata-g e Inconsolata-dz non funzionano, anche se sono tutti disponibili e installati allo stesso modo. Ho il sospetto che sia il trattino nel nome?
darksky,

Risposte:


9

Emacs non consente i caratteri che contengono trattini. Rinominerei il carattere con qualcosa che non contenga trattini.

Puoi farlo usando ttx . Ad esempio, supponendo che tu abbia un font chiamato Inconsolata-dz for Powerline.otfnella tua directory di lavoro corrente:

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

È quindi possibile rinominare il otffile prodotto come desiderato e spostarlo nella directory dei caratteri.


Hai un esempio o un link ad alcuni documenti a supporto della tua convinzione che " Emacs non consente i caratteri che contengono trattini ".
elenco delle leggi del

5
Il mio problema specifico era che vedevo l'errore "Nome carattere non valido: Inconsolata-g per Powerline". Ho cercato nel codice sorgente di Emacs "Nome carattere non valido:" e ho trovato questa funzione . Credo che se osservi attentamente la font_parse_namefunzione, scoprirai che analizza la stringa XFT suddividendola nei trattini, supponendo che l'intero nome del font sia contenuto tra due trattini.
Sid-Kap

1
Grazie mille @ sid-kap, finalmente una risposta! Non l'ho mai capito.
darksky,

3
È possibile rinominare il carattere senza utilizzare ttxné convertire i file dei caratteri. Ho visitato i file dei font Inconsolata-g.otf, Inconsolata-g.sfde Inconsolata-g.ttfcon Emacse sostituito ogni occorrenza di "Inconsolata-g" e "Inconsolata-D" con "Inconsolata_g" e "Inconsolata_d". Questo testo appare anche mescolato con "^ @" come in "I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ - ^ @ g ^ @ Inconsolata-g "che ho sostituito come" I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ _ ^ @ g ^ @Inconsolata_g". Ho quindi rinominato i nomi dei file come Inconsolata_g.*e trascinarli in Font Book.app, che ha funzionato.
armando.sano,

@ sid-kap Grazie, le tue istruzioni erano molto chiare. Bella risposta.
Harsh Vardhan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.