diff options
-rw-r--r-- | src/ex_getln.c | 32 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 26 insertions, 8 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c index 396f686bf..6fa5531d0 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -2342,15 +2342,31 @@ redraw: windgoto(msg_row, msg_col); pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len; - /* we are done when a NL is entered, but not when it comes after a - * backslash */ - if (line_ga.ga_len > 0 && pend[-1] == '\n' - && (line_ga.ga_len <= 1 || pend[-2] != '\\')) + /* We are done when a NL is entered, but not when it comes after an + * odd number of backslashes, that results in a NUL. */ + if (line_ga.ga_len > 0 && pend[-1] == '\n') { - --line_ga.ga_len; - --pend; - *pend = NUL; - break; + int bcount = 0; + + while (line_ga.ga_len - 2 >= bcount && pend[-2 - bcount] == '\\') + ++bcount; + + if (bcount > 0) + { + /* Halve the number of backslashes: "\NL" -> "NUL", "\\NL" -> + * "\NL", etc. */ + line_ga.ga_len -= (bcount + 1) / 2; + pend -= (bcount + 1) / 2; + pend[-1] = '\n'; + } + + if ((bcount & 1) == 0) + { + --line_ga.ga_len; + --pend; + *pend = NUL; + break; + } } } diff --git a/src/version.c b/src/version.c index 7f6aa67eb..ad47acc51 100644 --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 14, +/**/ 13, /**/ 12, |