emacs batch indent vs. cc-mode access-label
Я пытаюсь пакетные отступы исходных файлов с помощью Emacs. Я использую команду:
$ emacs -batch Source.h -l emacs-format-file.el -f emacs-format-function
где emacs-format-file.el содержит:
(defun emacs-format-function ()
(c-set-style "gnu")
(setq c-basic-offset 4)
(c-set-offset 'access-label nil)
(c-set-offset 'substatement-open 0)
(indent-region (point-min) (point-max) nil)
(untabify (point-min) (point-max))
(save-buffer)
)
Emacs делает отступ на мой вкус, за одним исключением. Ключевые слова "public", "private" и "protected" имеют дополнительный отступ:
class Foo
{
-public:
+ public:
Я хочу совместить эти ключевые слова с предыдущей открытой скобкой. Основываясь на этом вопросе, я подумал, что установка "метки доступа" исправит это, но, похоже, это не даст никакого эффекта.
Что мне не хватает?
1 ответ
Оказывается, что emacs обрабатывал заголовочный файл как C вместо C++. Исправление состояло в том, чтобы изменить файл.el, чтобы вручную переключиться в режим C++:
(defun c++-indent-region ()
(c++-mode)
(c-set-style "gnu")
(setq c-basic-offset 4)
(indent-region (point-min) (point-max) nil)
(untabify (point-min) (point-max))
(save-buffer)
)