Skip to content

Instantly share code, notes, and snippets.

@duyanning
Forked from nschum/gist:2626303
Created November 18, 2012 03:10
Show Gist options
  • Save duyanning/4103243 to your computer and use it in GitHub Desktop.
Save duyanning/4103243 to your computer and use it in GitHub Desktop.
better "enum class" indent in Emacs
;; This hack fixes indentation for C++11's "enum class" in Emacs.
;; http://stackoverflow.com/questions/6497374/emacs-cc-mode-indentation-problem-with-c0x-enum-class/6550361#6550361
;; You should change default style from gnu to stroustrup in you .emacs
;; (setq c-default-style
;; '((c++-mode . "stroustrup")
;; (java-mode . "java")
;; (awk-mode . "awk")
;; (other . "gnu")))
(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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment