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
This commit is contained in:
parent
0b229c80ae
commit
98f7cf022c
@ -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
|
||||
|
@ -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);
|
||||
@ -466,6 +472,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
|
||||
vtbuf_sethistory_size(struct vt_buf *vb, unsigned int size)
|
||||
{
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user