Date: Sat, 11 Jan 2003 14:19:13 +0100 From: neologism <neologism@seznam.cz> To: FreeBSD-gnats-submit@FreeBSD.org Subject: kern/46973: syscons virtual terminals switching feature Message-ID: <20030111141913.A637@variola>
next in thread | raw e-mail | index | archive | help
>Number: 46973
>Category: kern
>Synopsis: syscons virtual terminals switching feature
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: update
>Submitter-Id: current-users
>Arrival-Date: Sat Jan 11 05:20:00 PST 2003
>Closed-Date:
>Last-Modified:
>Originator: neologism
>Release: FreeBSD 4.6-RELEASE i386
>Organization:
none
>Environment:
System: FreeBSD variola 4.6-RELEASE FreeBSD 4.6-RELEASE #28: Sat Jan 11 13:33:05 GMT 2003 root@variola:/mnt/linux/bsd/compile/MYKERNEL i386
>Description:
This patches implement kernel+user space side of last selected terminal
feature. If you want to switch between lets say terminals 4 and 7 you are now
allowed to do so by pressing just one key. Similar feature as linux
"Last_Console" is.
>How-To-Repeat:
apply this patches, compile (both kernel and kbdcontrol), assign "lscr" to some
key and try...
>Fix:
diff -urN syscons/syscons.c /sys/dev/syscons/syscons.c
--- syscons/syscons.c Mon Apr 8 13:37:26 2002
+++ /sys/dev/syscons/syscons.c Sat Jan 11 13:44:46 2003
@@ -98,6 +98,7 @@
static int saver_mode = CONS_NO_SAVER; /* LKM/user saver */
static int run_scrn_saver = FALSE; /* should run the saver? */
static long scrn_blank_time = 0; /* screen saver timeout value */
+static int last_sc = 0; /* last screen */
#if NSPLASH > 0
static int scrn_blanked; /* # of blanked screen */
static int sticky_splash = FALSE;
@@ -3167,6 +3168,7 @@
i = (i + 1)%sc->vtys) {
struct tty *tp = VIRTUAL_TTY(sc, sc->first_vty + i);
if (ISTTYOPEN(tp)) {
+ last_sc = scp->index;
sc_switch_scr(scp->sc, sc->first_vty + i);
break;
}
@@ -3180,14 +3182,27 @@
i = (i + sc->vtys - 1)%sc->vtys) {
struct tty *tp = VIRTUAL_TTY(sc, sc->first_vty + i);
if (ISTTYOPEN(tp)) {
+ last_sc = scp->index;
sc_switch_scr(scp->sc, sc->first_vty + i);
break;
}
}
break;
-
+
+ case LAST:
+ {
+ struct tty *tp = VIRTUAL_TTY(sc, sc->first_vty + last_sc);
+ if (ISTTYOPEN(tp)) {
+ sc_switch_scr(scp->sc, sc->first_vty + last_sc);
+ last_sc = scp->index;
+ break;
+ }
+ }
+ break;
+
default:
if (KEYCHAR(c) >= F_SCR && KEYCHAR(c) <= L_SCR) {
+ last_sc = scp->index;
sc_switch_scr(scp->sc, sc->first_vty + KEYCHAR(c) - F_SCR);
break;
}
diff -urN kbdcontrol/kbdcontrol.c kbdcontrol.new/kbdcontrol.c
--- kbdcontrol/kbdcontrol.c Fri Jun 8 18:27:32 2001
+++ kbdcontrol.new/kbdcontrol.c Sat Jan 11 13:39:56 2003
@@ -168,6 +168,8 @@
return NEXT | 0x100;
case TPREV:
return PREV | 0x100;
+ case TLAST:
+ return LAST | 0x100;
case TRCTR:
return RCTR | 0x100;
case TRALT:
@@ -387,6 +389,9 @@
case PREV | 0x100:
fprintf(fp, " pscr ");
break;
+ case LAST | 0x100:
+ fprintf(fp, " lscr ");
+ break;
case RCTR | 0x100:
fprintf(fp, " rctrl ");
break;
@@ -586,6 +591,9 @@
case PREV:
printf(" PREV, ");
break;
+ case LAST:
+ printf(" LAST, ");
+ break;
case RCTR:
printf(" RCTR, ");
break;
diff -urN kbdcontrol/kbdmap.5 kbdcontrol.new/kbdmap.5
--- kbdcontrol/kbdmap.5 Wed Aug 1 12:01:28 2001
+++ kbdcontrol.new/kbdmap.5 Sat Jan 11 13:39:56 2003
@@ -208,6 +208,8 @@
Act as switch to next screen.
.It pscr
Act as switch to previous screen.
+.It lscr
+Act as switch to last selected screen.
.It scr Ns Ar N
Switch to screen
.Ar N ,
diff -urN kbdcontrol/lex.h kbdcontrol.new/lex.h
--- kbdcontrol/lex.h Fri Jun 8 18:27:32 2001
+++ kbdcontrol.new/lex.h Sat Jan 11 13:39:56 2003
@@ -63,6 +63,7 @@
#define TRALTA 288
#define THALT 289
#define TPDWN 290
+#define TLAST 291
extern int number;
extern char letter;
diff -urN kbdcontrol/lex.l kbdcontrol.new/lex.l
--- kbdcontrol/lex.l Sun Oct 29 16:59:32 2000
+++ kbdcontrol.new/lex.l Sat Jan 11 13:39:56 2003
@@ -52,6 +52,7 @@
lctrl|ctrl { return TLCTR; }
nscr { return TNEXT; }
pscr { return TPREV; }
+lscr { return TLAST; }
rctrl { return TRCTR; }
ralt { return TRALT; }
alock { return TALK; }
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030111141913.A637>
