Problemas de tamanho de fonte com o Emacs no modo linum [duplicado]

14

Estou usando o Emacs 23. linum-mode funciona bem se estiver usando configurações padrão.

Mas se eu aumentar o tamanho da fonte, os números não poderão ser exibidos. Parece que o quadro para exibir os números de linha não é aumentado à medida que o tamanho da fonte do número de linha aumenta.

Alguém sabe como isso pode ser corrigido?

    
por davidshen84 23.01.2012 / 15:59

3 respostas

11

Você pode apenas definir o tamanho do linum na configuração do seu init para que não dependa de default-face :

(set-face-attribute 'linum nil :height 100)

Se você não estiver usando linum-mode como um padrão global (por exemplo, um gancho de modo principal), avalie o comando set-face-attribute ao carregar ou senão você receberá um erro invalid face: linum :

(eval-after-load "linum"
  '(set-face-attribute 'linum nil :height 100))

Se você usar o modo relativo, também vale a pena ajustar o rosto para este modo.

(set-face-attribute 'linum-relative-current-face nil :height 100)
    
por 27.07.2014 / 00:55
2

Aqui está uma solução que funciona bem o suficiente na minha configuração, mas meu conhecimento do emacs é bastante limitado, e eu não tenho certeza de como ele se comportará na configuração de outra pessoa, mas aqui está:

Como a coluna de número de linha não altera a largura enquanto o tamanho da fonte é alterado, a abordagem que tomei é evitar que o tamanho da fonte do número de linha se torne qualquer mais largo que sua coluna.

Eu não encontrei uma maneira (isto é, uma função) para determinar a altura necessária da coluna de números de linhas para uma escala específica, então construí uma lista baseada em dados empíricos de um emacs bastante padrão. A lista é dimensionada em relação a text-scale-mode-step = 1.04 ... Além disso, text-scale-mode-amount precisa ser iniciado, porque parece ser acionado apenas por funções de escala de texto, mas é necessário como 0 para um início cálculo de tempo pela função de solução alternativa.

EDIT: O Zoom-Out agora é dimensionado corretamente, mas ainda estou procurando uma maneira melhor de avaliar / controlar a altura da fonte da coluna de números de linha, então se alguém tiver alguma ideia sobre isso, Eu gostaria de ouvir sobre isso.

;; This script is set for a 'text-scale-mode-step' of '1.04'
(setq text-scale-mode-step 1.04)
;;
;; List: 'Sub-Zoom Font Heights per text-scale-mode-step'  
;;   eg.  For a default font-height of 120 just remove the leading '160 150 140 130' 
(defvar sub-zoom-ht (list 160 150 140 130 120 120 110 100 100  90  80  80  80  80  70  70  60  60  50  50  50  40  40  40  30  20  20  20  20  20  20  10  10  10  10  10  10  10  10  10  10   5   5   5   5   5   2   2   2   2   2   2   2   2   1   1   1   1   1   1   1   1   1   1   1   1))
(defvar sub-zoom-len (safe-length sub-zoom-ht))
(defvar def-zoom-ht (car sub-zoom-ht))
(set-face-attribute 'default nil :height def-zoom-ht)

(defun text-scale-adjust-zAp ()
   (interactive)
   (text-scale-adjust 0)
   (set-face-attribute 'linum nil :height def-zoom-ht)
 )
(global-set-key [C-kp-multiply] 'text-scale-adjust-zAp)

(defun text-scale-decrease-zAp ()
   (interactive)
   (if (not (boundp 'text-scale-mode-amount)) ;; first-time init  
              (setq  text-scale-mode-amount 0))
   (setq text-scale (round (/ (* 1 text-scale-mode-amount) 
                                   text-scale-mode-step)))
   (if (> text-scale (- 1 sub-zoom-len))
       (progn
         (text-scale-decrease text-scale-mode-step)
         (if (<= 0 text-scale-mode-amount)
             (set-face-attribute 'linum nil :height def-zoom-ht)
           (if (> 0 text-scale-mode-amount)
               (set-face-attribute 'linum nil :height 
                                     (elt sub-zoom-ht (- 0 text-scale)))))))
)
(global-set-key [C-kp-subtract] 'text-scale-decrease-zAp)

(defun text-scale-increase-zAp ()
   (interactive)
   (if (not (boundp 'text-scale-mode-amount)) ;; first-time init  
              (setq  text-scale-mode-amount 0))
   (setq text-scale (round (/ (* 1 text-scale-mode-amount) 
                                   text-scale-mode-step)))
   (if (< text-scale 85)
       (progn
         (text-scale-increase text-scale-mode-step)
         (if (< (- 0 text-scale-mode-step) text-scale-mode-amount)
             (set-face-attribute 'linum nil :height def-zoom-ht)
           (if (> 0 text-scale-mode-amount)
               (set-face-attribute 'linum nil :height 
                                     (elt sub-zoom-ht (- 0 text-scale)))))))
)
(global-set-key [C-kp-add] 'text-scale-increase-zAp)


;; Zoom font via Numeric Keypad
(global-set-key [C-kp-multiply] 'text-scale-adjust-zAp)
(global-set-key [C-kp-subtract] 'text-scale-decrease-zAp)
(global-set-key [C-kp-add]      'text-scale-increase-zAp)

;; Zoomf font via Control Mouse Wheel
(global-set-key (kbd "<C-mouse-4>") 'text-scale-increase-zAp)
(global-set-key (kbd "<C-mouse-5>") 'text-scale-decrease-zAp)
    
por 26.01.2012 / 19:28
2

Acho que posso corrigir esse problema com o seguinte código:

(require 'linum)
(defun linum-update-window-scale-fix (win)
  "fix linum for scaled text"
  (set-window-margins win
          (ceiling (* (if (boundp 'text-scale-mode-step)
                  (expt text-scale-mode-step
                    text-scale-mode-amount) 1)
              (if (car (window-margins))
                  (car (window-margins)) 1)
              ))))
(advice-add #'linum-update-window :after #'linum-update-window-scale-fix)

(EDIT: alguns pequenos bugs corrigidos. 2015-10-19 01:47 CEST) Parece funcionar, pelo menos com 24,5.

    
por 18.10.2015 / 20:55

Tags