Elisp Code for VTK-Style C Indentation: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
No edit summary
(Problems when loading into emacs are fixed. Also, functions with arguments on the following lines are now properly indented.)
 
(4 intermediate revisions by 3 users not shown)
Line 50: Line 50:
   (c-set-offset 'catch-clause 0)
   (c-set-offset 'catch-clause 0)
   (c-set-offset 'comment-intro 'c-lineup-comment)
   (c-set-offset 'comment-intro 'c-lineup-comment)
   (c-set-offset 'arglist-intro 'c-lineup-arglist-intro-after-paren)
   (c-set-offset 'arglist-intro '+)
   (c-set-offset 'arglist-cont 'c-lineup-operator-arglist)
   (c-set-offset 'arglist-cont 'c-lineup-arglist-operators)
  (c-set-offset 'arglist-cont-nonempty 'c-lineup-operator-arglist)
   (c-set-offset 'arglist-close 'c-lineup-arglist-operators)
   (c-set-offset 'arglist-close 'c-lineup-arglist)
   (c-set-offset 'stream-op 'c-lineup-streamop)
   (c-set-offset 'stream-op 'c-lineup-streamop)
   (c-set-offset 'inclass '+)
   (c-set-offset 'inclass '+)

Latest revision as of 18:48, 11 January 2011

To make Emacs' C and C++ modes conform to VTK-style indentation, add the following code to your .emacs file.

(defun c-set-indent-vtk ()
  (interactive)

  (setq c-basic-offset 2)
  (setq c-comment-only-line-offset 0)
  (setq c-indent-comments-syntactically-p t)
  (setq c-electric-pound-behavior '(alignleft))
  (setq indent-tabs-mode nil)

  (c-set-offset 'case-label 0)
  (c-set-offset 'label 0)
  (c-set-offset 'topmost-intro-cont 0)
  (c-set-offset 'block-open '+)
  (c-set-offset 'block-close 0)
  (c-set-offset 'substatement '+)
  (c-set-offset 'substatement-open '+)
  (c-set-offset 'statement-block-intro 0)
  (c-set-offset 'access-label '-)

  (c-set-offset 'string 'c-lineup-dont-change)
  (c-set-offset 'c 'c-lineup-C-comments)
  (c-set-offset 'defun-open 0)
  (c-set-offset 'defun-close 0)
  (c-set-offset 'defun-block-intro '+)
  (c-set-offset 'class-open 0)
  (c-set-offset 'class-close 0)
  (c-set-offset 'inline-open 0)
  (c-set-offset 'inline-close 0)
  (c-set-offset 'func-decl-cont '+)
  (c-set-offset 'knr-argdecl-intro 5)
  (c-set-offset 'knr-argdecl 0)
  (c-set-offset 'topmost-intro 0)
  (c-set-offset 'member-init-intro '+)
  (c-set-offset 'member-init-cont 0)
  (c-set-offset 'inher-intro '+)
  (c-set-offset 'inher-cont 'c-lineup-multi-inher)
  (c-set-offset 'brace-list-open 0)
  (c-set-offset 'brace-list-close 0)
  (c-set-offset 'brace-list-intro '+)
  (c-set-offset 'brace-list-entry 0)
  (c-set-offset 'brace-entry-open 0)
  (c-set-offset 'statement 0)
  (c-set-offset 'statement-cont '+)
  (c-set-offset 'statement-case-intro '+)
  (c-set-offset 'statement-case-open '+)
  (c-set-offset 'do-while-closure 0)
  (c-set-offset 'else-clause 0)
  (c-set-offset 'catch-clause 0)
  (c-set-offset 'comment-intro 'c-lineup-comment)
  (c-set-offset 'arglist-intro '+)
  (c-set-offset 'arglist-cont 'c-lineup-arglist-operators)
  (c-set-offset 'arglist-close 'c-lineup-arglist-operators)
  (c-set-offset 'stream-op 'c-lineup-streamop)
  (c-set-offset 'inclass '+)
  (c-set-offset 'cpp-macro -1000)
  (c-set-offset 'cpp-macro-cont 'c-lineup-dont-change)
  (c-set-offset 'friend 0)
  (c-set-offset 'objc-method-intro -1000)
  (c-set-offset 'objc-method-args-cont 'c-lineup-ObjC-method-args)
  (c-set-offset 'objc-method-call-cont 'c-lineup-ObjC-method-call)
  (c-set-offset 'extern-lang-open 0)
  (c-set-offset 'extern-lang-close 0)
  (c-set-offset 'inextern-lang '+)
  (c-set-offset 'namespace-open 0)
  (c-set-offset 'namespace-close 0)
  (c-set-offset 'innamespace '+)
  (c-set-offset 'template-args-cont '+)
  (c-set-offset 'inlambda 'c-lineup-inexpr-block)
  (c-set-offset 'lambda-intro-cont '+)
  (c-set-offset 'inexpr-statement 0)
  (c-set-offset 'inexpr-class '+)

  (message "VTK indentation."))

(add-hook 'c-mode-common-hook 'c-set-indent-vtk)

This will set VTK indentation whenever you start the C or C++ modes. If you don't want to use VTK indentation for all of your code, you can change the add-hook command to

(add-hook 'c-mode-common-hook (lambda () "Set VTK indent."
                                (local-set-key "\C-c\C-i\C-v"
                                               'c-set-indent-vtk)))

This will leave the indentation to default until you hit the key sequence C-c C-i C-v.


VTK: [Welcome | Site Map]