Подтвердить что ты не робот

Как отобразить общее количество строк в модели Emacs

В модели Emacs по умолчанию отображается только текущий номер строки и ее процент по отношению к общим номерам строк. Как мне показать, как это сделать?

4b9b3361

Ответ 1

Это может быть немного сложно, потому что, если вы обновляете счетчик строк все время и имеете большой буфер, это может сделать Emacs несколько невосприимчивым, поскольку он подсчитывает строки снова и снова. Я написал это, чтобы сделать ленивый подход к подсчету: это происходит только тогда, когда файл сначала читается или после его сохранения или восстановления. Если буфер изменен, он не лежит относительно количества строк, он просто не отображается, пока вы не сохраните его снова.

(defvar my-mode-line-buffer-line-count nil)
(make-variable-buffer-local 'my-mode-line-buffer-line-count)

(setq-default mode-line-format
              '("  " mode-line-modified
                (list 'line-number-mode "  ")
                (:eval (when line-number-mode
                         (let ((str "L%l"))
                           (when (and (not (buffer-modified-p)) my-mode-line-buffer-line-count)
                             (setq str (concat str "/" my-mode-line-buffer-line-count)))
                           str)))
                "  %p"
                (list 'column-number-mode "  C%c")
                "  " mode-line-buffer-identification
                "  " mode-line-modes))

(defun my-mode-line-count-lines ()
  (setq my-mode-line-buffer-line-count (int-to-string (count-lines (point-min) (point-max)))))

(add-hook 'find-file-hook 'my-mode-line-count-lines)
(add-hook 'after-save-hook 'my-mode-line-count-lines)
(add-hook 'after-revert-hook 'my-mode-line-count-lines)
(add-hook 'dired-after-readin-hook 'my-mode-line-count-lines)

Возможно, вы захотите отрегулировать mode-line-format в соответствии с вашим вкусом, но это то, что я лично предпочитаю.