diff options
author | Bram Moolenaar <Bram@vim.org> | 2012-06-13 17:28:55 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2012-06-13 17:28:55 +0200 |
commit | bfe3bf806a8a4300289055643d13d19e2dbc8967 (patch) | |
tree | 487a502d010be7ed435e2a8a0bbd3d4e1e7e299c /src/edit.c | |
parent | a8596c47724b97822924f5ffe5d50476de31ff4b (diff) | |
download | vim-git-bfe3bf806a8a4300289055643d13d19e2dbc8967.tar.gz |
updated for version 7.3.552v7.3.552
Problem: Formatting inside comments does not use the "2" flag in
'formatoptions'.
Solution: Support the "2" flag. (Tor Perkins)
Diffstat (limited to 'src/edit.c')
-rw-r--r-- | src/edit.c | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/src/edit.c b/src/edit.c index 82e2b3b71..013fc5abc 100644 --- a/src/edit.c +++ b/src/edit.c @@ -1463,7 +1463,7 @@ normalchar: * what check_abbr() expects. */ (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) : #endif - c) && c != Ctrl_RSB)) + c) && c != Ctrl_RSB)) { insert_special(c, FALSE, FALSE); #ifdef FEAT_RIGHTLEFT @@ -5769,6 +5769,16 @@ insert_special(c, allow_modmask, ctrlv) # define WHITECHAR(cc) vim_iswhite(cc) #endif +/* + * "flags": INSCHAR_FORMAT - force formatting + * INSCHAR_CTRLV - char typed just after CTRL-V + * INSCHAR_NO_FEX - don't use 'formatexpr' + * + * NOTE: passes the flags value straight through to internal_format() which, + * beside INSCHAR_FORMAT (above), is also looking for these: + * INSCHAR_DO_COM - format comments + * INSCHAR_COM_LIST - format comments with num list or 2nd line indent + */ void insertchar(c, flags, second_indent) int c; /* character to insert or NUL */ @@ -6011,6 +6021,9 @@ insertchar(c, flags, second_indent) /* * Format text at the current insert position. + * + * If the INSCHAR_COM_LIST flag is present, then the value of second_indent + * will be the comment leader length sent to open_line(). */ static void internal_format(textwidth, second_indent, flags, format_only, c) @@ -6289,23 +6302,36 @@ internal_format(textwidth, second_indent, flags, format_only, c) + (fo_white_par ? OPENLINE_KEEPTRAIL : 0) #ifdef FEAT_COMMENTS + (do_comments ? OPENLINE_DO_COM : 0) + + ((flags & INSCHAR_COM_LIST) ? OPENLINE_COM_LIST : 0) #endif - , old_indent); - old_indent = 0; + , ((flags & INSCHAR_COM_LIST) ? second_indent : old_indent)); + if (!(flags & INSCHAR_COM_LIST)) + old_indent = 0; replace_offset = 0; if (first_line) { - if (second_indent < 0 && has_format_option(FO_Q_NUMBER)) - second_indent = get_number_indent(curwin->w_cursor.lnum -1); - if (second_indent >= 0) + if (!(flags & INSCHAR_COM_LIST)) { + /* + * This section is for numeric lists w/o comments. If comment + * indents are needed with numeric lists (formatoptions=nq), + * then the INSCHAR_COM_LIST flag will cause the corresponding + * OPENLINE_COM_LIST flag to be passed through to open_line() + * (as seen above)... + */ + if (second_indent < 0 && has_format_option(FO_Q_NUMBER)) + second_indent = get_number_indent(curwin->w_cursor.lnum -1); + if (second_indent >= 0) + { #ifdef FEAT_VREPLACE - if (State & VREPLACE_FLAG) - change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE); - else + if (State & VREPLACE_FLAG) + change_indent(INDENT_SET, second_indent, + FALSE, NUL, TRUE); + else #endif - (void)set_indent(second_indent, SIN_CHANGED); + (void)set_indent(second_indent, SIN_CHANGED); + } } first_line = FALSE; } |