http://shibayu36.hatenablog.com/entry/20101109/1289314475
行末のスペースを消すために delete-trailing-whitespaceを
before-save-hookに設定している人は多いと思いますが、pull requestの
ときなどに余計な差分を作ってしまい困ることがあります。そのため
id:shibayu36さんのエントリのように toggle関数を作っている方も
いると思うのですが、単純に toggleしただけでは今どっちなんだっけと
わからなくなることがあります。
それをモードラインで確認できるようにしておくと、いくらか捗ると
思いますので、その設定を示します。
(defvar my/current-cleanup-state "") ;; 行末のスペース + ファイル末尾の連続する改行の除去を行う (defun my/cleanup-for-spaces () (interactive) (delete-trailing-whitespace) (save-excursion (save-restriction (widen) (goto-char (point-max)) (delete-blank-lines)))) (add-hook 'before-save-hook 'my/cleanup-for-spaces) (setq-default mode-line-format (cons '(:eval my/current-cleanup-state) mode-line-format)) (defun toggle-cleanup-spaces () (interactive) (cond ((memq 'my/cleanup-for-spaces before-save-hook) (setq my/current-cleanup-state (propertize "[DT-]" 'face '((:foreground "turquoise1" :weight bold)))) (remove-hook 'before-save-hook 'my/cleanup-for-spaces)) (t (setq my/current-cleanup-state "") (add-hook 'before-save-hook 'my/cleanup-for-spaces))) (force-mode-line-update)) (global-set-key (kbd "M-g M-d") 'toggle-cleanup-spaces)
delete-trailing-whitespaceが無効な場合は以下のようにモードラインの
左端に「DT-」が表示されます。有効な場合は長さ 0の文字列が表示、つまり
見えないことになります。