Coco Emacs 24.5 Проблемы со шрифтами (Inconsolata-dz)

10

Я пытаюсь установить [Inconsolata-dz] [1] в качестве шрифта по умолчанию для Emacs. Обычный Inconsolata работает нормально, но версия dz не работает должным образом. Большинство функций, которые я использую, продолжают выдавать эту ошибку (следуя всем инструкциям онлайн о том, как установить шрифт Emacs):

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

Я, наконец, получил его на работу, сделав это в моем init.el:

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

У меня также есть это в init.el, который был сгенерирован customize-faces, но, кажется, изменить шрифт на Helvetica (если не переопределено кодом выше):

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

Теперь проблема с первым кодом, приведенным выше, заключается в том, что при Ctrl+Nсоздании нового окна выдается та же ошибка Invalid name name.

Я установил Inconsolata и Inconsolata-dz одинаково на моем Mac. Просто обычный, стандартный способ установки шрифтов на OS X.

Кто-нибудь знает, что я делаю неправильно и как я могу правильно использовать Inconsolata-dz?

темное небо
источник
1
Чтобы увидеть, какие шрифты доступны, оцените следующее в *Scratch*буфере: (insert (prin1-to-string (x-list-fonts "*"))) если его нет, значит, он недоступен.
юрист
@lawlist Я вижу это там, но это очень длинное имя. Когда я вставил его в set-face-attribute ((set-face-attribute 'default nil :family "-*-Inconsolata-g-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1")), я получил 'Invalid face Foundry'. Есть идеи почему? Какое именно имя должно быть? Inconsolata работает, но Inconsolata-g и Inconsolata-dz не работают, хотя все они доступны и установлены одинаково. Я подозреваю, что это черта в названии?
Даркский

Ответы:

9

Emacs не позволяет использовать шрифты с дефисами. Я бы переименовал шрифт во что-то, что не содержит дефисов.

Вы можете сделать это, используя ttx . Например, если у вас есть шрифт с именем Inconsolata-dz for Powerline.otfв вашем текущем рабочем каталоге:

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

Затем вы можете переименовать полученный otfфайл в любое, что захотите, и переместить его в каталог шрифтов.

с.и.д.-кап
источник
У вас есть пример или ссылка на документацию, подтверждающую вашу уверенность в том, что « Emacs не допускает шрифты с дефисами в них »?
юрист
5
Моя конкретная проблема заключалась в том, что я видел ошибку «Неверное имя шрифта: Inconsolata-g для Powerline». Я искал исходный код Emacs для «Неверное имя шрифта:» и нашел эту функцию . Я считаю, что если вы внимательно посмотрите на font_parse_nameфункцию, вы обнаружите, что она разбирает строку XFT, разбивая ее на дефисы, предполагая, что полное имя шрифта содержится между двумя дефисами.
Сид-Кап
1
Большое спасибо @ sid-kap, наконец-то ответ! Я никогда этого не понимал.
Даркский
3
Вы можете переименовать шрифт без использования ttxили преобразования файлов шрифтов. Я посетил файлы шрифтов Inconsolata-g.otf, Inconsolata-g.sfdи Inconsolata-g.ttfс Emacsи заменить все вхождения «Inconsolata-г» и «Inconsolata-D» с «Inconsolata_g» и «Inconsolata_d». Этот текст также выглядит как "^ @", как в "I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ - ^ @ g ^ @ Inconsolata-g ", который я заменил на" I ^ @ n ^ @ c ^ @ o ^ @ n ^ @ s ^ @ o ^ @ l ^ @ a ^ @ t ^ @ a ^ @ _ ^ @ g ^ @Inconsolata_g». Затем я переименовал имена файлов в « Inconsolata_g.*drag-and-drop'd» Font Book.app, и это сработало.
armando.sano
@ sid-kap Спасибо, ваши инструкции были очень четкими. Отличный ответ.
Суровый Вардхан