From e6fa311590da78d05e9eea42d3664cec01c9b1ae Mon Sep 17 00:00:00 2001 From: dequis Date: Sat, 12 Dec 2015 01:44:05 -0300 Subject: [PATCH] Bracketed paste: Adjust paste line count if there's text after newlines With bracketed paste, "a\nb" will result in two lines being pasted, because it's a single thing, with an end marker which the timeout based pastes don't have. Due to the way term_gets() counts lines, that input will have paste_line_count == 1. This can be misleading. This code adjusts it by looking at the last character, and increasing the count if it finds anything that isn't a newline. --- src/fe-text/gui-readline.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/fe-text/gui-readline.c b/src/fe-text/gui-readline.c index a9755318..851cbbe6 100644 --- a/src/fe-text/gui-readline.c +++ b/src/fe-text/gui-readline.c @@ -660,6 +660,8 @@ static gboolean paste_timeout(gpointer data) static void paste_bracketed_end(int i, gboolean rest) { + unichar last_char; + /* if there's stuff after the end bracket, save it for later */ if (rest) { unichar *start = ((unichar *) paste_buffer->data) + i + G_N_ELEMENTS(bp_end); @@ -672,6 +674,14 @@ static void paste_bracketed_end(int i, gboolean rest) /* remove the rest, including the trailing sequence chars */ g_array_set_size(paste_buffer, i); + last_char = g_array_index(paste_buffer, unichar, i - 1); + + if (paste_line_count > 0 && last_char != '\n' && last_char != '\r') { + /* there are newlines, but there's also stuff after the newline + * adjust line count to reflect this */ + paste_line_count++; + } + /* decide what to do with the buffer */ paste_timeout(NULL);