
Ich versuche, die Standardgröße einer Schriftart zu ändern mit
(add-to-list 'face-font-rescale-alist (cons "^.*STIXGeneral.*$" 0.95) t)
Dies soll alle Schriftarten mit dem Namen STIXGeneral um 0,95 skalieren, da diese Schriftart für mich etwas größer ist als die Standardschriftart. Der resultierende Wert face-font-rescale-alist
ist:
(("-cdac$" . 1.3) ("^.*STIXGeneral.*$" . 0.95))
Bei Emacs 24.3 (auch der Git-Version und auch der Vorabversion 24.3.92.1) führt das Hinzufügen des Obigen jedoch dazu, .emacs
dass die Schriftart in jedem Frame außer dem ersten Frame falsch ist. Das Ausführen von 24.3 mit -Q --eval="<expression above>"
ergibt:
(message "%s" (face-all-attributes 'default (selected-frame)))
New frame: ((:family . Geneva) (:foundry . apple) (:width . normal) (:height . 120) (:weight . normal) (:slant . normal) (:underline) (:overline) (:strike-through) (:box) (:inverse-video) (:foreground . Black) (:background . White) (:stipple) (:inherit))
Initial frame: ((:family . Menlo) (:foundry . apple) (:width . normal) (:height . 120) (:weight . normal) (:slant . normal) (:underline) (:overline) (:strike-through) (:box) (:inverse-video) (:foreground . Black) (:background . White) (:stipple) (:inherit))
Mit meiner regulären .emacs
Git-Version:
New frame: "((:family . Helvetica) (:foundry . nil) (:width . normal) (:height . 110) (:weight . normal) (:slant . normal) (:underline) (:overline) (:strike-through) (:box) (:inverse-video) (:foreground . #000000) (:background . AliceBlue) (:stipple) (:inherit))"
Initial frame: ((:family . Source Code Pro) (:foundry . nil) (:width . normal) (:height . 110) (:weight . normal) (:slant . normal) (:underline) (:overline) (:strike-through) (:box) (:inverse-video) (:foreground . #000000) (:background . AliceBlue) (:stipple) (:inherit))
Das Gesicht im Anfangsbild ist das, das ich erwarte. Der Ort, an dem face-font-rescale-alist
die Schriftart beeinflusst wird, ist font_score
in font.c
(Verknüpfung). Dasselbe Problem tritt in der Git-Version auf, wenn ich (add-to-list ...)
durch ersetze (setq face-font-rescale-alist nil)
.
Was mache ich hier falsch?
Antwort1
Hm. startup.el
Der folgende Code erkennt Änderungen in face-font-rescale-alist
und setzt die Standardschriftart zurück, während er gleichzeitig Änderungen von ignoriert custom-set-face
(so habe ich die Schriftart mit der Anpassungsschnittstelle eingestellt):
;; startup.el:670
(unless (eq face-font-rescale-alist old-face-font-rescale-alist)
(set-face-attribute 'default nil :font (font-spec)))
Es ist daher notwendig, nach dem Code zu setzen face-font-rescale-alist
, der versucht, Anpassungen zu löschen. Dies kann durch Anhängen von advice an erfolgen frame-notice-user-settings
, das nach dem Code zum Zurücksetzen des Gesichts ausgeführt wird:
;; in .emacs
(defadvice frame-notice-user-settings (before my:rescale-alist)
(message "Set face-font-rescale-alist")
(add-to-list 'face-font-rescale-alist
(cons (font-spec :family "STIXGeneral") 0.95) t))
(ad-activate 'frame-notice-user-settings)
Dies trifft zu face-font-rescale-alist
, da ich aufgrund der Lektüre der Dokumentation erwartet hätte, dass es funktioniert.