9front - general discussion about 9front
 help / color / mirror / Atom feed
* vt: improve chording
@ 2020-10-13  1:09 ori
  2020-10-13  2:13 ` [9front] " Marshall Conover
  0 siblings, 1 reply; 2+ messages in thread
From: ori @ 2020-10-13  1:09 UTC (permalink / raw)
  To: 9front

This change modifies the vt chording code so you can switch
chords without fully releasing the chord -- so, you can drag
a selection, snarf it, and paste it without jarring full
releases between each step.

diff -r 44eae9a7e98b sys/src/cmd/vt/main.c
--- a/sys/src/cmd/vt/main.c	Sun Oct 11 14:59:49 2020 +0200
+++ b/sys/src/cmd/vt/main.c	Mon Oct 12 18:05:04 2020 -0700
@@ -67,6 +67,7 @@
 int	peekc;
 int	blocksel = 0;
 int	cursoron = 1;
+int	chording = 0;
 int	hostclosed = 0;
 Menu	menu2;
 Menu	menu3;
@@ -156,6 +157,7 @@
 struct funckey *fk, *appfk;
 
 /* functions */
+int	input(void);
 int	waitchar(void);
 void	waitio(void);
 int	rcvchar(void);
@@ -648,144 +650,157 @@
 }
 
 int
-waitchar(void)
+input(void)
 {
 	static char echobuf[4*BSIZE];
 
+Again:
+	if(resize_flag)
+		resized();
+	if(backp)
+		return(0);
+	if(snarffp) {
+		int c;
+
+		if((c = Bgetrune(snarffp)) < 0) {
+			Bterm(snarffp);
+			snarffp = nil;
+			goto Again;
+		}
+		kbdchar = c;
+	}
+	if(kbdchar) {
+		if(backc){
+			backc = 0;
+			backup(backc);
+		}
+		if(blocked)
+			resize_flag = 1;
+		if(cs->raw) {
+			switch(kbdchar){
+			case Kins:
+				if(!sendfk("insert"))
+					goto Send;
+				break;
+			case Kdel:
+				if(!sendfk("delete"))
+					goto Send;
+				break;
+			case Khome:
+				if(!sendfk("home"))
+					goto Send;
+				break;
+			case Kend:
+				if(!sendfk("end"))
+					goto Send;
+				break;
+
+			case Kpgup:
+				sendfk("page up");
+				break;
+			case Kpgdown:
+				sendfk("page down");
+				break;
+
+			case Kup:
+				sendfk("up key");
+				break;
+			case Kdown:
+				sendfk("down key");
+				break;
+			case Kleft:
+				sendfk("left key");
+				break;
+			case Kright:
+				sendfk("right key");
+				break;
+
+			case KF|1:
+				sendfk("F1");
+				break;
+			case KF|2:
+				sendfk("F2");
+				break;
+			case KF|3:
+				sendfk("F3");
+				break;
+			case KF|4:
+				sendfk("F4");
+				break;
+			case KF|5:
+				sendfk("F5");
+				break;
+			case KF|6:
+				sendfk("F6");
+				break;
+			case KF|7:
+				sendfk("F7");
+				break;
+			case KF|8:
+				sendfk("F8");
+				break;
+			case KF|9:
+				sendfk("F9");
+				break;
+			case KF|10:
+				sendfk("F10");
+				break;
+			case KF|11:
+				sendfk("F11");
+				break;
+			case KF|12:
+				sendfk("F12");
+				break;
+
+			case '\n':
+				echobuf[0] = '\r';
+				sendnchars(1, echobuf);
+				break;
+			case '\r':
+				echobuf[0] = '\n';
+				sendnchars(1, echobuf);
+				break;
+			default:
+			Send:
+				sendnchars(runetochar(echobuf, &kbdchar), echobuf);
+				break;
+			}
+		} else {
+			switch(canon(echobuf, kbdchar)){
+			case SCROLL:
+				if(!blocked)
+					bigscroll();
+				break;
+			default:
+				strcat(echo_input,echobuf);
+			}
+		}
+		blocked = 0;
+		kbdchar = 0;
+		goto Again;
+	} else if(nbrecv(kc->c, &kbdchar))
+		goto Again;
+	if(!blocked){
+		if(host_avail())
+			return(rcvchar());
+		free(hostbuf);
+		hostbufp = hostbuf = nbrecvp(hc[1]);
+		if(host_avail() && nrand(32))
+			return(rcvchar());
+	}
+	return -1;
+}
+
+
+int
+waitchar(void)
+{
+	int r;
+
 	for(;;) {
-		if(resize_flag)
-			resized();
-		if(backp)
-			return(0);
-		if(snarffp) {
-			int c;
-
-			if((c = Bgetrune(snarffp)) < 0) {
-				Bterm(snarffp);
-				snarffp = nil;
-				continue;
-			}
-			kbdchar = c;
-		}
-		if(kbdchar) {
-			if(backc){
-				backc = 0;
-				backup(backc);
-			}
-			if(blocked)
-				resize_flag = 1;
-			if(cs->raw) {
-				switch(kbdchar){
-				case Kins:
-					if(!sendfk("insert"))
-						goto Send;
-					break;
-				case Kdel:
-					if(!sendfk("delete"))
-						goto Send;
-					break;
-				case Khome:
-					if(!sendfk("home"))
-						goto Send;
-					break;
-				case Kend:
-					if(!sendfk("end"))
-						goto Send;
-					break;
-
-				case Kpgup:
-					sendfk("page up");
-					break;
-				case Kpgdown:
-					sendfk("page down");
-					break;
-
-				case Kup:
-					sendfk("up key");
-					break;
-				case Kdown:
-					sendfk("down key");
-					break;
-				case Kleft:
-					sendfk("left key");
-					break;
-				case Kright:
-					sendfk("right key");
-					break;
-
-				case KF|1:
-					sendfk("F1");
-					break;
-				case KF|2:
-					sendfk("F2");
-					break;
-				case KF|3:
-					sendfk("F3");
-					break;
-				case KF|4:
-					sendfk("F4");
-					break;
-				case KF|5:
-					sendfk("F5");
-					break;
-				case KF|6:
-					sendfk("F6");
-					break;
-				case KF|7:
-					sendfk("F7");
-					break;
-				case KF|8:
-					sendfk("F8");
-					break;
-				case KF|9:
-					sendfk("F9");
-					break;
-				case KF|10:
-					sendfk("F10");
-					break;
-				case KF|11:
-					sendfk("F11");
-					break;
-				case KF|12:
-					sendfk("F12");
-					break;
-
-				case '\n':
-					echobuf[0] = '\r';
-					sendnchars(1, echobuf);
-					break;
-				case '\r':
-					echobuf[0] = '\n';
-					sendnchars(1, echobuf);
-					break;
-				default:
-				Send:
-					sendnchars(runetochar(echobuf, &kbdchar), echobuf);
-					break;
-				}
-			} else {
-				switch(canon(echobuf, kbdchar)){
-				case SCROLL:
-					if(!blocked)
-						bigscroll();
-					break;
-				default:
-					strcat(echo_input,echobuf);
-				}
-			}
-			blocked = 0;
-			kbdchar = 0;
-			continue;
-		} else if(nbrecv(kc->c, &kbdchar))
-			continue;
-		if(!blocked){
-			if(host_avail())
-				return(rcvchar());
-			free(hostbuf);
-			hostbufp = hostbuf = nbrecvp(hc[1]);
-			if(host_avail() && nrand(32))
-				return(rcvchar());
-		}
+		r = input();
+		if(r != -1)
+			return r;
 		drawscreen();
 		drawcursor();
 		waitio();
@@ -817,7 +832,7 @@
 		flushimage(display, 1);
 	switch(alt(a)){
 	case AMOUSE:
-		if(button1())
+		if(button1() || chording)
 			selecting();
 		else if(button2() || button3())
 			readmenu();
@@ -1111,11 +1126,14 @@
 		drawscreen();
 		readmouse(mc);
 	} while(button1());
+
+	chording = 1;
 	switch(mc->buttons & 0x7){
+	case 0:	chording = 0;	break;
 	case 3:	snarfsel();	break;
 	case 5:	paste();	break;
 	}
-	while(mc->buttons&7) readmouse(mc);
+	drawscreen();
 	t = -mc->msec;
 }
 



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [9front] vt: improve chording
  2020-10-13  1:09 vt: improve chording ori
@ 2020-10-13  2:13 ` Marshall Conover
  0 siblings, 0 replies; 2+ messages in thread
From: Marshall Conover @ 2020-10-13  2:13 UTC (permalink / raw)
  To: 9front

A non-contributing comment, but this is sick.


On Mon, Oct 12, 2020 at 9:10 PM <ori@eigenstate.org> wrote:
>
> This change modifies the vt chording code so you can switch
> chords without fully releasing the chord -- so, you can drag
> a selection, snarf it, and paste it without jarring full
> releases between each step.
>
> diff -r 44eae9a7e98b sys/src/cmd/vt/main.c
> --- a/sys/src/cmd/vt/main.c     Sun Oct 11 14:59:49 2020 +0200
> +++ b/sys/src/cmd/vt/main.c     Mon Oct 12 18:05:04 2020 -0700
> @@ -67,6 +67,7 @@
>  int    peekc;
>  int    blocksel = 0;
>  int    cursoron = 1;
> +int    chording = 0;
>  int    hostclosed = 0;
>  Menu   menu2;
>  Menu   menu3;
> @@ -156,6 +157,7 @@
>  struct funckey *fk, *appfk;
>
>  /* functions */
> +int    input(void);
>  int    waitchar(void);
>  void   waitio(void);
>  int    rcvchar(void);
> @@ -648,144 +650,157 @@
>  }
>
>  int
> -waitchar(void)
> +input(void)
>  {
>         static char echobuf[4*BSIZE];
>
> +Again:
> +       if(resize_flag)
> +               resized();
> +       if(backp)
> +               return(0);
> +       if(snarffp) {
> +               int c;
> +
> +               if((c = Bgetrune(snarffp)) < 0) {
> +                       Bterm(snarffp);
> +                       snarffp = nil;
> +                       goto Again;
> +               }
> +               kbdchar = c;
> +       }
> +       if(kbdchar) {
> +               if(backc){
> +                       backc = 0;
> +                       backup(backc);
> +               }
> +               if(blocked)
> +                       resize_flag = 1;
> +               if(cs->raw) {
> +                       switch(kbdchar){
> +                       case Kins:
> +                               if(!sendfk("insert"))
> +                                       goto Send;
> +                               break;
> +                       case Kdel:
> +                               if(!sendfk("delete"))
> +                                       goto Send;
> +                               break;
> +                       case Khome:
> +                               if(!sendfk("home"))
> +                                       goto Send;
> +                               break;
> +                       case Kend:
> +                               if(!sendfk("end"))
> +                                       goto Send;
> +                               break;
> +
> +                       case Kpgup:
> +                               sendfk("page up");
> +                               break;
> +                       case Kpgdown:
> +                               sendfk("page down");
> +                               break;
> +
> +                       case Kup:
> +                               sendfk("up key");
> +                               break;
> +                       case Kdown:
> +                               sendfk("down key");
> +                               break;
> +                       case Kleft:
> +                               sendfk("left key");
> +                               break;
> +                       case Kright:
> +                               sendfk("right key");
> +                               break;
> +
> +                       case KF|1:
> +                               sendfk("F1");
> +                               break;
> +                       case KF|2:
> +                               sendfk("F2");
> +                               break;
> +                       case KF|3:
> +                               sendfk("F3");
> +                               break;
> +                       case KF|4:
> +                               sendfk("F4");
> +                               break;
> +                       case KF|5:
> +                               sendfk("F5");
> +                               break;
> +                       case KF|6:
> +                               sendfk("F6");
> +                               break;
> +                       case KF|7:
> +                               sendfk("F7");
> +                               break;
> +                       case KF|8:
> +                               sendfk("F8");
> +                               break;
> +                       case KF|9:
> +                               sendfk("F9");
> +                               break;
> +                       case KF|10:
> +                               sendfk("F10");
> +                               break;
> +                       case KF|11:
> +                               sendfk("F11");
> +                               break;
> +                       case KF|12:
> +                               sendfk("F12");
> +                               break;
> +
> +                       case '\n':
> +                               echobuf[0] = '\r';
> +                               sendnchars(1, echobuf);
> +                               break;
> +                       case '\r':
> +                               echobuf[0] = '\n';
> +                               sendnchars(1, echobuf);
> +                               break;
> +                       default:
> +                       Send:
> +                               sendnchars(runetochar(echobuf, &kbdchar), echobuf);
> +                               break;
> +                       }
> +               } else {
> +                       switch(canon(echobuf, kbdchar)){
> +                       case SCROLL:
> +                               if(!blocked)
> +                                       bigscroll();
> +                               break;
> +                       default:
> +                               strcat(echo_input,echobuf);
> +                       }
> +               }
> +               blocked = 0;
> +               kbdchar = 0;
> +               goto Again;
> +       } else if(nbrecv(kc->c, &kbdchar))
> +               goto Again;
> +       if(!blocked){
> +               if(host_avail())
> +                       return(rcvchar());
> +               free(hostbuf);
> +               hostbufp = hostbuf = nbrecvp(hc[1]);
> +               if(host_avail() && nrand(32))
> +                       return(rcvchar());
> +       }
> +       return -1;
> +}
> +
> +
> +int
> +waitchar(void)
> +{
> +       int r;
> +
>         for(;;) {
> -               if(resize_flag)
> -                       resized();
> -               if(backp)
> -                       return(0);
> -               if(snarffp) {
> -                       int c;
> -
> -                       if((c = Bgetrune(snarffp)) < 0) {
> -                               Bterm(snarffp);
> -                               snarffp = nil;
> -                               continue;
> -                       }
> -                       kbdchar = c;
> -               }
> -               if(kbdchar) {
> -                       if(backc){
> -                               backc = 0;
> -                               backup(backc);
> -                       }
> -                       if(blocked)
> -                               resize_flag = 1;
> -                       if(cs->raw) {
> -                               switch(kbdchar){
> -                               case Kins:
> -                                       if(!sendfk("insert"))
> -                                               goto Send;
> -                                       break;
> -                               case Kdel:
> -                                       if(!sendfk("delete"))
> -                                               goto Send;
> -                                       break;
> -                               case Khome:
> -                                       if(!sendfk("home"))
> -                                               goto Send;
> -                                       break;
> -                               case Kend:
> -                                       if(!sendfk("end"))
> -                                               goto Send;
> -                                       break;
> -
> -                               case Kpgup:
> -                                       sendfk("page up");
> -                                       break;
> -                               case Kpgdown:
> -                                       sendfk("page down");
> -                                       break;
> -
> -                               case Kup:
> -                                       sendfk("up key");
> -                                       break;
> -                               case Kdown:
> -                                       sendfk("down key");
> -                                       break;
> -                               case Kleft:
> -                                       sendfk("left key");
> -                                       break;
> -                               case Kright:
> -                                       sendfk("right key");
> -                                       break;
> -
> -                               case KF|1:
> -                                       sendfk("F1");
> -                                       break;
> -                               case KF|2:
> -                                       sendfk("F2");
> -                                       break;
> -                               case KF|3:
> -                                       sendfk("F3");
> -                                       break;
> -                               case KF|4:
> -                                       sendfk("F4");
> -                                       break;
> -                               case KF|5:
> -                                       sendfk("F5");
> -                                       break;
> -                               case KF|6:
> -                                       sendfk("F6");
> -                                       break;
> -                               case KF|7:
> -                                       sendfk("F7");
> -                                       break;
> -                               case KF|8:
> -                                       sendfk("F8");
> -                                       break;
> -                               case KF|9:
> -                                       sendfk("F9");
> -                                       break;
> -                               case KF|10:
> -                                       sendfk("F10");
> -                                       break;
> -                               case KF|11:
> -                                       sendfk("F11");
> -                                       break;
> -                               case KF|12:
> -                                       sendfk("F12");
> -                                       break;
> -
> -                               case '\n':
> -                                       echobuf[0] = '\r';
> -                                       sendnchars(1, echobuf);
> -                                       break;
> -                               case '\r':
> -                                       echobuf[0] = '\n';
> -                                       sendnchars(1, echobuf);
> -                                       break;
> -                               default:
> -                               Send:
> -                                       sendnchars(runetochar(echobuf, &kbdchar), echobuf);
> -                                       break;
> -                               }
> -                       } else {
> -                               switch(canon(echobuf, kbdchar)){
> -                               case SCROLL:
> -                                       if(!blocked)
> -                                               bigscroll();
> -                                       break;
> -                               default:
> -                                       strcat(echo_input,echobuf);
> -                               }
> -                       }
> -                       blocked = 0;
> -                       kbdchar = 0;
> -                       continue;
> -               } else if(nbrecv(kc->c, &kbdchar))
> -                       continue;
> -               if(!blocked){
> -                       if(host_avail())
> -                               return(rcvchar());
> -                       free(hostbuf);
> -                       hostbufp = hostbuf = nbrecvp(hc[1]);
> -                       if(host_avail() && nrand(32))
> -                               return(rcvchar());
> -               }
> +               r = input();
> +               if(r != -1)
> +                       return r;
>                 drawscreen();
>                 drawcursor();
>                 waitio();
> @@ -817,7 +832,7 @@
>                 flushimage(display, 1);
>         switch(alt(a)){
>         case AMOUSE:
> -               if(button1())
> +               if(button1() || chording)
>                         selecting();
>                 else if(button2() || button3())
>                         readmenu();
> @@ -1111,11 +1126,14 @@
>                 drawscreen();
>                 readmouse(mc);
>         } while(button1());
> +
> +       chording = 1;
>         switch(mc->buttons & 0x7){
> +       case 0: chording = 0;   break;
>         case 3: snarfsel();     break;
>         case 5: paste();        break;
>         }
> -       while(mc->buttons&7) readmouse(mc);
> +       drawscreen();
>         t = -mc->msec;
>  }
>
>


-- 
Have a good day,

Marshall Conover


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-10-13  2:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-13  1:09 vt: improve chording ori
2020-10-13  2:13 ` [9front] " Marshall Conover

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).