Подтвердить что ты не робот

Emacs - переопределение отступа

У меня есть многократно вложенное пространство имен:

namespace first {namespace second {namespace third {
              // emacs indents three times
    // I want to intend here
} } }

чтобы emacs отступали до третьей позиции. Однако я просто хочу один отступ. Можно ли просто осуществить этот эффект?

4b9b3361

Ответ 1

Используйте абсолютный столбец отступов внутри пространства имен:

(defconst my-cc-style
  '("gnu"
    (c-offsets-alist . ((innamespace . [4])))))

(c-add-style "my-cc-style" my-cc-style)

Затем используйте c-set-style, чтобы использовать свой собственный стиль.

Обратите внимание, что это работает только в С++ - режиме, c-mode не знает 'innamespace'.

Ответ 2

С С++-mode в Emacs 23 мне пришлось сделать вот так:

(defun my-c-setup ()
   (c-set-offset 'innamespace [4]))
(add-hook 'c++-mode-hook 'my-c-setup)

Чтобы полностью отключить отступ в пространствах имен, измените [4] на 0.

Ответ 3

ОК, так что, похоже, это работает как в emacs 21, так и по 22:

(defun followed-by (cases)
  (cond ((null cases) nil)
        ((assq (car cases) 
               (cdr (memq c-syntactic-element c-syntactic-context))) t)
        (t (followed-by (cdr cases)))))

(c-add-style  "foo"      
              `(( other . personalizations )
        (c-offsets-alist
         ( more . stuff )
         (innamespace
          . (lambda (x) 
          (if (followed-by 
               '(innamespace namespace-close)) 0 '+))))))

(Первое решение не поддерживает конструкции типа

namespace X { namespace Y {
    class A;
    namespace Z {
        class B;
    }
}}

)

Ответ 4

Если вы просто хотите ввести литеральную вкладку, а не меняете схему отступа emacs, C-q TAB должен работать.

Ответ 5

К сожалению, я не думаю, что emacs имеет отдельный стиль для пространства имен внутри другого пространства имен. Если вы перейдете на внутреннюю линию и сделаете Cc, Co, вы можете изменить стиль самого верхнего стиля, и если вы запустите customize-variable c-offsets-alist, вы можете отредактировать все различные варианты отступов, которые есть emacs, но для вашего конкретного использования их не существует дело. Вам нужно будет записать его вручную в elisp

Ответ 6

Это работает для меня, наследуется от cc-mode и заменяет пространство имен в 0, иначе, отключает его отступ.

(defconst my-cc-style
  '("cc-mode"
    (c-offsets-alist . ((innamespace . [0])))))

(c-add-style "my-cc-mode" my-cc-style)