Я думаю, что макросы Qt были обновлены, так как эта функциональность была добавлена в Emacs, поэтому Emacs немного устарел в этом отношении.
Способ исправления заключается в обновлении переменной c-macro-names-with-semicolon
. Текущее значение:
("Q_OBJECT" "Q_PROPERTY" "Q_DECLARE" "Q_ENUMS")
Мне кажется, что по крайней мере Q_INTERFACES должны быть добавлены к нему (возможно, вы знаете больше макросов, у меня нет опыта работы с Qt).
Правильный способ исправить это, чтобы добавить к вашей конфигурации:
(defun qt-macros-update()
(setq c-macro-names-with-semicolon '("Q_OBJECT" "Q_PROPERTY"
"Q_DECLARE" "Q_ENUMS" "Q_INTERFACES"))
(c-make-macro-with-semi-re))
(add-hook 'c-mode-common-hook 'qt-macros-update)
А затем сделать M-x report-emacs-bug
для Emacs Сопровождающие обновить код и исправить документацию для этой переменной (что, кажется устаревшим, тоже)
Update:
Это работает с Emacs 24. с Emacs 23 Я боюсь, что это не будет работать.
Не могли бы вы привести конкретный пример? Минималистичный фрагмент кода, например, такой плохой отступ. – juanleon
@juanleon Я добавил скриншот. – wsaleem
Возможный дубликат http://stackoverflow.com/questions/6666888/emacs-indenting-after-macro-in-c. См. Также мой ответ на этот поток с переменной 'c-macro-names-with-semicolon', убедитесь, что он содержит все макросы QT, которые вы собираетесь использовать. – immerrr