У меня есть следующее в файле .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. Это приводит к тому, что emacs запускает untabify
в буфере перед сохранением файла С++.
Проблема в том, что после того, как я загрузил файл С++, к all записывается следующий файл untabify
, даже для буферов других типов файлов. Это означает, что если я открою файл на С++ и отредактирую, скажем, текстовый файл с разделителями табуляции, вкладки будут сбиты при сохранении файла.
Я не гуру elisp, но я думаю, что строка (make-local-hook 'write-contents-hooks)
пытается сделать дополнение к write-contents-hooks
применимым только к локальному буферу. Однако он не работает, а c++-mode-untabify
находится в write-contents-hooks
для всех буферов.
Я использую EmacsW32 22.0 в окне Windows XP. Кто-нибудь может подумать, как сделать замену write-contents-hooks
локальным на определенный буфер или как reset на nil
при переключении на другие буферы, отличные от С++?