X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/35a46e796117ee8813f6ad1a045fb0ac608b4347..62ddb51e0424dd4bd1098b024f2427959aefc729:/terminal.c diff --git a/terminal.c b/terminal.c index c24926ae..92c3f032 100644 --- a/terminal.c +++ b/terminal.c @@ -65,6 +65,8 @@ #define has_compat(x) ( ((CL_##x)&term->compatibility_level) != 0 ) +char *EMPTY_WINDOW_TITLE = ""; + const char sco2ansicolour[] = { 0, 4, 2, 6, 1, 5, 3, 7 }; #define sel_nl_sz (sizeof(sel_nl)/sizeof(wchar_t)) @@ -1211,7 +1213,8 @@ static void power_on(Terminal *term, int clear) term->in_vbell = FALSE; term->cursor_on = 1; term->big_cursor = 0; - term->default_attr = term->save_attr = term->curr_attr = ATTR_DEFAULT; + term->default_attr = term->save_attr = + term->alt_save_attr = term->curr_attr = ATTR_DEFAULT; term->term_editing = term->term_echoing = FALSE; term->app_cursor_keys = term->cfg.app_cursor; term->app_keypad_keys = term->cfg.app_keypad; @@ -1812,6 +1815,10 @@ static void swap_screen(Terminal *term, int which, int reset, int keep_cur_pos) if (!reset && !keep_cur_pos) term->save_csattr = term->alt_save_csattr; term->alt_save_csattr = t; + t = term->save_attr; + if (!reset && !keep_cur_pos) + term->save_attr = term->alt_save_attr; + term->alt_save_attr = t; t = term->save_utf; if (!reset && !keep_cur_pos) term->save_utf = term->alt_save_utf; @@ -3341,10 +3348,17 @@ static void term_out(Terminal *term) break; case 'J': /* ED: erase screen or parts of it */ { - unsigned int i = def(term->esc_args[0], 0) + 1; - if (i > 3) - i = 0; - erase_lots(term, FALSE, !!(i & 2), !!(i & 1)); + unsigned int i = def(term->esc_args[0], 0); + if (i == 3) { + /* Erase Saved Lines (xterm) + * This follows Thomas Dickey's xterm. */ + term_clrsb(term); + } else { + i++; + if (i > 3) + i = 0; + erase_lots(term, FALSE, !!(i & 2), !!(i & 1)); + } } term->disptop = 0; seen_disp_event(term); @@ -3779,8 +3793,11 @@ static void term_out(Terminal *term) break; case 20: if (term->ldisc && - !term->cfg.no_remote_qtitle) { - p = get_window_title(term->frontend, TRUE); + term->cfg.remote_qtitle_action != TITLE_NONE) { + if(term->cfg.remote_qtitle_action == TITLE_REAL) + p = get_window_title(term->frontend, TRUE); + else + p = EMPTY_WINDOW_TITLE; len = strlen(p); ldisc_send(term->ldisc, "\033]L", 3, 0); ldisc_send(term->ldisc, p, len, 0); @@ -3789,8 +3806,11 @@ static void term_out(Terminal *term) break; case 21: if (term->ldisc && - !term->cfg.no_remote_qtitle) { - p = get_window_title(term->frontend,FALSE); + term->cfg.remote_qtitle_action != TITLE_NONE) { + if(term->cfg.remote_qtitle_action == TITLE_REAL) + p = get_window_title(term->frontend, FALSE); + else + p = EMPTY_WINDOW_TITLE; len = strlen(p); ldisc_send(term->ldisc, "\033]l", 3, 0); ldisc_send(term->ldisc, p, len, 0); @@ -6421,7 +6441,7 @@ int term_get_userpass_input(Terminal *term, prompts_t *p, */ { int i; - for (i = 0; i < p->n_prompts; i++) + for (i = 0; i < (int)p->n_prompts; i++) memset(p->prompts[i]->result, 0, p->prompts[i]->result_len); } }