Ala*_*ing 33 c++ emacs enums indentation c++11
Emacs cc-mode似乎还没有识别enum class
C++ 0x中引入的类型安全.我得到的结果是第二个,第三个等枚举的双缩进:
enum class Color {
Blue,
Red,
Orange,
Green
};
Run Code Online (Sandbox Code Playgroud)
我想要的是:
enum class Color {
Blue,
Red,
Orange,
Green
};
Run Code Online (Sandbox Code Playgroud)
你能推荐一个好的命令添加到.emacs
哪个会使cc模式处理enum class
它与处理普通旧模式的方式相同enum
吗?
nsc*_*hum 26
cc模式在某种程度上依赖于关键字是单个单词的假设.添加支持enum_class
代替enum class
只是改变一些正则表达式的问题.
相反,Emacs将此视为一个类.解决这个问题的正确方法是教Emacs这是一个枚举.但这超出了答案的范围.
因此,在这种情况下,我们将修改现有缩进以使其行为不同.(可以在这个要点中修改代码.)
(defun inside-class-enum-p (pos) "Checks if POS is within the braces of a C++ \"enum class\"." (ignore-errors (save-excursion (goto-char pos) (up-list -1) (backward-sexp 1) (looking-back "enum[ \t]+class[ \t]+[^}]+")))) (defun align-enum-class (langelem) (if (inside-class-enum-p (c-langelem-pos langelem)) 0 (c-lineup-topmost-intro-cont langelem))) (defun align-enum-class-closing-brace (langelem) (if (inside-class-enum-p (c-langelem-pos langelem)) '- '+)) (defun fix-enum-class () "Setup `c++-mode' to better handle \"class enum\"." (add-to-list 'c-offsets-alist '(topmost-intro-cont . align-enum-class)) (add-to-list 'c-offsets-alist '(statement-cont . align-enum-class-closing-brace))) (add-hook 'c++-mode-hook 'fix-enum-class)
这没有经过严格测试.;)
c-offsets-alist
确定语法树中不同位置的缩进.它可以分配常量或函数.
这两个函数找出当前位置是否是内部的enum class {...}
.如果是这种情况,则返回0或' - ,cc模式解释为缩进深度.如果不是,则返回默认值.
inside-class-enum-p
只需向上移动到前一个大括号,并检查它之前的文本是否为"枚举类".
归档时间: |
|
查看次数: |
3976 次 |
最近记录: |