获取emacs的访问标签缩进以添加缩进级别

时间:2014-03-02 18:09:48

标签: c++ emacs indentation

我正在看这个question,并意识到我有一个类似的问题没有得到彻底的回答。

我希望访问说明符添加一定级别的缩进。在thisthis页面上,我发现我需要缩进的句法符号是access-label。因此,我需要使用(c-set-offset 'access-label '0)

但是,这只会缩进包含访问标签的行,而不是后面的任何内容。我得到的就是这个,

class foo {
  public:
  void someFunc(); // Doesn't take the indentation of the access label into account
  ...
  };

我想要的是,

class foo {
  public:
    void someFunc();
  ...
  };

我该怎么做?是否有其他变量我想修改?

2 个答案:

答案 0 :(得分:1)

您需要使用inclass来设置缩进功能&班里的成员。 但这会导致功能和情况的发生。 struct中的成员将缩进2个制表符,而不是一个,因此我们需要一个特殊的函数来设置正确的缩进宽度。我正在使用following config来实现这一点(我从互联网的某个地方获得了片段,也许来自emacswiki)...

答案 1 :(得分:1)

如果在新行上使用大括号,则上面的解决方法并不完全正确;你必须检查 如果在第一次转到你之前你是在一个开放式支架之前。这是我更常用的解决方法:


(defun agb/c++-mode-hook ()
  (c-set-offset 'access-label '-)
  (c-set-offset 'topmost-intro '0)
  (c-set-offset 'inclass '(lambda (arg)
                            (let ((inclass (assoc 'inclass c-syntactic-context)))
                              (save-excursion
                                (goto-char (c-langelem-pos inclass))
                                (if (looking-at "{")
                                    (goto-char (c-langelem-pos (assoc 'class-open (c-guess-basic-syntax)))))
                                (if (or (looking-at "struct")
                                        (looking-at "typedef struct"))
                                    '+
                                  '++))))))