Resultado inesperado de face-font-rescale-alist en emacs

Resultado inesperado de face-font-rescale-alist en emacs

Estoy intentando modificar el tamaño predeterminado de una fuente usando

(add-to-list 'face-font-rescale-alist (cons "^.*STIXGeneral.*$" 0.95) t)

Se supone que esto cambia la escala de todas las fuentes con el nombre STIXGeneral en 0,95, porque para mí esa fuente es un poco más alta que la fuente estándar. El valor resultante de face-font-rescale-alistes:

(("-cdac$" . 1.3) ("^.*STIXGeneral.*$" . 0.95))

Sin embargo, con emacs 24.3 (también la versión git y también la versión preliminar 24.3.92.1), el resultado de agregar lo anterior .emacses que la fuente es incorrecta en todos los cuadros excepto en el cuadro inicial. Ejecutando 24.3 con -Q --eval="<expression above>"da:

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

Con mi .emacsversión habitual en git:

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

La cara en el cuadro inicial es la que esperaba. El lugar donde face-font-rescale-alistinfluye la fuente es font_scoreen font.c(enlace). El mismo problema ocurre en la versión git si lo reemplazo (add-to-list ...)con (setq face-font-rescale-alist nil).

¿Qué estoy haciendo mal aquí?

Respuesta1

Mmm. En startup.elel siguiente código, se detectan cambios face-font-rescale-alisty se restablece la fuente predeterminada, al mismo tiempo que se ignoran los cambios provenientes de custom-set-face(que es como estaba configurando la fuente con la interfaz de personalización):

;; startup.el:670
(unless (eq face-font-rescale-alist old-face-font-rescale-alist)
 (set-face-attribute 'default nil :font (font-spec)))

Por lo tanto, es necesario establecer face-font-rescale-alistdespués del código que intenta borrar las personalizaciones. Esto se puede hacer adjuntando consejos a frame-notice-user-settings, que se ejecuta después del código de restablecimiento facial:

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

Esto se aplica face-font-rescale-alistcomo esperaba que funcionara leyendo la documentación.

información relacionada