私の .emacs ファイルには次のものがあります。
(defun c++-mode-untabify ()
(save-excursion
(goto-char (point-min))
(while (re-search-forward "[ \t]+$" nil t)
(delete-region (match-beginning 0) (match-end 0)))
(goto-char (point-min))
(if (search-forward "\t" nil t)
(untabify (1- (point)) (point-max))))
nil)
(add-hook 'c++-mode-hook
'(lambda ()
(make-local-hook 'write-contents-hooks)
(add-hook 'write-contents-hooks 'c++-mode-untabify)))
主にhttp://www.jwz.org/doc/tabs-vs-spaces.htmlから盗用されています。untabify
これにより、C++ ファイルを保存する前にemacs がバッファー上で実行されます。
問題は、C++ ファイルをロードした後、他のファイル タイプのバッファであっても、後続のすべてuntabify
のファイル書き込みにフックが適用されることです。これは、C++ ファイルを開いて、たとえばタブ区切りのテキスト ファイルを編集すると、ファイルを保存するときにタブが壊れてしまうことを意味します。
私は elisp の第一人者ではありませんが、行は追加をローカル バッファーにのみ適用(make-local-hook 'write-contents-hooks)
しようとしていると思います。write-contents-hooks
ただし、それは機能しておらず、すべてのバッファーc++-mode-untabify
に対応しています。write-contents-hooks
Windows XP ボックスで EmacsW32 22.0 を使用しています。変更を特定のバッファに対してローカルにする方法や、他の C++ 以外のバッファに切り替えるときに変更write-contents-hooks
をリセットする方法を知っている人はいますか?nil