Mercurial > emacs
changeset 103117:49b361ba00e8
Enhancements for Objective-C:
cc-vars.el
(c-objc-method-arg-min-delta-to-bracket,
c-objc-method-arg-unfinished-offset, c-objc-method-parameter-offset): New
variables.
(c-offsets-alist): Use c-lineup-ObjC-method-call-colons in entry for
objc-method-call-cont.
cc-langs.el (c-constant-kwds): New ObjC keywords "YES", "NO",
"NS_DURING", "NS_HANDLER", "NS_ENDHANDLER".
cc-align.el (c-lineup-ObjC-method-call-colons): New function.
author | Alan Mackenzie <acm@muc.de> |
---|---|
date | Thu, 30 Apr 2009 10:36:24 +0000 |
parents | f08ab194413f |
children | 8f67158fe544 |
files | lisp/progmodes/cc-align.el lisp/progmodes/cc-langs.el lisp/progmodes/cc-vars.el |
diffstat | 3 files changed, 84 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/progmodes/cc-align.el Thu Apr 30 10:28:33 2009 +0000 +++ b/lisp/progmodes/cc-align.el Thu Apr 30 10:36:24 2009 +0000 @@ -907,8 +907,48 @@ ) (- target-col open-bracket-col extra)))) +(defun c-lineup-ObjC-method-call-colons (langelem) + "Line up selector args as Project Builder / XCode: colons of first + selector portions on successive lines are aligned. If no decision can + be made return NIL, so that other lineup methods can be tried. This is + typically chained with `c-lineup-ObjC-method-call'. + +Works with: objc-method-call-cont." + (save-excursion + (catch 'no-idea + (let* ((method-arg-len (progn + (back-to-indentation) + (if (search-forward ":" (c-point 'eol) 'move) + (- (point) (c-point 'boi)) + ; no complete argument to indent yet + (throw 'no-idea nil)))) + + (extra (save-excursion + ; indent parameter to argument if needed + (back-to-indentation) + (c-backward-syntactic-ws (c-langelem-pos langelem)) + (if (eq ?: (char-before)) + c-objc-method-parameter-offset 0))) + + (open-bracket-col (c-langelem-col langelem)) + + (arg-ralign-colon-ofs (progn + (forward-char) ; skip over '[' + ; skip over object/class name + ; and first argument + (c-forward-sexp 2) + (if (search-forward ":" (c-point 'eol) 'move) + (- (current-column) open-bracket-col + method-arg-len extra) + ; previous arg has no param + c-objc-method-arg-unfinished-offset)))) + + (if (>= arg-ralign-colon-ofs c-objc-method-arg-min-delta-to-bracket) + (+ arg-ralign-colon-ofs extra) + (throw 'no-idea nil)))))) + (defun c-lineup-ObjC-method-args (langelem) - "Line up the colons that separate args. + "Line up the colons that separate args in a method declaration. The colon on the current line is aligned with the one on the first line. @@ -932,7 +972,7 @@ c-basic-offset))))) (defun c-lineup-ObjC-method-args-2 (langelem) - "Line up the colons that separate args. + "Line up the colons that separate args in a method declaration. The colon on the current line is aligned with the one on the previous line.
--- a/lisp/progmodes/cc-langs.el Thu Apr 30 10:28:33 2009 +0000 +++ b/lisp/progmodes/cc-langs.el Thu Apr 30 10:36:24 2009 +0000 @@ -2149,7 +2149,7 @@ t nil (c c++) '("NULL" ;; Not a keyword, but practically works as one. "false" "true") ; Defined in C99. - objc '("nil" "Nil") + objc '("nil" "Nil" "YES" "NO" "NS_DURING" "NS_HANDLER" "NS_ENDHANDLER") idl '("TRUE" "FALSE") java '("true" "false" "null") ; technically "literals", not keywords pike '("UNDEFINED")) ;; Not a keyword, but practically works as one.
--- a/lisp/progmodes/cc-vars.el Thu Apr 30 10:28:33 2009 +0000 +++ b/lisp/progmodes/cc-vars.el Thu Apr 30 10:36:24 2009 +0000 @@ -936,6 +936,45 @@ :type 'integer :group 'c) +(defcustom c-objc-method-arg-min-delta-to-bracket 2 + "*Minimum number of chars to the opening bracket. + +Consider this ObjC snippet: + + [foo blahBlah: fred + |<-x->|barBaz: barney + +If `x' is less than this number then `c-lineup-ObjC-method-call-colons' +will defer the indentation decision to the next function. By default +this is `c-lineup-ObjC-method-call', which would align it like: + + [foo blahBlahBlah: fred + thisIsTooDamnLong: barney + +This behaviour can be overridden by customizing the indentation of +`objc-method-call-cont' in the \"objc\" style." + :type 'integer + :group 'c) + +(defcustom c-objc-method-arg-unfinished-offset 4 + "*Offset relative to bracket if first selector is on a new line. + + [aaaaaaaaa + |<-x->|bbbbbbb: cccccc + ddddd: eeee];" + :type 'integer + :group 'c) + +(defcustom c-objc-method-parameter-offset 4 + "*Offset for selector parameter on a new line (relative to first selector. + + [aaaaaaa bbbbbbbbbb: + |<-x->|cccccccc + ddd: eeee + ffff: ggg];" + :type 'integer + :group 'c) + (defcustom c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu")) "*Style which gets installed by default when a file is visited. @@ -1121,7 +1160,8 @@ ;; Anchor pos: Boi. (objc-method-args-cont . c-lineup-ObjC-method-args) ;; Anchor pos: At the method start (always at boi). - (objc-method-call-cont . c-lineup-ObjC-method-call) + (objc-method-call-cont . (c-lineup-ObjC-method-call-colons + c-lineup-ObjC-method-call +)) ;; Anchor pos: At the open bracket. (extern-lang-open . 0) (namespace-open . 0)