ここから本文です
Emacsのモードラインに現在行、総行、文字位置、選択範囲の文字数などを表示
以下の通り(160714に修正)。
(setq mode-line-position
'(:eval (format "%d/%d %d/%d %s"
(line-number-at-pos)
(count-lines (point-max) (point-min))
(point)
(point-max)
(if mark-active
(concat "[" (format "%s" (- (region-end) (region-beginning))) "]")
""))))
160714 るびきちさんのEmacs塾で改善の指摘を受けて修正
上記方法をるびきちさんのEmacs塾でるびきちさんに自慢したところ、(:evalで
(count-lines (point-max) (point-min))
すると、バッファが大きいときむちゃくちゃ重たくなるよ、とコード例と一緒にご教示を受けたので修正しました。
;;; 前に行番号、総行数、桁番号を表示
;;; 総行数の計する%記法がないので遅延で計算させる
;; thx rubikitch
(defvar-local mode-line-last-line-number 0)
(defvar-local clnaw-last-tick 0)
(defun calculate-total-line-numbers ()
"Calculate total line numbers."
(unless (eq clnaw-last-tick (buffer-modified-tick))
(setq mode-line-last-line-number (line-number-at-pos (point-max)))
(setq clnaw-last-tick (buffer-modified-tick))
(force-mode-line-update)))
(run-with-idle-timer 2 t 'calculate-total-line-numbers)
;; 現在行、総行、文字位置、選択範囲の文字数など
(setq mode-line-position
'(:eval (format "%d/%d %d/%d %s"
(line-number-at-pos)
mode-line-last-line-number
(point)
(point-max)
(if mark-active
(concat "["
(format "%s" (count-lines (region-end) (region-beginning)))
"-"
(format "%s" (- (region-end) (region-beginning)))
"]")
""))))
ジャンル: Emacs

