Отступ публичной / защищенной / частной метки emacs в заголовочном файле C ++ не работает для нулевого смещения

Я не могу получить нулевое смещение для некоторых вещей для моих файлов заголовков C ++ в emacs, даже если оно определено в моем файле .emacs.

Заголовочный файл ниже показывает определение класса внутри двух пространств имен и, что наиболее важно, ключевое слово public, которое я хотел бы иметь с нулевым смещением, как показано ниже.

namespace n1
{
namespace n2 // no offset
{

class SomeClass // no offset from namespace open curly
{
public: // this line with zero offset
    SomeClass(); // offset 4
    ...
};

inline SomeClass::SomeClass() // no offset
{
}

} // n2
} // n2

В моем файле .emacs я добавил такую ​​метку:

(c-set-offset 'label 0)

I использовал Ctrl-C Ctrl-S, чтобы узнать, что нужно изменить. Другие смещения, которые я определил в файле .emacs, работают нормально, а также значения, отличные от 0, работают для метки.

Когда я устанавливаю смещение 0 для метки, оно оказывается равным 1 при нажатии табуляции для этой строки. Это странно и похоже, что что-то еще заменяет или добавляет минимум 1.

Может ли кто-нибудь объяснить, как я могу достичь того, что я хочу, а также, возможно, объяснение того, что происходит в настоящее время?

Уф, это был мой первый вопрос Вот. Спасибо :)

ОБНОВЛЕНИЕ:

Благодаря ответам я смог продвинуться немного дальше, но все еще не нашел решения в целом, потому что изменение вещей, необходимых для получения общего смещения 0 для аксессоров, приводит к другим вещам, которые я не делаю. не хочу. Вот где я сейчас:

(c-set-offset 'access-label 0)

Мне также нужно было получить файл .h, чтобы он выглядел как C ++, поэтому я добавил:

(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))

Одно только это не удаляет 1 смещение, которое я видел, но похоже, что есть также включает аксессуар. Установка этого значения на 0 фактически приводит к общему смещению 0.

(c-set-offset 'inclass 0)

Проблема в том, что теперь другие вещи, такие как члены, имеют в сумме 0, как показано ниже:

class Foo
{
public:
Foo();
~Foo();

Чтобы исправить это, я изменил topmost-intro на смещение 4

(c-set-offset 'topmost-intro 4)

, что, в свою очередь, привело к другим изменениям, например, для объявлений встроенных функций в тот же файл. В общем, я не уверен, как настроить это так, как я хочу.

UPDATE2:

Добавлено встроенное объявление SomeClass ctor без смещения.

6
задан murrekatt 21 December 2010 в 14:33
поделиться