aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorBruce Evans <bde@FreeBSD.org>2017-08-19 23:13:33 +0000
committerBruce Evans <bde@FreeBSD.org>2017-08-19 23:13:33 +0000
commit36e19a0f8caab25792184de0ae1450ed12a2eb55 (patch)
tree340b56e34c4af19d23c1c5c9fcf68d00397624fa /sys
parent4ea1f4f5eaa9722ffe01aa493e0b60b818e4f14e (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/syscons/scterm-teken.c8
-rw-r--r--sys/dev/syscons/syscons.c18
-rw-r--r--sys/sys/consio.h1
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)