xlsfontsfournit des informations sur les polices lorsque le système X Windows est en cours d'utilisation (généralement sous Linux ou des systèmes similaires; presque jamais sous MSWindows). Ses options -let -maffichent plusieurs métriques de police, y compris la largeur minimale et la largeur maximale. En utilisant des commandes shell, on peut comparer ces largeurs pour détecter les polices à largeur fixe. Par exemple, xlsfonts -lm '*fang*'donne
DIR MIN MAX EXIST DFLT PROP ASC DESC NAME
--> * 33 *119 some 8481 25 10 1 -isas-fangsong ti-medium-r-normal--0-0-72-72-c-0-gb2312.1980-0
min(l,r,w,a,d) = (0,12,12,11,2)
max(l,r,w,a,d) = (0,12,12,11,2)
--> * 33 *119 some 8481 21 14 2 -isas-fangsong ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0
min(l,r,w,a,d) = ( 0, 0,16, 0,-13)
max(l,r,w,a,d) = (12,16,16,14, 2)
Pour ces deux polices, le min w est égal à la valeur max w - 12, 12 pour l'une, 16, 16 pour l'autre - indiquant que les deux sont des polices à largeur fixe. (Remarque, xlsfontsle code source comprend des vérifications similaires.)
Dans un article récent sur usenet, voici un programme Python checkFixed.pyqui automatise la comparaison. Il lit les lignes de données de style xlsfonts stdin, compare les valeurs w et affiche les résultats stdoutlorsque min w est égal à w max. (Bien sûr , des programmes similaires pourraient être écrits en awk, perletc.)
#!/usr/bin/env python
# jiw - 2016
# This program reads `xlsfonts -lm`-style lines from stdin, and tests
# for cases where the w elements of min and max tuples are the same
from sys import stdout
while True:
try:
r = raw_input()
if r[0] == '-': # Font-lines start with -->
m1 = int((raw_input().split(','))[6])
m2 = int((raw_input().split(','))[6])
if m1==m2:
print r
stdout.flush()
except:
break
Par exemple, xlsfonts -ml | ./checkFixed.py | head -3sur mon système imprimé
--> 0 255 some 0 29 14 5 -bitstream-courier 10 pitch-bold-i-normal--0-0-0-0-m-0-adobe-standard
--> 0 255 some 0 29 15 5 -bitstream-courier 10 pitch-bold-i-normal--0-0-0-0-m-0-ascii-0
--> * 0 *255 some 0 29 15 5 -bitstream-courier 10 pitch-bold-i-normal--0-0-0-0-m-0-iso10646-1
Dans un autre exemple, xlsfonts -ml '*fixed*' | ./checkFixed.py | head -3imprimé
--> * 33 *116 some 8481 25 11 1 -jis-fixed-medium-r-normal--0-0-75-75-c-0-jisx0208.1983-0
--> * 33 *116 some 8481 21 14 2 -jis-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0
--> * 33 *116 some 8481 21 14 2 -jis-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0