私はEmacs23を使用しています。linum-modeデフォルト設定で使用するとうまく機能します。
しかし、フォントサイズを大きくすると数字が表示されなくなります。行番号のフォントサイズが大きくなっても、行番号を表示するフレームが大きくならないようです。
誰もがこれを修正する方法を知っていますか?
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)
これは私のセットアップで十分に機能する回避策ですが、私の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)
私は次のコードでその問題を修正できると思います:
(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では機能するようです。