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

1

Estou tentando modificar o tamanho padrão de uma fonte usando

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

Isso deve redimensionar todas as fontes com o nome STIXGeneral por 0,95, porque para mim essa fonte é um pouco mais alta que a fonte padrão. O valor resultante de face-font-rescale-alist é:

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

No entanto, com o emacs 24.3 (também a versão git e também o pré-lançamento 24.3.92.1), o resultado da adição do acima em .emacs é que a fonte está errada em cada quadro, além do quadro inicial. Rodando 24.3 com -Q --eval="<expression above>" dá:

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

Com meu .emacs regular na versão 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))

O rosto no quadro inicial é o que eu espero. O local em que face-font-rescale-alist influencia a fonte está em font_score em font.c ( link ). O mesmo problema ocorre na versão git se eu substituir (add-to-list ...) por (setq face-font-rescale-alist nil) .

O que estou fazendo de errado aqui?

    
por Kirill 11.07.2014 / 17:34

1 resposta

0

Em startup.el , o código a seguir detecta alterações em face-font-rescale-alist e redefine a fonte padrão, ignorando também as alterações provenientes de custom-set-face (que é como eu estava definindo a fonte com a interface de personalização):

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

Portanto, é necessário definir face-font-rescale-alist após o código que tenta apagar as personalizações. Isso pode ser feito anexando o aviso a frame-notice-user-settings , que é executado após o código de redefinição de face:

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

Isso se aplica a face-font-rescale-alist , como eu esperaria que funcionasse lendo a documentação.

    
por 20.07.2014 / 02:38

Tags