void termpty_text_save_top(Termpty *ty, Termcell *cells, ssize_t w_max) { Termsave *ts; ssize_t w; if (ty->backmax <= 0) return; termpty_save_freeze(); w = termpty_line_length(cells, w_max); ts = termpty_save_new(w); termpty_cell_copy(ty, cells, ts->cell, w); if (!ty->back) ty->back = calloc(1, sizeof(Termsave *) * ty->backmax); if (ty->back[ty->backpos]) { Termsave *ts2; ts2 = termpty_save_extract(ty->back[ty->backpos]); termpty_save_free(ts2); ty->back[ty->backpos] = NULL; } ty->back[ty->backpos] = ts; ty->backpos++; if (ty->backpos >= ty->backmax) ty->backpos = 0; ty->backscroll_num++; if (ty->backscroll_num >= ty->backmax) ty->backscroll_num = ty->backmax; termpty_save_thaw(); }
Termsave * termpty_save_new(Termsave *ts, int w) { termpty_save_free(ts); Termcell *cells = calloc(1, w * sizeof(Termcell)); if (!cells ) return NULL; ts->cells = cells; ts->w = w; return ts; }
void termpty_reset_state(Termpty *ty) { int backsize; ty->cursor_state.cx = 0; ty->cursor_state.cy = 0; ty->termstate.scroll_y1 = 0; ty->termstate.scroll_y2 = 0; ty->termstate.had_cr_x = 0; ty->termstate.had_cr_y = 0; termpty_reset_att(&(ty->termstate.att)); ty->termstate.charset = 0; ty->termstate.charsetch = 'B'; ty->termstate.chset[0] = 'B'; ty->termstate.chset[1] = 'B'; ty->termstate.chset[2] = 'B'; ty->termstate.chset[3] = 'B'; ty->termstate.multibyte = 0; ty->termstate.alt_kp = 0; ty->termstate.insert = 0; ty->termstate.appcursor = 0; ty->termstate.wrap = 1; ty->termstate.wrapnext = 0; ty->termstate.crlf = 0; ty->termstate.had_cr = 0; ty->termstate.send_bs = 0; ty->termstate.reverse = 0; ty->termstate.no_autorepeat = 0; ty->termstate.cjk_ambiguous_wide = 0; ty->termstate.hide_cursor = 0; ty->mouse_mode = MOUSE_OFF; ty->mouse_ext = MOUSE_EXT_NONE; ty->bracketed_paste = 0; ty->backlog_beacon.screen_y = 0; ty->backlog_beacon.backlog_y = 0; termpty_backlog_lock(); if (ty->back) { size_t i; for (i = 0; i < ty->backsize; i++) termpty_save_free(&ty->back[i]); free(ty->back); ty->back = NULL; } ty->backpos = 0; backsize = ty->backsize; ty->backsize = 0; termpty_backlog_size_set(ty, backsize); termpty_backlog_unlock(); }