У меня есть умножение вложенного пространства имен:
namespace first {namespace second {namespace third {
// emacs indents three times
// I want to intend here
} } }
так emacs отступы к третьей позиции. Однако я просто хочу единственное добавление отступа.
Действительно ли возможно выполнить этот эффект просто?
Используйте столбец с абсолютным отступом внутри пространства имен:
(defconst my-cc-style
'("gnu"
(c-offsets-alist . ((innamespace . [4])))))
(c-add-style "my-cc-style" my-cc-style)
Затем используйте c-set-style , чтобы использовать свой собственный стиль.
Обратите внимание, что это работает только в c ++ - режиме , c-mode не знает «innamespace».
Если вы хотите просто ввести литерал табуляции, а не менять схему отступов в emacs, C-q TAB
должен сработать.
К сожалению, я не думаю, что в emacs есть отдельный стиль для пространства имен внутри другого пространства имен. Если перейти к внутренней строке и выполнить C-c, C-o, то можно изменить стиль topmost-intro, а если выполнить customize-variable c-offsets-alist
, то можно редактировать все различные варианты отступов, которые есть в emacs, но для вашего конкретного случая такого стиля не существует. Вам придется написать его вручную в elisp
Хорошо, похоже, это работает как минимум в 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;
}
}}
)