2013-11-14 3 views
0

Qt макросы, такие как Q_OBJECT, и сигналы испортили выделение Emacs моего кода на C++. Как получить Emacs для распознавания макросов Qt и отступов моего кода на C++? версияEmacs C++ indentation confused by Qt macros

Emacs: 23.3.1
CC режим Версия: 5.31.8

Согласно Emacs wiki, мой CC-режим должен поддерживать Qt макросы из коробки, но это не происходит со мной.

Вот скриншот. enter image description here

A similar question было предложено, но не было разрешено.

+0

Не могли бы вы привести конкретный пример? Минималистичный фрагмент кода, например, такой плохой отступ. – juanleon

+0

@juanleon Я добавил скриншот. – wsaleem

+0

Возможный дубликат http://stackoverflow.com/questions/6666888/emacs-indenting-after-macro-in-c. См. Также мой ответ на этот поток с переменной 'c-macro-names-with-semicolon', убедитесь, что он содержит все макросы QT, которые вы собираетесь использовать. – immerrr

ответ

1

Я думаю, что макросы 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 Я боюсь, что это не будет работать.

+0

Спасибо. Попытка установить Emacs 24 открыла [новую банку червей] (http://askubuntu.com/questions/377642/error-installing-emcas-24-on-ubuntu-12-04). Я вернусь к нашей проблеме после успешного завершения установки Emacs. – wsaleem