Установить все шрифты с интервалом = 100 как «моноширинные»

Установить все шрифты с интервалом = 100 как «моноширинные»

Многие шрифты, включая шрифты из менеджера пакетов (в настоящее время работающего под управлением Arch System), не включают в себя общее семейство, как "засечки", "моноширинный" и "курсив". Поэтому мне приходится вручную указывать правильную семью (см. такжеhttps://eev.ee/blog/2015/05/20/i-stared-into-the-fontconfig-and-the-fontconfig-stared-back-at-me/).

Но для "моноширинный" шрифты, есть обходной путь: они все имеют свойство интервала 100. Вы можете проверить это, запустив fc-list :spacing=100(см. такжеhttps://unix.stackexchange.com/a/363368/473666). Идея состоит в том, чтобы автоматически установить каждый шрифт со значением этого свойства как "моноширинный" шрифт.

Например, в файлах конфигурации по умолчанию и документации они устанавливают каждый шрифт, у которого нет "засечки" и "моноширинный" как "без засечек" Сюда:

  <match target="pattern">
    <test qual="all" name="family" compare="not_eq">
            <string>sans-serif</string>
    </test>
    <test qual="all" name="family" compare="not_eq">
            <string>serif</string>
    </test>
    <test qual="all" name="family" compare="not_eq">
            <string>monospace</string>
    </test>
    <edit name="family" mode="append_last">
            <string>sans-serif</string>
    </edit>
  </match>

Итак, я попробовал это:

  <match target="pattern">
    <test qual="all" name="spacing" compare="eq"> 
      <int>100</int>
    </test>
    <test qual="all" name="family"  compare="not_eq"> 
      <string>monospace</string>
    </test>
    <edit name="family" mode="append_last"> 
      <string>monospace</string>
    </edit>
  </match>

Результат:КАЖДЫЙшрифт в системе теперь моноширинный. Это также происходит при изменении <int>100</int>для <const>mono</const>. Я уже прочитал man fonts.confи многие из файлов конфигурации по умолчанию, перечисленных в , fc-conflistно я не смог заставить это работать. Я пробовал несколько комбинаций свойств и их значений, но результат всегда либоНИКТОилиКАЖДЫЙШрифт рассматривается как моноширинный.

На данный момент я использовал эту команду для создания списка источников и добавил их все вручную: fc-list :spacing=100 | awk -F: '{print $2}' | sort -u. Это мой первый раз, когда я спрашиваю что-то в Stack Exchange, надеюсь, мне удалось изложить это понятно.

решение1

Удалите аргумент qual="all"в тесте для интервала. Он используется для указания поведения при тестировании списка (т.е. familyсписка строк). Скалярный тест с qual="all"всегда завершается успешно. Это ошибка в fontconfig.

решение2

Мне нужно было изменить цель сопоставления на , <match target=font>чтобы проверить интервалы; я не думаю, что fontconfig знает интервалы во время сопоставления с шаблоном.

Я пока не пробовал настраивать семейство шрифтов, так как оно мне не нужно, но измененная конфигурация позволила мне отключить сглаживание в терминале GNOME только для текста консоли:

<match target="font">
  <test name="spacing" compare="eq">
    <int>100</int>
  </test>
  <test name="prgname" compare="contains">
    <string>gnome-terminal</string>
  </test>
  <edit name="antialias" mode="assign">
    <bool>false</bool>
  </edit>
</match>

Протестировано на версии fontconfig 2.13.1.

Связанный контент