This change fixes a number of C indentation annoyances:
* One-line blocks are indented relative to the preceding line.
* Stuff inside `extern "C" { ... }' isn't indended.
* The `extern "C" {' line itself /is/ indended.
* Blocks in macro argument lists are fixed.
* Macro indentation is fixed.
(define-key c-mode-map "*" nil)
(define-key c-mode-map "/" nil)))
(define-key c-mode-map "*" nil)
(define-key c-mode-map "/" nil)))
+(defun mdw-c-lineup-arglist (langelem)
+ "Hack for DWIMmery in c-lineup-arglist."
+ (if (save-excursion
+ (c-block-in-arglist-dwim (c-langelem-2nd-pos c-syntactic-element)))
+ 0
+ (c-lineup-arglist langelem)))
+
+(defun mdw-c-indent-extern-mumble (langelem)
+ "Indent `extern \"...\" {' lines."
+ (save-excursion
+ (back-to-indentation)
+ (if (looking-at
+ "\\s-*\\<extern\\>\\s-*\"\\([^\\\\\"]+\\|\\.\\)*\"\\s-*{")
+ c-basic-offset
+ nil)))
+
(defun mdw-c-style ()
(c-add-style "[mdw] C and C++ style"
'((c-basic-offset . 2)
(comment-column . 40)
(c-class-key . "class")
(defun mdw-c-style ()
(c-add-style "[mdw] C and C++ style"
'((c-basic-offset . 2)
(comment-column . 40)
(c-class-key . "class")
- (c-offsets-alist (substatement-open . 0)
- (label . 0)
- (case-label . +)
- (access-label . -)
- (inclass . +)
- (inline-open . ++)
- (statement-cont . 0)
- (statement-case-intro . +)))
+ (c-backslash-column . 72)
+ (c-offsets-alist
+ (substatement-open . (add 0 c-indent-one-line-block))
+ (defun-open . (add 0 c-indent-one-line-block))
+ (arglist-cont-nonempty . mdw-c-lineup-arglist)
+ (topmost-intro . mdw-c-indent-extern-mumble)
+ (cpp-define-intro . 0)
+ (inextern-lang . [0])
+ (label . 0)
+ (case-label . +)
+ (access-label . -)
+ (inclass . +)
+ (inline-open . ++)
+ (statement-cont . 0)
+ (statement-case-intro . +)))
t))
(defun mdw-fontify-c-and-c++ ()
t))
(defun mdw-fontify-c-and-c++ ()