Stellen Sie alle Schriftarten mit einem Abstand von 100 als „Monospace“ ein.

Stellen Sie alle Schriftarten mit einem Abstand von 100 als „Monospace“ ein.

Viele der Schriftarten, einschließlich derer aus dem Paketmanager (derzeit läuft ein Arch-System), enthalten nicht die generische Familie als "Serifen", "monospace" Und "kursiv". Ich muss also die richtige Familie manuell angeben (siehe auchhttps://eev.ee/blog/2015/05/20/ich-starrte-in-die-Schriftkonfiguration-und-die-Schriftkonfiguration-starrte-zurück-auf-mich/).

Aber für "monospace"-Schriftarten gibt es einen Workaround: Sie haben alle die Abstandseigenschaft 100. Sie können dies überprüfen, indem Sie ausführen fc-list :spacing=100(siehe auchhttps://unix.stackexchange.com/a/363368/473666). Die Idee ist also, jede Schriftart mit diesem Eigenschaftswert automatisch als „monospace" Schriftart.

In den Standardkonfigurationsdateien und der Dokumentation setzen sie beispielsweise alle Schriftarten, die nicht über "Serifen" Und "monospace" als "serifenlos" Hier entlang:

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

Also habe ich Folgendes versucht:

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

Das Ergebnis:JEDENDie Schriftart auf dem System ist jetzt Monospace. Dies geschieht auch bei Änderungen <int>100</int>für <const>mono</const>. Ich habe bereits die man fonts.confund viele der in aufgeführten Standardkonfigurationsdateien gelesen fc-conflist, aber ich konnte es nicht zum Laufen bringen. Ich habe mehrere Kombinationen von Eigenschaften und ihren Werten ausprobiert, aber das Ergebnis ist immer entwederKEINERoderJEDENDie Schriftart wird als Monospace-Schriftart behandelt.

Vorerst habe ich diesen Befehl verwendet, um eine Liste von Quellen zu generieren und sie alle manuell hinzuzufügen: fc-list :spacing=100 | awk -F: '{print $2}' | sort -u. Dies ist meine erste Frage in Stack Exchange, ich hoffe, ich konnte es klar ausdrücken.

Antwort1

Entfernen Sie das Argument qual="all"für die Leerzeichen im Test. Dies wird verwendet, um das Verhalten beim Testen einer Liste anzugeben (d. h. es handelt sich familyum eine Liste von Zeichenfolgen). Ein Skalartest ist qual="all"immer erfolgreich. Das ist ein Fehler in Fontconfig.

Antwort2

Ich musste mein Übereinstimmungsziel in ändern, um <match target=font>die Abstände zu testen. Ich glaube nicht, dass Fontconfig die Abstände zum Zeitpunkt der Musterübereinstimmung kennt.

Ich habe noch nicht versucht, die Schriftfamilie festzulegen, da ich sie nicht brauche, aber mit einer geänderten Konfiguration konnte ich das Antialiasing im GNOME-Terminal nur für Konsolentext deaktivieren:

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

Getestet auf Fontconfig-Version 2.13.1.

verwandte Informationen