From ac4117ce8a2ef388a067c7d9882438edcfad60e9 Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Mon, 6 Jan 2014 21:51:23 +0100 Subject: [PATCH] add bracketed paste (by egmont). Closes T670 --- src/bin/termio.c | 10 ++++++++++ src/bin/termpty.h | 1 + src/bin/termptyesc.c | 4 ++-- src/bin/termptyops.c | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/bin/termio.c b/src/bin/termio.c index e55fa4ba..573760ec 100644 --- a/src/bin/termio.c +++ b/src/bin/termio.c @@ -1869,7 +1869,17 @@ _getsel_cb(void *data, Evas_Object *obj EINA_UNUSED, Elm_Selection_Data *ev) tmp[i] = s[i]; if (tmp[i] == '\n') tmp[i] = '\r'; } + + if (sd->pty->state.bracketed_paste) + termpty_write(sd->pty, "\x1b[200~", + sizeof("\x1b[200~") - 1); + termpty_write(sd->pty, tmp, ev->len - 1); + + if (sd->pty->state.bracketed_paste) + termpty_write(sd->pty, "\x1b[201~", + sizeof("\x1b[201~") - 1); + free(tmp); } } diff --git a/src/bin/termpty.h b/src/bin/termpty.h index 7ac78891..e818186e 100644 --- a/src/bin/termpty.h +++ b/src/bin/termpty.h @@ -98,6 +98,7 @@ struct _Termstate unsigned int reverse : 1; unsigned int no_autorepeat : 1; unsigned int cjk_ambiguous_wide : 1; + unsigned int bracketed_paste : 1; }; struct _Termpty diff --git a/src/bin/termptyesc.c b/src/bin/termptyesc.c index e28f9440..9f7de34b 100644 --- a/src/bin/termptyesc.c +++ b/src/bin/termptyesc.c @@ -845,9 +845,9 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce) else _termpty_cursor_copy(&(ty->save), &(ty->state)); break; - case 2004: // ignore + case 2004: handled = 1; -// INF("XXX: enable bracketed paste mode %i", mode); + ty->state.bracketed_paste = mode; break; case 7727: // ignore handled = 1; diff --git a/src/bin/termptyops.c b/src/bin/termptyops.c index c5a1de5f..dfed4a66 100644 --- a/src/bin/termptyops.c +++ b/src/bin/termptyops.c @@ -387,6 +387,7 @@ _termpty_reset_state(Termpty *ty) ty->state.hidecursor = 0; ty->state.crlf = 0; ty->state.had_cr = 0; + ty->state.bracketed_paste = 0; } void