X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/b03db5b6836720d38860cc5fca352fce7cf48c24..61cc757f0b9df0437a95c039bfc3d01ef0412809:/terminal.c diff --git a/terminal.c b/terminal.c index d23cbe91..e3f61e93 100644 --- a/terminal.c +++ b/terminal.c @@ -1225,6 +1225,7 @@ static void power_on(Terminal *term, int clear) term_print_finish(term); term->xterm_mouse = 0; set_raw_mouse_mode(term->frontend, FALSE); + term->bracketed_paste = FALSE; { int i; for (i = 0; i < 256; i++) @@ -2503,6 +2504,9 @@ static void toggle_mode(Terminal *term, int mode, int query, int state) save_cursor(term, state); term->disptop = 0; break; + case 2004: /* xterm bracketed paste */ + term->bracketed_paste = state ? TRUE : FALSE; + break; } else switch (mode) { case 4: /* IRM: set insert mode */ @@ -5696,7 +5700,12 @@ void term_do_paste(Terminal *term) if (term->paste_buffer) sfree(term->paste_buffer); term->paste_pos = term->paste_hold = term->paste_len = 0; - term->paste_buffer = snewn(len, wchar_t); + term->paste_buffer = snewn(len + 12, wchar_t); + + if (term->bracketed_paste) { + memcpy(term->paste_buffer, L"\033[200~", 6 * sizeof(wchar_t)); + term->paste_len += 6; + } p = q = data; while (p < data + len) { @@ -5720,6 +5729,12 @@ void term_do_paste(Terminal *term) q = p; } + if (term->bracketed_paste) { + memcpy(term->paste_buffer + term->paste_len, + L"\033[201~", 6 * sizeof(wchar_t)); + term->paste_len += 6; + } + /* Assume a small paste will be OK in one go. */ if (term->paste_len < 256) { if (term->ldisc)