;; -*- mode: Emacs-Lisp; mode: rainbow; -*- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; This program is free software; you can redistribute it and/or ;; ;; modify it under the terms of the GNU General Public License as ;; ;; published by the Free Software Foundation; either version 3, or (at ;; ;; your option) any later version. ;; ;; ;; ;; This program is distributed in the hope that it will be useful, but ;; ;; WITHOUT ANY WARRANTY; without even the implied warranty of ;; ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; ;; General Public License for more details. ;; ;; ;; ;; You should have received a copy of the GNU General Public License ;; ;; along with this program. If not, see . ;; ;; ;; ;; Written by and Copyright (C) Francois Fleuret ;; ;; Contact for comments & bug reports ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; This script automatigally count the number of characters and words ;; between "----" markers. To activate it automatically when switching ;; to text-mode, just add to your emacs.el ;; ;; (add-hook 'text-mode-hook 'tc/add-text-counters-in-modeline) (defface tc/modeline-face '((((background light)) (:foreground "blue4")) (((background dark)) (:foreground "cyan"))) "The face for the alarm-vc modeline message.") ;; Counts the number of words and characters between the previous and ;; the next line of '-' (with at least four '-' in each line) (defun tc/text-counters-string () (interactive) (let ((a (save-excursion (and (re-search-backward "^[#% ]*--.*--*" nil t) (match-end 0)))) (b (save-excursion (and (re-search-forward "^[#% ]*--.*--*" nil t) (match-beginning 0))))) (when (and a b) (propertize (format "%dw %dc " (count-words a b) (- b a)) 'face 'tc/modeline-face) ))) ;; Add the said counters into the modeline (defun tc/add-text-counters-in-modeline () (interactive) (add-to-list 'mode-line-buffer-identification '(:eval (tc/text-counters-string))) )