summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordequis <dx@dxzone.com.ar>2015-12-12 01:44:05 -0300
committerdequis <dx@dxzone.com.ar>2015-12-12 01:49:32 -0300
commite6fa311590da78d05e9eea42d3664cec01c9b1ae (patch)
tree6442d64ed62b91fde7e646c6ca1cbf1766696149 /src
parent38d372eccb3745a7734b8f8963ae572d1343c5b1 (diff)
downloadirssi-e6fa311590da78d05e9eea42d3664cec01c9b1ae.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/fe-text/gui-readline.c10
1 files changed, 10 insertions, 0 deletions
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);