C++0x枚举类的Emacs cc模式缩进问题
Emacs cc-mode indentation problem with C++0x enum class
Emacs cc模式似乎还不能识别C++0x中引入的类型安全enum class
。我得到的结果是第二个、第三个等枚举的双缩进:
enum class Color {
Blue,
Red,
Orange,
Green
};
我想要的是:
enum class Color {
Blue,
Red,
Orange,
Green
};
你能推荐一个好的命令添加到.emacs
中吗?这将使cc模式处理enum class
的方式与处理普通的旧enum
的方式相同?
这就是问题所在:
cc模式在某种程度上依赖于关键字是单个单词的假设。添加对enum_class
而不是enum class
的支持只需更改一些regexp即可。
相反,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)
这并没有经过严格的测试。)
工作原理:
CCD_ 7确定语法树中不同位置的缩进。它可以被分配常量或函数。
这两个函数可以确定当前位置是否在enum class {...}
内部。如果是这种情况,则返回0或'-,cc模式将其解释为缩进深度。如果不是,则返回默认值。
inside-class-enum-p
只是向上移动到前一个大括号,并检查其前面的文本是否为"enum-class"。
相关文章:
- clang格式:宏的缩进
- C++setiosflags函数操纵器-未确定的缩进
- VSCode 中带有 C/C++ 扩展名的多行注释缩进错误
- 如何使用c++调整文本文件中代码的缩进?
- 如何在C++中制作 clang 格式的缩进 extern C 块?
- 在 vscode 中使用特定缩进/对齐 C/C++ 自动格式化
- "If Else"语句缩进在C++中是否重要?
- CLion 行注释的不一致自动缩进
- 如何在用户按Enter键时控制wxStyledTextCtrl中的行缩进
- 如何在 QLabel 中将缩进设置为 QImage
- 如何使 clang 格式将所有详细信息命名空间缩进一个
- 是否可以更改 Xcode 缩进注释行的方式
- 用libxml2缩进合并的XML文件
- 精美的C 容器,具有级别的缩进
- 如何在使用clang-format访问修饰符后缩进
- 如何使用Visual Studio轻松缩进标头声明
- Emacs C++模式缩进
- 使用Emacs次要模式更改缩进
- Emacs imenu和speedbar+语义失败,因为在c++模式下缩进
- C++0x枚举类的Emacs cc模式缩进问题