9front - general discussion about 9front
 help / color / mirror / Atom feed
From: Marshall Conover <marzhall.o@gmail.com>
To: 9front@9front.org
Subject: Re: [9front] vt: improve chording
Date: Mon, 12 Oct 2020 22:13:36 -0400	[thread overview]
Message-ID: <CAK0pxsFpPPuxY5cZci8JHjmsHAEDHEr7usEwG6XpGLhR2Ny44w@mail.gmail.com> (raw)
In-Reply-To: <86C92F8F7EE0642E736345D405DB3DE4@eigenstate.org>

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


      reply	other threads:[~2020-10-13  2:13 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-13  1:09 ori
2020-10-13  2:13 ` Marshall Conover [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAK0pxsFpPPuxY5cZci8JHjmsHAEDHEr7usEwG6XpGLhR2Ny44w@mail.gmail.com \
    --to=marzhall.o@gmail.com \
    --cc=9front@9front.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).