2010-07-01 49 views
1

在Emacs 21:在同一行缩进嵌套的命名空间,只是一个水平

namespace Abc { namespace Def { 
    class X; 
    namespace Ghi { 
     class Y; 
    } 
} } 

但现在在Emacs 22.2.1:

namespace Abc { namespace Def { 
     class X; 
     namespace Ghi { 
      class Y; 
     } 
    } } 

我如何获得旧的行为了?请注意,我不想要一个固定的列进行缩进,我希望它缩进一个级别,而不管这个行包含多少'namespace {'。

+0

道歉,因为这与问题没有直接关系,但是您的项目非常庞大,由许多独立开发人员维护,您需要嵌套命名空间?看起来好像名称空间在这里更多地用于组织目的,而不是避免名称冲突,但我建议不要这样做,因为它可能导致长期更令人头疼(例如:ADL问题)。 – stinky472 2010-07-01 10:14:03

+0

嵌套命名空间有什么问题? – Philipp 2010-07-01 12:04:41

回答

3

我居然发现自己的答案,在思路清晰的时刻:

(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"  
       `(... 
     (c-offsets-alist 
     (...) 
     (innamespace 
      . (lambda (x) 
      (if (followed-by 
       '(innamespace namespace-close)) 0 '+)))))) 

的“...”象征,当然其他个人。