diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2020-01-16 15:31:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-16 15:31:05 +0100 |
commit | 6e78b2162382718b638c4532a155e5c3f9ed7515 (patch) | |
tree | 5868096a30a61deed1765e1c9ec93072a4d0c34b /src/nvim/fold.c | |
parent | 8ba3354d74a8f90ded0997100bdbe845a8c5382f (diff) | |
parent | ca1a00edd6d6345b848a28d077d6a192528f811e (diff) | |
download | rneovim-6e78b2162382718b638c4532a155e5c3f9ed7515.tar.gz rneovim-6e78b2162382718b638c4532a155e5c3f9ed7515.tar.bz2 rneovim-6e78b2162382718b638c4532a155e5c3f9ed7515.zip |
Merge pull request #11563 from bfredl/mark_madness
extmarks: mark sanity/madness
Diffstat (limited to 'src/nvim/fold.c')
-rw-r--r-- | src/nvim/fold.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/nvim/fold.c b/src/nvim/fold.c index b193b4005c..addfab8f08 100644 --- a/src/nvim/fold.c +++ b/src/nvim/fold.c @@ -22,6 +22,7 @@ #include "nvim/func_attr.h" #include "nvim/indent.h" #include "nvim/buffer_updates.h" +#include "nvim/mark_extended.h" #include "nvim/mark.h" #include "nvim/memline.h" #include "nvim/memory.h" @@ -1610,6 +1611,7 @@ static void foldAddMarker(linenr_T lnum, const char_u *marker, size_t markerlen) // Allocate a new line: old-line + 'cms'-start + marker + 'cms'-end line = ml_get(lnum); size_t line_len = STRLEN(line); + size_t added = 0; if (u_save(lnum - 1, lnum + 1) == OK) { // Check if the line ends with an unclosed comment @@ -1619,12 +1621,19 @@ static void foldAddMarker(linenr_T lnum, const char_u *marker, size_t markerlen) // Append the marker to the end of the line if (p == NULL || line_is_comment) { STRLCPY(newline + line_len, marker, markerlen + 1); + added = markerlen; } else { STRCPY(newline + line_len, cms); memcpy(newline + line_len + (p - cms), marker, markerlen); STRCPY(newline + line_len + (p - cms) + markerlen, p + 2); + added = markerlen + STRLEN(cms)-2; } ml_replace(lnum, newline, false); + if (added) { + extmark_splice(curbuf, (int)lnum-1, (int)line_len, + 0, 0, + 0, (int)added, kExtmarkUndo); + } } } @@ -1692,6 +1701,9 @@ static void foldDelMarker(linenr_T lnum, char_u *marker, size_t markerlen) memcpy(newline, line, (size_t)(p - line)); STRCPY(newline + (p - line), p + len); ml_replace(lnum, newline, false); + extmark_splice(curbuf, (int)lnum-1, (int)(p - line), + 0, (int)len, + 0, 0, kExtmarkUndo); } break; } |