Defina todas as fontes com espaçamento = 100 como 'monoespaçadas'

Defina todas as fontes com espaçamento = 100 como 'monoespaçadas'

Muitas das fontes, incluindo aquelas do gerenciador de pacotes (atualmente executando um Arch System) não incluem a família genérica como "serifa","monoespaçado" e "cursiva". Então tenho que indicar a família correta manualmente (veja tambémhttps://eev.ee/blog/2015/05/20/i-stared-into-the-fontconfig-and-the-fontconfig-stared-back-at-me/).

Mas pelo "monoespaçado", há uma solução alternativa: todas elas têm a propriedade de espaçamento de 100. Você pode verificar isso executando fc-list :spacing=100(veja tambémhttps://unix.stackexchange.com/a/363368/473666). Portanto, a ideia é definir automaticamente cada fonte com esse valor de propriedade como "monoespaçado" Fonte.

Por exemplo, nos arquivos de configuração padrão e na documentação, eles definem todas as fontes que não possuem "serifa" e "monoespaçado" como "sem serifa" Por aqui:

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

Então, eu tentei isso:

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

O resultado:TODOfonte no sistema agora é monoespaçada. Isso também acontece mudando <int>100</int>para <const>mono</const>. Eu já li man fonts.confmuitos dos arquivos de configuração padrão listados, fc-conflistmas não consegui fazê-lo funcionar. Tentei várias combinações de propriedades e seus valores, mas o resultado sempre éNENHUMouTODOa fonte é tratada como monoespaçada.

Por enquanto, usei este comando para gerar uma lista de fontes e adicionei todas manualmente: fc-list :spacing=100 | awk -F: '{print $2}' | sort -u. É a primeira vez que pergunto algo no Stack Exchange, espero ter conseguido deixar claro.

Responder1

Remova o argumento qual="all"no teste de espaçamento. Isto é usado para especificar o comportamento ao testar uma lista (ou seja, familyé uma lista de strings). Um teste escalar qual="all"sempre é bem-sucedido. Isso é um bug no fontconfig.

Responder2

Eu precisava mudar meu alvo de correspondência para <match target=font>, para testar o espaçamento; Não acho que o fontconfig conheça o espaçamento no momento da correspondência do padrão.

Ainda não tentei definir a família de fontes, pois não preciso dela, mas uma configuração modificada me permitiu desativar o antialiasing no Terminal GNOME apenas para texto do console:

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

Testado no fontconfig versão 2.13.1.

informação relacionada