Date: Thu, 28 May 2020 21:22:30 +0000 (UTC) From: "Jason A. Harmening" <jah@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r361601 - head/sys/dev/vt Message-ID: <202005282122.04SLMVrK069426@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jah Date: Thu May 28 21:22:30 2020 New Revision: 361601 URL: https://svnweb.freebsd.org/changeset/base/361601 Log: vt(4): Add support for `vidcontrol -C' Extract scrollback buffer initialization into a common routine, used both during vt(4) init and in handling the CONS_CLRHIST ioctl. PR: 224436 Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D24815 Modified: head/sys/dev/vt/vt.h head/sys/dev/vt/vt_buf.c head/sys/dev/vt/vt_core.c Modified: head/sys/dev/vt/vt.h ============================================================================== --- head/sys/dev/vt/vt.h Thu May 28 21:19:44 2020 (r361600) +++ head/sys/dev/vt/vt.h Thu May 28 21:22:30 2020 (r361601) @@ -231,6 +231,7 @@ void vtbuf_scroll_mode(struct vt_buf *vb, int yes); void vtbuf_dirty(struct vt_buf *vb, const term_rect_t *area); void vtbuf_undirty(struct vt_buf *, term_rect_t *); void vtbuf_sethistory_size(struct vt_buf *, unsigned int); +void vtbuf_clearhistory(struct vt_buf *); int vtbuf_iscursor(const struct vt_buf *vb, int row, int col); void vtbuf_cursor_visibility(struct vt_buf *, int); #ifndef SC_NO_CUTPASTE Modified: head/sys/dev/vt/vt_buf.c ============================================================================== --- head/sys/dev/vt/vt_buf.c Thu May 28 21:19:44 2020 (r361600) +++ head/sys/dev/vt/vt_buf.c Thu May 28 21:22:30 2020 (r361601) @@ -416,13 +416,26 @@ vtbuf_init_rows(struct vt_buf *vb) vb->vb_rows[r] = &vb->vb_buffer[r * vb->vb_scr_size.tp_col]; } -void -vtbuf_init_early(struct vt_buf *vb) +static void +vtbuf_do_clearhistory(struct vt_buf *vb) { term_rect_t rect; const teken_attr_t *a; - term_char_t c; + term_char_t ch; + a = teken_get_curattr(&vb->vb_terminal->tm_emulator); + ch = TCOLOR_FG(a->ta_fgcolor) | TCOLOR_BG(a->ta_bgcolor); + + rect.tr_begin.tp_row = rect.tr_begin.tp_col = 0; + rect.tr_end.tp_col = vb->vb_scr_size.tp_col; + rect.tr_end.tp_row = vb->vb_history_size; + + vtbuf_do_fill(vb, &rect, VTBUF_SPACE_CHAR(ch)); +} + +void +vtbuf_init_early(struct vt_buf *vb) +{ vb->vb_flags |= VBF_CURSOR; vb->vb_roffset = 0; vb->vb_curroffset = 0; @@ -432,14 +445,7 @@ vtbuf_init_early(struct vt_buf *vb) vb->vb_mark_end.tp_col = 0; vtbuf_init_rows(vb); - rect.tr_begin.tp_row = rect.tr_begin.tp_col = 0; - rect.tr_end.tp_col = vb->vb_scr_size.tp_col; - rect.tr_end.tp_row = vb->vb_history_size; - - a = teken_get_curattr(&vb->vb_terminal->tm_emulator); - c = TCOLOR_FG((term_char_t)a->ta_fgcolor) | - TCOLOR_BG((term_char_t)a->ta_bgcolor); - vtbuf_do_fill(vb, &rect, VTBUF_SPACE_CHAR(c)); + vtbuf_do_clearhistory(vb); vtbuf_make_undirty(vb); if ((vb->vb_flags & VBF_MTX_INIT) == 0) { mtx_init(&vb->vb_lock, "vtbuf", NULL, MTX_SPIN); @@ -464,6 +470,14 @@ vtbuf_init(struct vt_buf *vb, const term_pos_t *p) } vtbuf_init_early(vb); +} + +void +vtbuf_clearhistory(struct vt_buf *vb) +{ + VTBUF_LOCK(vb); + vtbuf_do_clearhistory(vb); + VTBUF_UNLOCK(vb); } void Modified: head/sys/dev/vt/vt_core.c ============================================================================== --- head/sys/dev/vt/vt_core.c Thu May 28 21:19:44 2020 (r361600) +++ head/sys/dev/vt/vt_core.c Thu May 28 21:22:30 2020 (r361601) @@ -2329,7 +2329,10 @@ skip_thunk: if (*(int *)data != vd->vd_curwindow->vw_buf.vb_history_size) vtbuf_sethistory_size(&vd->vd_curwindow->vw_buf, *(int *)data); - return 0; + return (0); + case CONS_CLRHIST: + vtbuf_clearhistory(&vd->vd_curwindow->vw_buf); + return (0); case CONS_GET: /* XXX */ *(int *)data = M_CG640x480;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202005282122.04SLMVrK069426>