Ich war wegen meines Font-Problem im Emacs schon dabei,
Emacs-Newsgruppen zu abonnieren und mich dort durchzufragen, da hat
der Blogartikel den Ralf auf den Plan gerufen. Ralf sagt von sich
selbst, dass er fontconfig fast durchgespielt hat und ich würde ihm da
zustimmen: Mit ein paar IRC-koordinierten fc-list
- und
fc-match
-Aufrufen ist er dem Problem auf die Spur gekommen. Auch
hier nochmal danke dafür!
Schritt 1: Bitmaps aktivieren
Unter Ubuntu sind Bitmap-Fonts generell abgeschaltet. Ich hatte die
schon mal aktiviert, aber da das alleine nicht ausreicht, schien es
mir so, als ob es keine Verbesserung bringt. Weit gefehlt!
Am einfachsten lassen sich die Bitmap-Fonts wieder aktivieren, wenn
man den Symlink /etc/fonts/conf.d/70-no-bitmaps.conf
löscht. Auf
einem meiner Rechner hat das dann allerdings zu Fontänderungen im
Firefox geführt: Github sah danach sehr eckig im Schriftbild aus. Das
scheint also ein paar Nebenwirkungen zu haben.
Es geht aber auch minimalinvasiv, wenn man den Symlink bestehen lässt
und stattdessen eine neue Datei
(z.B. /etc/fonts/conf.d/99-enable-efont-fixed-bitmap.conf
) mit folgendem
Inhalt anlegt:
- <?xml version="1.0"?>
- <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
- <fontconfig>
- <!-- Enable efont fixed bitmap font -->
- <selectfont>
- <acceptfont>
- <pattern>
- <patelt name="family">
- <string>BiWidth</string>
- </patelt>
- </pattern>
- </acceptfont>
- </selectfont>
- </fontconfig>
Dieser Konfigurationsschnippsel sorgt dafür, dass statt aller
Bitmap-Fonts nur efont fixed aktiviert wird.
In beiden Fällen gilt: Entweder neu einloggen oder über fc-cache
die
Fontkonfiguration erneuern, sonst ziehen die Änderungen nicht.
Schritt 2: Fontnamen auspendeln
Das Grundproblem im Emacs scheint folgendes zu sein: Fontconfig kann
mit -efont-fixed-medium-r-normal-*-14-140-75-75-c-70-iso10646-1
nichts anfangen. Die Angabe in dieser Form ändert zwar erfolgreich
den Basis-Font in Emacs (z.B. per Kommandozeilenparameter -fn
, und
das sogar ohne die Änderung aus Schritt 1), sobald dieser Font aber
z.B. um weight: bold
ergänzt wird, kann fontconfig daraus den neuen
Font nicht mehr korrekt errechnen. Also darf man efont fixed nicht
an fontconfig vorbei konfigurieren, sondern muss es so machen, dass
fontconfig von Anfang an mit im Boot ist.
Letztendlich haben wir nach einigem Gefrickele und Geprokele
herausgefunden, dass man dafür den Dateinamen benutzen kann: efont
fixed 14 Pixel in BiWidth (das bedeutet vermutlich, dass sowohl
einfache als auch doppelt breite Zeichen enthalten sind) liegt unter
/usr/share/fonts/X11/misc/b14.pcf.gz
– und wenn man Emacs b14
als
Fontnamen gibt, dann klappt das auch!
- (set-face-attribute 'default nil :font "b14")
Wer aufgepasst hat: Im fontconfig-XML oben steht stattdessen family
"Biwidth"
. Dieser Name funktioniert ebenfalls (warum auch immer ;-)
und aus Konsistenzgründen wähle ich den im Emacs auch:
- (set-face-attribute 'default nil :family 'BiWidth)
In beiden Fällen sieht das Ergebnis super aus, genau so will ich das
haben:
Schritt 3: Restarbeiten
Im Markdown-Modus ist mir aufgefallen, dass Emacs trotzdem noch einen
komischen Font verwendet. M-x describe-face
hat mich daraufhin zum
Face fixed-pitch
geführt, das auf :family Monospace
stand, also
explizit einen anderen Font ausgewählt hat. Da ja der Basis-Font
schon eine Festbreitenschriftart ist, setze ich das einfach auf „nimm
den gleichen Font wie das Basis-Face“:
- (set-face-attribute 'fixed-pitch nil :family 'unspecified)
Damit sieht dann auch Markdown wieder schön aus.
Fazit
Wenn man weiß, woran es liegt, kommt man der Lösung näher. Und wenn
man erstmal weiß, wie’s geht, ist es dann ganz einfach:
- Bitmap-Font(s) aktivieren
- Face
'default
auf :family "BiWidth"
setzen
- Face
'fixed-pitch
auf :family 'unspecified
setzen
Meine ~/.emacs
sieht in diesem Moment so aus.
PS
Da ich jetzt gelernt habe, efont fixed in fontconfig als BiWidth
anzusprechen, konnt ich auch endlich(!!!) meinen
Zusammenbastel-Terminal-Emulator vater mit efont fixed beglücken.
Da hatte ich auch schon über ein Jahr lang mehrfach vergeblich dran
rumgetüftelt (und z.B. sowas produziert). Danke Ralf!
PS/2
Im Eclipse kann ich efont fixed ebenfalls über BiWidth
nutzen –
dort kann ich mich aber noch nicht von den schönen Ligaturen aus Fira
Code trennen.