web-dev-qa-db-ja.com

linumモードのEmacsでのフォントサイズの問題

私はEmacs23を使用しています。linum-modeデフォルト設定で使用するとうまく機能します。

しかし、フォントサイズを大きくすると数字が表示されなくなります。行番号のフォントサイズが大きくなっても、行番号を表示するフレームが大きくならないようです。

誰もがこれを修正する方法を知っていますか?

16
David S.

default-faceに依存しないように、init構成でリナムサイズを定義するだけです。

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

グローバルデフォルトとしてlinum-modeを使用していない場合(つまり、メジャーモードフックなど)、ロード時にset-face-attributeコマンドを評価してください。そうしないと、invalid face: linumエラーが発生します。

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

相対モードを使用する場合は、このモードの面を調整することも価値があります。

(set-face-attribute 'linum-relative-current-face nil :height 100)
12
user78810

これは私のセットアップで十分に機能する回避策ですが、私のemacsの知識はかなり限られており、他の誰かのセットアップでどのように動作するかわかりませんが、ここにあります:

行番号列しない幅を変更しながらフォントサイズ行うを変更するため、私が取ったアプローチは、行番号のフォントサイズがこれより広くならないようにすることですその列。

特定のスケールの行番号列の必要な高さを決定する方法(つまり、関数)が見つからないため、かなり標準的なemacsからの経験的データに基づいてリストを作成しました。リストはtext-scale-mode-step = 1.04に関連してスケーリングされます...また、text-scale-mode-amountはテキストスケール関数によってのみトリガーされるように見えるため、初期化する必要がありますが、回避策関数による最初の計算では0として必要です。

編集:ズームアウトが適切に拡大縮小されるようになりましたが、行番号列のフォントの高さを評価/制御するためのより良い方法を探しているので、誰かがそれについて何か考えがあれば、それについて聞いていただければ幸いです。

;; 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)
2
Peter.O

私は次のコードでその問題を修正できると思います:

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

(編集:いくつかの小さなバグが修正されました。2015-10-1901:47 CEST)少なくとも24.5では機能するようです。

2
Pablo Machón