Проблема рендеринга шрифта в urxvt - слишком много места между символами

27

Начиная с сегодняшнего дня, у меня возникают проблемы с рендерингом шрифтов с помощью rxvt-unicode. В частности, со многими шрифтами я получаю изобилие дополнительного пространства между символами. В других шрифтах rxvt отказывается менять размеры.

Вот пример проблемы пробелов между urxvt и xterm.

Ресурсы шрифтов:

URxvt*font:     xft:Terminus:medium:size=10
xterm*faceName: xft:Terminus:medium:size=10

И визуализации

  • urxvt плохие шрифты
  • Xterm хорошие шрифты

Я перепробовал все варианты намеков и сглаживания. Изменение размера или размера пикселя приводит к изменению размера шрифта в urxvt, но это также увеличивает дополнительный интервал.

У кого-нибудь есть идеи, которые я могу попробовать исправить?

Casey
источник
1
Я не думаю, что xtermна самом деле использует тот же шрифт. JИ 0явно отличаются. Вы можете подтвердить это, используя несуществующий шрифт в файле ресурсов ( xterm*faceName: xft:Nosuchfont:medium:size=10). Если это все еще выглядит так же, это, очевидно, не Terminus.
Златовласка
@goldilocks Похоже, вы правы. Urxvt выбирает неправильный шрифт и делает его ужасно.
Кейси
1
Я заметил это раньше gvimпри использовании моей конфигурации в системе, где нужный шрифт не был установлен. xftили что-то возвращается на немонокальный шрифт, и вот как они появляются.
Златовласка
2
@goldilocks Оказывается, неверное правило fontconfig просочилось во время обновления и блокировало все растровые шрифты от доступности. Я обстрелял его, и я вернулся к нормальной жизни.
Кейси

Ответы:

15

Urxvt имеет возможность для основного кернинга: letterSpace. Смотрите man urxvt:

-letsp number
Compile frills: количество, чтобы настроить вычисляемую ширину символа, чтобы контролировать общее расстояние между буквами. Отрицательные значения уменьшат межбуквенный интервал, положительные значения увеличат расстояние между буквами. Полезно для работы с нечетными метриками шрифта; ресурс letterSpace.

Таким образом, вы можете настроить интервал, добавив строку к вашему ~/.Xresources, например так:

URxvt.letterSpace: -1

Примечание: по первому скриншоту это трудно определить, но похоже, что Urxvt возвращается к шрифту по умолчанию, так как не может найти или загрузить Terminus, отсюда и большой интервал. Terminus - это растровый шрифт (который, вероятно, по умолчанию отключен), поэтому вы должны использовать xfontselдля копирования правильную строку шрифта в ваше определение.

См. Страницу Arch Wiki на X Logical Font Description для подробного описания того, как работает эта система.

jasonwryan
источник
3
У меня была эта проблема, и я обнаружил, что urxvt -letsp -2это необходимо для меня. Использование -1было лучше, но я изначально не осознавал этого, так как этого было недостаточно.
Адам Кац
Также вы можете использовать fc-match <font-name>вместо, xfontselесли он не установлен ( font-name - это выражение, указанное в URxvt*fontимени шрифта вашей строки). Если это обнаруживается со значением, соответствующим выражению, шрифт будет загружен правильно. например, если fc-match "Noto Mono"дает, DejaVuSans.ttf: "DejaVu Sans" "Book"то это можно считать неправильным выражением шрифта.
Avinash R
6

Оказывается, в моей системе было включено правило, которое блокировало растровые шрифты, такие как Terminus.

Это правило (в моей системе) /etc/fonts/conf.d/70-no-bitmap-fontsсодержало и содержало:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Reject bitmap fonts -->
 <selectfont>
  <rejectfont>
   <pattern>
     <patelt name="scalable"><bool>false</bool></patelt>
   </pattern>
  </rejectfont>
 </selectfont>
</fontconfig>

Я удалил это из conf.dкаталога, и мои шрифты снова отображаются правильно urxvt.

Casey
источник
3

Пожалуйста, обратите внимание, что есть сообщение об ошибке относительно расстояния между буквами.

У меня были похожие проблемы. Следуя рекомендациям обсуждения ошибки, я установил Xft.rgba: noneи Xft.hintstyle: hintfullв ~/.Xdefaults(вместо Xft.rgba: rgbи Xft.hintstyle: hintslight). Это исправило это для меня - я использовал Ubuntu Mono в качестве шрифта.

Балу
источник
3

Мое решение было простым:

URxvt*font:     xft:mono:medium:size=10
xterm*faceName: xft:mono:medium:size=10

Теперь это работает отлично.

b3h3m0th
источник
0

Это может произойти из-за фактического файла шрифта (в моем случае Monospace) с большей вероятностью, чем из чего-либо в urxvt. Если шрифт (по ошибке) объявляет некоторые символы слишком широкими, urxvt также вынужден расширять сетку.

В моем случае, «OK» шрифт, который я нашел, был Bitstream Vera Sans Mono.

экса
источник