X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/b03db5b6836720d38860cc5fca352fce7cf48c24..7b56a33fca0f6c9130188db0d2eb475de9380b02:/terminal.c diff --git a/terminal.c b/terminal.c index d23cbe91..e30784b9 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 */ @@ -5015,11 +5019,13 @@ static void do_paint(Terminal *term, Context ctx, int may_optimise) break_run = ((tattr ^ attr) & term->attr_mask) != 0; +#ifdef USES_VTLINE_HACK /* Special hack for VT100 Linedraw glyphs */ if ((tchar >= 0x23BA && tchar <= 0x23BD) || (j > 0 && (newline[j-1].chr >= 0x23BA && newline[j-1].chr <= 0x23BD))) break_run = TRUE; +#endif /* * Separate out sequences of characters that have the @@ -5696,7 +5702,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 +5731,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)