From 66d0e6999cf3bd1bb45d5e121f2d1168e0c8a846 Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Wed, 19 May 2021 15:28:58 -0500 Subject: Rewrite acdw-modeline/word-count to show region counts --- init.el | 27 ++++++++++++++------------- lisp/acdw-modeline.el | 20 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/init.el b/init.el index 06caede..b8584b6 100644 --- a/init.el +++ b/init.el @@ -972,19 +972,20 @@ if ripgrep is installed, otherwise `consult-grep'." (setup (:straight simple-modeline) (setup (:straight minions)) - (:option simple-modeline-segments - '((acdw-modeline/modified - acdw-modeline/buffer-name - acdw-modeline/vc-branch - simple-modeline-segment-position - simple-modeline-segment-word-count) - (simple-modeline-segment-misc-info - acdw-modeline/winum - acdw-modeline/text-scale - simple-modeline-segment-process - acdw-modeline/god-mode-indicator - acdw-modeline/minions - simple-modeline-segment-major-mode))) + (:option + ;; (prepend acdw-modeline/word-count-modes) '(org-mode . #'acdw-org/word-count) + simple-modeline-segments '((acdw-modeline/modified + acdw-modeline/buffer-name + acdw-modeline/vc-branch + simple-modeline-segment-position) + (simple-modeline-segment-misc-info + acdw-modeline/word-count + acdw-modeline/winum + acdw-modeline/text-scale + simple-modeline-segment-process + acdw-modeline/god-mode-indicator + acdw-modeline/minions + simple-modeline-segment-major-mode))) (require 'acdw-modeline) (simple-modeline-mode +1)) diff --git a/lisp/acdw-modeline.el b/lisp/acdw-modeline.el index 81b808d..4f78816 100644 --- a/lisp/acdw-modeline.el +++ b/lisp/acdw-modeline.el @@ -93,4 +93,24 @@ indicator in the mode-line." (> winum--window-count 1)) (format winum-format (winum-get-number-string)))) +(defcustom acdw-modeline/word-count-modes + (mapcar (lambda (m) (cons m nil)) simple-modeline-word-count-modes) + "Alist of modes to functions that `acdw-modeline/word-count' should dispatch. +If the cdr of the cons cell is nil, use the default function (`count-words'). +Otherwise, cdr should be a function that takes two points (see `count-words')." + :type '(alist :key-type (symbol :tag "Major-Mode") + :value-type function) + :group 'simple-modeline) + +(defun acdw-modeline/word-count () + "Display a buffer word count, depending on the major mode. +Uses `acdw-modeline/word-count-modes' to determine which function to use." + (when-let ((modefun + (assoc major-mode acdw-modeline/word-count-modes #'equal))) + (let ((fn (or (cdr modefun) + #'count-words)) + (min (if (region-active-p) (region-beginning) (point-min))) + (max (if (region-active-p) (region-end) (point-max)))) + (format "%dW" (funcall fn min max))))) + (provide 'acdw-modeline) -- cgit 1.4.1-21-gabe81