저는 Emacs 23을 사용하고 있습니다.선형 모드기본 설정을 사용하면 아주 잘 작동합니다.
하지만 글꼴 크기를 늘리면 숫자가 표시되지 않습니다. 줄번호 글꼴 크기가 커질수록 줄번호를 표시하는 프레임은 늘어나지 않는 것 같습니다.
이 문제를 해결하는 방법을 아는 사람이 있나요?
답변1
다음에 의존하지 않도록 초기화 구성에서 linum 크기를 정의할 수 있습니다 default-face
.
(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)
답변2
이것은 내 설정에서 잘 작동하는 해결 방법이지만 내 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)
답변3
다음 코드로 이 문제를 해결할 수 있을 것 같습니다.
(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-19 01:47 CEST)它似乎可以工作,至少在 24.5 中是这样。