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)
)
Другие вопросы по тегам