code: plan9front

Download patch

ref: fad1b3f7f77f08764f0e32f8ce18bee16da3aa69
parent: e85aa1089d1d4954aa949cd05c5b6b9c3fca596c
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Fri Jul 16 19:36:40 EDT 2021

kbdfs: allow to escape ctlr-alt-del with shift for vmx and vnc.

--- a/sys/man/8/kbdfs
+++ b/sys/man/8/kbdfs
@@ -179,6 +179,32 @@
 .B $console
 environment variable is set. (see
 .IR plan9.ini (8)).
+.PP
+Holding
+.LR Ctrl
++
+.LR Alt
+and then pressing the
+.LR Del
+key will
+trigger a reboot of the terminal.
+To forward this sequence downstream,
+.LR Shift
++
+.LR Ctrl
++
+.LR Alt
+and then pressing
+.LR Del
+will cause to send a
+.LR Shift
+up before the
+.LR Del
+key.
+This is usefull for programs like
+.IR vnc (1)
+and
+.IR vmx (1).
 .SS Keyboard
 A read on the
 .BR kbd
--- a/sys/src/cmd/aux/kbdfs/kbdfs.c
+++ b/sys/src/cmd/aux/kbdfs/kbdfs.c
@@ -371,6 +371,13 @@
 	threadexitsall(nil);
 }
 
+void
+shiftup(void)
+{
+	Key key = { .down = 0, .r = Kshift, .b = Kshift };
+	send(keychan, &key);
+}
+
 /*
  * Scan code processing
  */
@@ -433,8 +440,12 @@
 	if(scan->caps && key.r<='z' && key.r>='a')
 		key.r += 'A' - 'a';
 
-	if(scan->ctl && scan->alt && key.r == Kdel)
-		reboot();
+	if(scan->ctl && scan->alt && key.r == Kdel){
+		if(scan->shift)
+			shiftup();
+		else
+			reboot();
+	}
 
 	if(key.b)
 		send(keychan, &key);