summaryrefslogtreecommitdiff
path: root/src/fe-text
diff options
context:
space:
mode:
authordequis <dx@dxzone.com.ar>2015-09-25 03:09:14 -0300
committerdequis <dx@dxzone.com.ar>2015-09-27 16:08:07 -0300
commitc721d57688e8f5413df7c179eac54c315343fbb0 (patch)
tree445fd39f8f17cde7b3dc43ecc53d8bf3b4b1b3b6 /src/fe-text
parent7d062a313add81584608f2b0abf086f2b73e8098 (diff)
downloadirssi-c721d57688e8f5413df7c179eac54c315343fbb0.zip
Handle a paste start marker right after an end one (ignore both)
This actually workarounds a bug with the "st" terminal, for which i've already submitted a patch, but irssi needs to be able to handle it decently too.
Diffstat (limited to 'src/fe-text')
-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;
}