Skip site navigation (1)Skip section navigation (2)
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>