TL; DR: Який простий спосіб надійно сказати: використовувати консолі як шрифт за замовчуванням, FreeMono для символів, що не підтримуються консолями, та Symbola для символів, які не підтримуються обома?
Оскільки мій основний шрифт програмування не охоплює всіх необхідних мені математичних символів, я спочатку налаштував резервний шрифт, як показано нижче:
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
На жаль, це також змінило шрифт для деяких символів, які підтримує мій основний шрифт, тому я змінив його на
(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
Якщо моє розуміння правильне, це повинно забезпечити, щоб символи, з якими консолі не впораються, обробляються FreeMono, якщо тільки у FreeMono їх немає, і в цьому випадку вони повинні відображатися за допомогою Symbola. Це також моє розуміння t
робить те саме, що "fontset-default"
вище.
На жаль, все ж були випадки, коли потрібний шрифт не був обраний; Я виявив, що змінюється на
(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Symbola") nil 'append)
працювали краще, але не завжди: змінюючи розмір шрифту за допомогою
(set-face-attribute 'default nil :height some-size)
з-за створення нових наборів шрифтів.
Моє поточне рішення - це зробити
(set-fontset-font fontset 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font fontset 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font fontset 'unicode (font-spec :name "Symbola") nil 'append)
на кожному наборі шрифтів ( fontset-list
), після кожної зміни розміру шрифту.
Який правильний спосіб встановити резервний шрифт?
Примітка . Для тестування тут є кілька математичних символів: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
Посилання : Посібник Emacs щодо наборів шрифтів та модифікації наборів шрифтів
fontset
неправильний шлях. Emacs насправді не перевіряє наявність кожного символу, чи знає шрифт, як його відобразити чи ні. Це було б занадто обчислювально. Тож немає механізму "резервного" резервування. Ви повинні встановити шрифт за замовчуванням, а потім змінити набір шрифтів за замовчуванням вручну в певних діапазонах, щоб відображатись за допомогою різних шрифтів. Ця процедура є ручною або, можливо, пакет unicode
може допомогти.