Это так раздражает...
Когда любой текст в строке изменяет свою грань так, что текст выделяется жирным шрифтом, высота строки увеличивается (я полагаю) на один пиксель. Лучше всего показать с изображением:
Почему это? Как мне это предотвратить?
По запросу информация о платформе:
- Sid (нестабильный) Debian GNU / Linux на amd64
- Emacs использует libgtk-3.so.0 (gtk 3.14.5) на XFCE 4.12
Я пробовал следующие шрифты в 8pt, 9pt, 10pt и 11pt:
- DejaVu Sans Mono
- DejaVu Sans
- DejaVu Serif
- Droid Sans Mono
- Освобождение Моно
Проблема возникает только с DejaVu Sans Mono и DejaVu Sans, и только в 9pt и 10pt. (Изображение выше показывает DejaVu Sans Mono-9
.)
C-u C-x =
. Вы, вероятно, обнаружите, что либо лицо, влияющее на defun, либо пример, влияющий на лицо, имеют различные атрибуты, которые отвечают за поведение, которое вы видите, например, кроме основного цвета переднего плана. Атрибуты лица могут быть настроены пользователем.:height 90
(9pt).:weight bold
изfont-lock-function-name-face
(и повторно выполняю команду темыcustom-theme-set-faces
), я могу видеть изменение высотыdefun
строки на 1px! Это определенно смелый атрибут, который вызывает это, я думаю.Ответы:
Высота шрифта изменяется в DejaVu при этом размере точки, потому что информация о высоте шрифта между двумя обычным шрифтом и полужирным шрифтом отличается, когда она должна быть одинаковой.
Используемый мной шрифт DejaVu Sans Mono 10 не изменяет высоту шрифта между нормальным и жирным шрифтом. Я установил это в моем .emacs с
(set-frame-font "DejaVu Sans Mono-10")
Так что у вас есть с чем сравнить информацию о шрифте "DejaVu Sans 10" через (font-info на Emacs 25):
РЕДАКТИРОВАТЬ на основе последующей информации:
В приведенной выше информации о шрифте я показываю высоту шрифта 17, а вы сообщаете о высоте 15 (обычный) или 16 (жирный). В emacs 25 после этих 3 0 есть дополнительная информация о шрифте, в частности, спуск шрифта равен 4.
Хотя у меня нет проблем в Emacs 24 или 25 с DejaVu Sans Mono и вариантом Bold, самое простое - использовать шрифт и размер, которые не меняют ширину (как показано в font-info) между normal и bold или что-то другое, чем DejaVu.
Что касается того, что вызывает это, это может быть одна из ваших библиотек (мой gtk - libgtk-x11-2.0.so.0), но я сомневаюсь, что это будет именно эта библиотека. Также сомневаюсь, что это файл или пакет ttf. Скорее всего, это рендеринг freetype (у меня есть libfreetype.so.6). Поскольку DejaVu масштабируется так же, как и другие шрифты, которые работают на вас, ошибка вычисления, возникшая в результате написания DejaVu, объяснит, почему они работают в некоторых размерах, но не в других.
Чтобы проверить, является ли проблема специфичной для Emacs или нет, вы можете вызвать два окна терминала, одно с жирным приглашением, а другое без, и сравнить межстрочный интервал на них. Если он отличается от Emacs, то это связано с рендерингом и / или шрифтом.
Если вы скомпилировали emacs, там может что-то происходить.
источник
DejaVu Sans Mono-9
BTW). Я(font-info "DejaVu Sans Mono-10")
дает мне["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" "DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:width=normal:spacing=100:scalable=true" 13 15 0 0 0]
. Я такжеfonts-dejavu-core
установил, а такжеttf-dejavu-core
. Они оба предоставляютDejaVuSansMono.ttf
(в разных каталогах, но это идентичные файлы, поэтому я не вижу, что это имеет значение). Я также получаюHeight: 98
от лица (при использовании DajaVu Sans Mono-10, который демонстрирует вышеуказанную проблему). Я открыт для любых дополнительных предложений! :)