Отступы public/protected/private emacs для заголовочного файла C++ не работают для нулевого смещения
Я не могу получить нулевое смещение для некоторых вещей для моих заголовочных файлов C++ в emacs, даже если это определено в моем файле.emacs.
Файл заголовка ниже показывает определение класса в двух пространствах имен и, что наиболее важно, публичное ключевое слово, которое я хотел бы иметь с нулевым смещением, как показано ниже.
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)
Я использовал 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 на offset 4
(c-set-offset 'topmost-intro 4)
Что, в свою очередь, привело к другим изменениям, например, для объявлений встроенных функций в том же файле. В общем, я не уверен, как настроить это так, как я хочу.
UPDATE2:
Добавлено встроенное объявление SomeClass ctor без смещения.
4 ответа
Я считаю, что вы хотите метку доступа вместо метки. Смотрите здесь.
Ты хочешь access-label
вместо ярлыка, и если C C CS дал вам ((label 1))
это означает, что вы находитесь в режиме C, а не в режиме C++ (режим C по умолчанию для .h
файлы). Если это ваша проблема, добавьте
// Emacs, please set these
// Local Variables: ***
// mode: c++ ***
// End: ***
в конец вашего.h файла или
// -*- C++ -*-
в начале.
Я думаю, что вы можете использовать отрицательное число. Например, в моем c-offsets-alist
, Я имею:
(inclass . +)
Затем в .emacs
:
(c-set-offset 'access-label -1)
Что заставляет меня желать:
class A {
public:
A();
...
Если вы используете
(c-set-offset 'innamespace 0)
тогда открывающая фигурная скобка пространства имен не увеличивает уровень отступа.