ここから本文です
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