ccmode: Operator Line-Up
11.3.3 Operator Line-Up Functions
---------------------------------
The line-up functions here calculate the indentation for lines which
start with an operator, by lining it up with something on the previous
line.
-- Function: c-lineup-argcont
Line up a continued argument. E.g.:
foo (xyz, aaa + bbb + ccc
+ ddd + eee + fff); <- c-lineup-argcont
Only continuation lines like this are touched, ‘nil’ is returned on
lines which are the start of an argument.
Within a gcc ‘asm’ block, ‘:’ is recognized as an argument
separator, but of course only between operand specifications, not
in the expressions for the operands.
Works with: ‘arglist-cont’, ‘arglist-cont-nonempty’.
-- Function: c-lineup-arglist-operators
Line up lines starting with an infix operator under the open paren.
Return ‘nil’ on lines that don’t start with an operator, to leave
those cases to other line-up functions. Example:
if ( x < 10
|| at_limit (x, <- c-lineup-arglist-operators list) <- c-lineup-arglist-operators returns nil )
Since this function doesn’t do anything for lines without an infix
operator you typically want to use it together with some other
lineup settings, e.g., as follows (the ‘arglist-close’ setting is
just a suggestion to get a consistent style):
(c-set-offset 'arglist-cont
'(c-lineup-arglist-operators 0))
(c-set-offset 'arglist-cont-nonempty
'(c-lineup-arglist-operators c-lineup-arglist))
(c-set-offset 'arglist-close
'(c-lineup-arglist-close-under-paren))
Works with: ‘arglist-cont’, ‘arglist-cont-nonempty’.
-- Function: c-lineup-assignments
Line up the current line after the assignment operator on the first
line in the statement. If there isn’t any, return ‘nil’ to allow
stacking with other line-up functions. If the current line
contains an assignment operator too, try to align it with the first
one.
Works with: ‘topmost-intro-cont’, ‘statement-cont’, ‘arglist-cont’,
‘arglist-cont-nonempty’.
-- Function: c-lineup-math
Like ‘c-lineup-assignments’ but indent with ‘c-basic-offset’ if no
assignment operator was found on the first line. I.e., this
function is the same as specifying a list ‘(c-lineup-assignments
+)’. It’s provided for compatibility with old configurations.
Works with: ‘topmost-intro-cont’, ‘statement-cont’, ‘arglist-cont’,
‘arglist-cont-nonempty’.
-- Function: c-lineup-cascaded-calls
Line up “cascaded calls” under each other. If the line begins with
‘->’ or ‘.’ and the preceding line ends with one or more function
calls preceded by the same token, then the arrow is lined up with
the first of those tokens. E.g.:
r = proc->add(17)->add(18)
->add(19) + <- c-lineup-cascaded-calls offset; <- c-lineup-cascaded-calls (inactive)
In any other situation ‘nil’ is returned to allow use in list
expressions.
Works with: ‘topmost-intro-cont’, ‘statement-cont’, ‘arglist-cont’,
‘arglist-cont-nonempty’.
-- Function: c-lineup-streamop
Line up C++ stream operators (i.e., ‘<<’ and ‘>>’).
Works with: ‘stream-op’.
-- Function: c-lineup-string-cont
Line up a continued string under the one it continues. A continued
string in this sense is where a string literal follows directly
after another one. E.g.:
result = prefix + "A message "
"string."; <- c-lineup-string-cont
‘nil’ is returned in other situations, to allow stacking with other
lineup functions.
Works with: ‘topmost-intro-cont’, ‘statement-cont’, ‘arglist-cont’,
‘arglist-cont-nonempty’.