Unerwartetes Ergebnis von face-font-rescale-alist in Emacs

Unerwartetes Ergebnis von face-font-rescale-alist in Emacs

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

(("-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, .emacsdass 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 .emacsGit-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-alistdie Schriftart beeinflusst wird, ist font_scorein 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.elDer folgende Code erkennt Änderungen in face-font-rescale-alistund 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.

verwandte Informationen