指定したリージョン内の文字数, 単語数, 行数を動的に計測して表示する マイナーモードです. 指定可能なリージョンの種類は以下のものがあります.
http://www.taiyaki.org/elisp/word-count/src/ から word-count.el をダウンロードしてください.
word-count.el を ~/elisp に置いたとして, 以下の設定をを .emacs などに 追加してください. 最初の 1 行目は既に書かれていれば必要ありません.
(setq load-path (cons (expand-file-name "~/elisp") load-path))
(autoload 'word-count-mode "word-count"
"Minor mode to count words." t nil)
(global-set-key "\M-+" 'word-count-mode)
なんか適当にリージョンを指定してから, M-+ or M-x word-count-mode を 実行してみて下さい.
M-+ (word-count-mode) で word-count-mode を on/off できます. word-count-mode が on の場合, モードラインに "WC:60/10/2" といった 表示が追加されます. 3 つの数字は順に「文字数」, 「単語数」, 「行数」を 表しています.
カウントの対象範囲は WC マーカとカーソル位置の間になります. WC マーカは M-[space] (word-count-set-area) によってマーカの 位置を変更できます. word-count-mode を on にした時点では word-count 用 マーカはカーソルと同じ位置に配置されます. また, WC マーカの 位置はハイライトされます.
transient-mark-mode (リージョンがハイライトされて, リージョンの指定が on/off できるモード)が on の状態で リージョンを有効にすると, モードラインの標記が "WC:60/10/2(30/5/1)" などに変わります. かっこ内の数字はリージョンの中をカウントした数字です.
リージョンを指定した状態で M-[space] (word-count-set-area), word-count-set-region のどちらかを実行すると, リージョン内は WC リージョンとしてハイライト表示され, カウントの対象に なります. 以降カーソルの移動はカウントとは独立して行なえます. WC リージョン内を編集した場合, カウントも自動的に 行なわれます.
「N 文字以内で記述する」という目的に, WC リージョンは 有効だと思います. WC リージョンは, word-count-mode が off の状態でも, リージョンを指定して M-+ (word-count-mode) を 実行すると直接移行します.
カスタマイズをする場合は .emacs に設定を追加してください. 例として出している値はデフォルト値です.
(setq word-count-non-character-regexp "[\n\t ]")
(setq word-count-word-regexp "[a-z0-9_-]+")
デフォルトでは空行をカウントしません.
(setq word-count-non-line-regexp "^[\t ]*\n\\|^[\t ]+$")
(setq word-count-marker-foreground (mell-color-find "#D0D0D0" 7)) (setq word-count-marker-background (mell-color-find "#5050A0" 3)) (setq word-count-region-foreground (mell-color-find "#D0D0D0" 7)) (setq word-count-region-background (mell-color-find "#5050A0" 3))
mell-color-find の第 2 引数は tty の色を表しています. tty を考慮しないなら, (mell-color-find "#D0D0D0" 7) は "#D0D0D0" と同じです.
(setq word-count-preremove-regexp-alist
'((latex-mode . ("\\\\%" "%.*$")) (tex-mode . ("\\\\%" "%.*$"))
(html-mode . ("<[^>]*>")) (sgml-mode . ("<[^>]*>"))
(t . nil))
正規表現にマッチした文字列を内部的に空白に変換してから, カウントを行います. t はデフォルトの設定です.
word-count-mode 限定のメーリングリストではありませんが, 小松が作成している ELisp 全般に関してのメーリングリストを QuickMLで作成しました.
参加される方は, 以下のようなメールを送信してください. また Cc: に自分のメールアドレスを付けないでください. QuickML の仕様上, Cc: に参加者以外のメールアドレスがあると 参加できません.
To: elisp@taiyaki.quickml.com From: (自分のアドレス) Cc: komatsu@taiyaki.org Subject: 参加します (お名前) (本文にかるく自己紹介でもお願いします, 何も書かれていないと QuickML のシステム上登録できません.)