From owner-freebsd-bugs Sat Jan 11 5:20: 6 2003 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 18DC937B401 for ; Sat, 11 Jan 2003 05:20:02 -0800 (PST) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1478543F3F for ; Sat, 11 Jan 2003 05:20:01 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.6/8.12.6) with ESMTP id h0BDK0NS021427 for ; Sat, 11 Jan 2003 05:20:00 -0800 (PST) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.6/8.12.6/Submit) id h0BDK0is021426; Sat, 11 Jan 2003 05:20:00 -0800 (PST) Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6F97B37B401 for ; Sat, 11 Jan 2003 05:19:06 -0800 (PST) Received: from email.seznam.cz (smtp.seznam.cz [212.80.76.43]) by mx1.FreeBSD.org (Postfix) with SMTP id EE04743F5B for ; Sat, 11 Jan 2003 05:19:04 -0800 (PST) (envelope-from neologism@seznam.cz) Received: (qmail 92405 invoked from network); 11 Jan 2003 13:18:49 -0000 Received: from ppp2779.brno.worldonline.cz (HELO variola) (212.90.229.108) by smtp.seznam.cz with SMTP; 11 Jan 2003 13:18:49 -0000 Received: from roman by variola with local (Exim 3.13 #1 (Debian)) id 18XLXe-0000AQ-00 for ; Sat, 11 Jan 2003 14:19:14 +0100 Message-Id: <20030111141913.A637@variola> Date: Sat, 11 Jan 2003 14:19:13 +0100 From: neologism Reply-To: neologism@seznam.cz To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: kern/46973: syscons virtual terminals switching feature Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org >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