diff options
| author | Bruce Evans <bde@FreeBSD.org> | 2017-08-19 23:13:33 +0000 |
|---|---|---|
| committer | Bruce Evans <bde@FreeBSD.org> | 2017-08-19 23:13:33 +0000 |
| commit | 36e19a0f8caab25792184de0ae1450ed12a2eb55 (patch) | |
| tree | 340b56e34c4af19d23c1c5c9fcf68d00397624fa /sys | |
| parent | 4ea1f4f5eaa9722ffe01aa493e0b60b818e4f14e (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/dev/syscons/scterm-teken.c | 8 | ||||
| -rw-r--r-- | sys/dev/syscons/syscons.c | 18 | ||||
| -rw-r--r-- | sys/sys/consio.h | 1 |
3 files changed, 23 insertions, 4 deletions
diff --git a/sys/dev/syscons/scterm-teken.c b/sys/dev/syscons/scterm-teken.c index 617a72b633a4..4aa3330f1de2 100644 --- a/sys/dev/syscons/scterm-teken.c +++ b/sys/dev/syscons/scterm-teken.c @@ -684,7 +684,6 @@ scteken_param(void *arg, int cmd, unsigned int value) static int tcattrs[] = { CONS_RESET_CURSOR | CONS_LOCAL_CURSOR, /* normal */ CONS_HIDDEN_CURSOR | CONS_LOCAL_CURSOR, /* invisible */ - CONS_BLINK_CURSOR | CONS_LOCAL_CURSOR, /* very visible */ }; scr_stat *scp = arg; int flags, n, v0, v1, v2; @@ -727,6 +726,13 @@ scteken_param(void *arg, int cmd, unsigned int value) case TP_SETLOCALCURSOR: if (value < sizeof(tcattrs) / sizeof(tcattrs[0])) sc_change_cursor_shape(scp, tcattrs[value], -1, -1); + else if (value == 2) { + sc_change_cursor_shape(scp, + CONS_RESET_CURSOR | CONS_LOCAL_CURSOR, -1, -1); + flags = scp->base_curs_attr.flags ^ CONS_BLINK_CURSOR; + sc_change_cursor_shape(scp, + flags | CONS_LOCAL_CURSOR, -1, -1); + } break; case TP_SHOWCURSOR: if (value != 0) diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c index bf610c993027..e14beb050413 100644 --- a/sys/dev/syscons/syscons.c +++ b/sys/dev/syscons/syscons.c @@ -943,13 +943,19 @@ sctty_ioctl(struct tty *tp, u_long cmd, caddr_t data, struct thread *td) return 0; case CONS_GETCURSORSHAPE: /* get cursor shape (new interface) */ - switch (((int *)data)[0] & CONS_LOCAL_CURSOR) { + switch (((int *)data)[0] & (CONS_DEFAULT_CURSOR | CONS_LOCAL_CURSOR)) { case 0: cap = &sc->curs_attr; break; case CONS_LOCAL_CURSOR: cap = &scp->base_curs_attr; break; + case CONS_DEFAULT_CURSOR: + cap = &sc->dflt_curs_attr; + break; + case CONS_DEFAULT_CURSOR | CONS_LOCAL_CURSOR: + cap = &scp->dflt_curs_attr; + break; } ((int *)data)[1] = cap->base; ((int *)data)[2] = cap->height; @@ -3030,7 +3036,10 @@ change_cursor_shape(scr_stat *scp, int flags, int base, int height) if (flags & CONS_RESET_CURSOR) scp->base_curs_attr = scp->dflt_curs_attr; - else + else if (flags & CONS_DEFAULT_CURSOR) { + sc_adjust_ca(&scp->dflt_curs_attr, flags, base, height); + scp->base_curs_attr = scp->dflt_curs_attr; + } else sc_adjust_ca(&scp->base_curs_attr, flags, base, height); if ((scp == scp->sc->cur_scp) && !ISGRAPHSC(scp)) { @@ -3062,7 +3071,10 @@ sc_change_cursor_shape(scr_stat *scp, int flags, int base, int height) sc = scp->sc; if (flags & CONS_RESET_CURSOR) sc->curs_attr = sc->dflt_curs_attr; - else + else if (flags & CONS_DEFAULT_CURSOR) { + sc_adjust_ca(&sc->dflt_curs_attr, flags, base, height); + sc->curs_attr = sc->dflt_curs_attr; + } else sc_adjust_ca(&sc->curs_attr, flags, base, height); for (i = sc->first_vty; i < sc->first_vty + sc->vtys; ++i) { diff --git a/sys/sys/consio.h b/sys/sys/consio.h index bc479f59d01b..8604d4a55a3c 100644 --- a/sys/sys/consio.h +++ b/sys/sys/consio.h @@ -187,6 +187,7 @@ typedef struct mouse_info mouse_info_t; #define CONS_HIDDEN_CURSOR (1 << 2) #define CONS_CURSOR_ATTRS (CONS_BLINK_CURSOR | CONS_CHAR_CURSOR | \ CONS_HIDDEN_CURSOR) +#define CONS_DEFAULT_CURSOR (1 << 28) #define CONS_SHAPEONLY_CURSOR (1 << 29) #define CONS_RESET_CURSOR (1 << 30) #define CONS_LOCAL_CURSOR (1U << 31) |
