summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fe-text/gui-readline.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/fe-text/gui-readline.c b/src/fe-text/gui-readline.c
index 5d859ede..4616e919 100644
--- a/src/fe-text/gui-readline.c
+++ b/src/fe-text/gui-readline.c
@@ -681,7 +681,8 @@ static void paste_bracketed_end(int i, gboolean rest)
static void paste_bracketed_middle()
{
int i;
- int len = paste_buffer->len - G_N_ELEMENTS(bp_end);
+ int marklen = G_N_ELEMENTS(bp_end);
+ int len = paste_buffer->len - marklen;
unichar *ptr = (unichar *) paste_buffer->data;
if (len <= 0) {
@@ -690,6 +691,23 @@ static void paste_bracketed_middle()
for (i = 0; i <= len; i++, ptr++) {
if (ptr[0] == bp_end[0] && memcmp(ptr, bp_end, sizeof(bp_end)) == 0) {
+
+ /* if there are at least 6 bytes after the end,
+ * check for another start marker right afterwards */
+ if (i <= (len - marklen) &&
+ memcmp(ptr + marklen, bp_start, sizeof(bp_start)) == 0) {
+
+ /* remove both markers*/
+ g_array_remove_range(paste_buffer, i, marklen * 2);
+ len -= marklen * 2;
+
+ /* go one step back */
+ if (i > 0) {
+ i--;
+ ptr--;
+ }
+ continue;
+ }
paste_bracketed_end(i, i != len);
break;
}