diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-03-12 20:37:21 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-03-12 20:37:21 +0100 |
commit | 025a6b708a9bff54c73fb9c641b980da19e943a9 (patch) | |
tree | 9d1534b7d2637c7ef6c851a158c2eb99becefbfd | |
parent | 1c46544412382db8b3203d6c78e550df885540bd (diff) | |
download | vim-025a6b708a9bff54c73fb9c641b980da19e943a9.zip |
patch 8.0.0453: adding fold marker creates new comment
Problem: Adding fold marker creates new comment.
Solution: Use an existing comment if possible. (LemonBoy, closes #1549)
-rw-r--r-- | src/fold.c | 8 | ||||
-rw-r--r-- | src/ops.c | 5 | ||||
-rw-r--r-- | src/proto/ops.pro | 1 | ||||
-rw-r--r-- | src/testdir/test_fold.vim | 16 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 27 insertions, 5 deletions
diff --git a/src/fold.c b/src/fold.c index a186bef4d..826ad5c8d 100644 --- a/src/fold.c +++ b/src/fold.c @@ -1760,6 +1760,7 @@ foldAddMarker(linenr_T lnum, char_u *marker, int markerlen) int line_len; char_u *newline; char_u *p = (char_u *)strstr((char *)curbuf->b_p_cms, "%s"); + int line_is_comment = FALSE; /* Allocate a new line: old-line + 'cms'-start + marker + 'cms'-end */ line = ml_get(lnum); @@ -1767,11 +1768,16 @@ foldAddMarker(linenr_T lnum, char_u *marker, int markerlen) if (u_save(lnum - 1, lnum + 1) == OK) { +#if defined(FEAT_COMMENTS) + /* Check if the line ends with an unclosed comment */ + (void)skip_comment(line, FALSE, FALSE, &line_is_comment); +#endif newline = alloc((unsigned)(line_len + markerlen + STRLEN(cms) + 1)); if (newline == NULL) return; STRCPY(newline, line); - if (p == NULL) + /* Append the marker to the end of the line */ + if (p == NULL || line_is_comment) vim_strncpy(newline + line_len, marker, markerlen); else { @@ -113,9 +113,6 @@ static void copy_yank_reg(yankreg_T *reg); static void may_set_selection(void); #endif static void dis_msg(char_u *p, int skip_esc); -#if defined(FEAT_COMMENTS) || defined(PROTO) -static char_u *skip_comment(char_u *line, int process, int include_space, int *is_comment); -#endif static void block_prep(oparg_T *oap, struct block_def *, linenr_T, int); static int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1); #if defined(FEAT_CLIPBOARD) || defined(FEAT_EVAL) @@ -4301,7 +4298,7 @@ dis_msg( * is_comment - will indicate whether the current line ends with an unclosed * comment. */ - static char_u * + char_u * skip_comment( char_u *line, int process, diff --git a/src/proto/ops.pro b/src/proto/ops.pro index ef044e7ab..0740ddad3 100644 --- a/src/proto/ops.pro +++ b/src/proto/ops.pro @@ -38,6 +38,7 @@ void adjust_cursor_eol(void); int preprocs_left(void); int get_register_name(int num); void ex_display(exarg_T *eap); +char_u *skip_comment(char_u *line, int process, int include_space, int *is_comment); int do_join(long count, int insert_space, int save_undo, int use_formatoptions, int setmark); void op_format(oparg_T *oap, int keep_cursor); void op_formatexpr(oparg_T *oap); diff --git a/src/testdir/test_fold.vim b/src/testdir/test_fold.vim index 3c27f4f70..f10480bb4 100644 --- a/src/testdir/test_fold.vim +++ b/src/testdir/test_fold.vim @@ -168,6 +168,22 @@ func Test_combining_folds_marker() bwipe! endfunc +func Test_folds_marker_in_comment() + new + call setline(1, ['" foo', 'bar', 'baz']) + setl fen fdm=marker + setl com=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\" cms=\"%s + norm! zf2j + setl nofen + :1y + call assert_equal(['" foo{{{'], getreg(0,1,1)) + :+2y + call assert_equal(['baz"}}}'], getreg(0,1,1)) + + set foldmethod& + bwipe! +endfunc + func s:TestFoldExpr(lnum) let thisline = getline(a:lnum) if thisline == 'a' diff --git a/src/version.c b/src/version.c index 1574f9cbd..28c929429 100644 --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 453, +/**/ 452, /**/ 451, |