Cocoa Emacs 24.5 Masalah Font (Inconsolata-dz)

10

Saya mencoba untuk menetapkan [Inconsolata-dz] [1] sebagai font default saya ke Emacs. Inconsolata biasa berfungsi dengan baik, tetapi versi dz tidak berfungsi dengan benar. Sebagian besar fungsi yang saya gunakan terus melempar kesalahan ini (ikuti semua instruksi online tentang cara mengatur font Emacs):

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

Saya akhirnya berhasil dengan melakukan ini di init.el:

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

Saya juga memiliki ini init.el, yang dihasilkan oleh customize-faces, tetapi tampaknya mengubah font menjadi Helvetica (kecuali ditimpa oleh kode di atas):

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

Sekarang masalah dengan kode pertama di atas adalah bahwa melakukan Ctrl+N, untuk membuat jendela baru akan membuang kesalahan nama font yang tidak valid yang sama.

Saya menginstal Inconsolata dan Inconsolata-dz dengan cara yang sama pada Mac saya. Hanya cara biasa dan default untuk menginstal font pada OS X.

Adakah yang tahu apa yang saya lakukan salah dan bagaimana saya bisa menggunakan Inconsolata-dz dengan benar?

Langit yang gelap
sumber
1
Untuk melihat font apa yang tersedia, evaluasi hal berikut dalam *Scratch*buffer: (insert (prin1-to-string (x-list-fonts "*"))) Jika tidak ada, maka itu tidak tersedia.
lawlist
@lawlist Saya melihatnya di sana tetapi itu adalah nama yang sangat panjang. Ketika saya menempelkannya ke set-face-atribut ((set-face-attribute 'default nil :family "-*-Inconsolata-g-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1")),, saya mendapatkan 'Pengecoran wajah tidak valid'. Ada ide mengapa? Apa sebenarnya nama itu seharusnya? Inconsolata berfungsi tetapi Inconsolata-g dan Inconsolata-dz tidak berfungsi, meskipun semuanya tersedia dan diinstal dengan cara yang sama. Saya menduga itu adalah tanda hubung dalam nama?
darksky

Jawaban:

9

Emacs tidak mengizinkan font yang memiliki tanda hubung di dalamnya. Saya akan mengganti nama font menjadi sesuatu yang tidak mengandung tanda hubung.

Anda dapat melakukan ini menggunakan ttx . Misalnya, dengan asumsi Anda memiliki font yang disebutkan Inconsolata-dz for Powerline.otfdalam direktori kerja Anda saat ini:

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

Anda kemudian dapat mengubah nama otffile yang dihasilkan menjadi apa pun yang Anda inginkan dan memindahkannya ke direktori font Anda.

sid-kap
sumber
Apakah Anda memiliki contoh atau tautan ke beberapa dokumentasi untuk mendukung keyakinan Anda bahwa " Emacs tidak mengizinkan font yang memiliki tanda hubung di dalamnya. "?
lawlist
5
Masalah khusus saya adalah bahwa saya melihat kesalahan "Nama font tidak valid: Inconsolata-g untuk Powerline". Saya mencari kode sumber Emacs untuk "Nama font yang tidak valid:" dan menemukan fungsi ini . Saya percaya bahwa jika Anda melihat dengan cermat font_parse_namefungsi, Anda akan menemukan bahwa mem-parsing string XFT dengan membaginya di tanda hubung, dengan asumsi bahwa seluruh nama font terkandung di antara dua tanda hubung.
sid-kap
1
Terima kasih banyak @ sid-kap, akhirnya jawabannya! Saya tidak pernah menemukan yang ini.
darksky
3
Anda dapat mengganti nama font tanpa menggunakan ttxatau mengonversi file font. Saya mengunjungi file font Inconsolata-g.otf, Inconsolata-g.sfddan Inconsolata-g.ttfdengan Emacsdan diganti setiap terjadinya "Inconsolata-g" dan "Inconsolata-d" dengan "Inconsolata_g" dan "Inconsolata_d". Teks ini juga muncul bercampur dengan "^ @" seperti pada "I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ - ^ @ g ^ @ Inconsolata-g "yang telah saya ganti sebagai" I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ _ ^ @ g ^ @Inconsolata_g ". Saya kemudian mengubah nama file menjadi Inconsolata_g.*dan drag-and-drop'd ke dalam Font Book.app, yang berhasil.
armando.sano
@ sid-kap Terima kasih, instruksi Anda sangat jelas. Jawaban yang bagus
Harsh Vardhan