From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ot1-f47.google.com ([209.85.210.47]) by ewsd; Mon Oct 12 22:13:52 -0400 2020 Received: by mail-ot1-f47.google.com with SMTP id f37so17603454otf.12 for <9front@9front.org>; Mon, 12 Oct 2020 19:13:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=wrfSKrv2DMK1k5LBrhWtClqmpJzdVxkDWX4qKjNNE3o=; b=rXTCMcU0nl+D74sdvCQlg+0mctChPH2lNrXAXjoiKXpNFEOZDHohdY8Y6hNFItT90p oYHS0ZWlGWK3EtNF7CplsKSoiIA6Oe4q5FMjJow+Rj4IMyNuTIh0RCukWYJ42c/oMIEw MAqu8xj4OQqM2I8AKLGGe/mpDgjHQLq3fdrr6JuYbaY//8hWKFUMUj+X9kVa2dIQj3XK odQ9wEQ9bU8FrYyuM40qf53hI1hHo78EvmosaL4BGSrPFswm7zZE8GKbEXBtRVP1Bk0p ElTohEdJGbKc90lrC605VSkFQswFsCElduEy2XqmZN6NhraQi4yqy3QQI+CAErZ3pxP/ uE6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=wrfSKrv2DMK1k5LBrhWtClqmpJzdVxkDWX4qKjNNE3o=; b=d5j9ox3q7A4AAQXuOWmgITv8Gg9Jt8BBBnyVtezquZ/m9/o29nPKQNeHMAlK3dwYbu YmEIHuoICFZhCxU8dbemCIjbCe2r4wWka2MAIsM9uv/t5sjnraf3qkfh3ASTU0W0DIeO OFyK9W0/IMGddf9pdxV2LHAjGcJ5LYIGidEkoHr/b2M0iUlEtOwzAHLyy+X2pFwDyFbp o8P8QOe8Db5UrGOxJfxh5vM066RsXOWBzThvv+7o7Fzfhw/fhUWRHEyR+gu9NH0R5Fq8 bfU8x/jiODNxmrB6Fj3BGhSaWL7ZbLYQ5AMTTQwLCSZDxGj4i61+F/f2HBH++184VTi6 amOg== X-Gm-Message-State: AOAM533jWfH6quILz9UcYpFKY2a0+GjFCn+Al5isRZzjaQLpDQECWCk0 ltSTlxcQu+p4rStHDgkuxYimFRt4YUQg4aO343FQu6T9q2s= X-Google-Smtp-Source: ABdhPJwr7ybxBPfskqbQXQtNc8pR/sCmtayIZVY66vdqyiYAjhv/gB8bDGs9aR2t72DZjL7KBDrFi6HB9b/OrD0XSTg= X-Received: by 2002:a9d:5503:: with SMTP id l3mr20604074oth.309.1602555227129; Mon, 12 Oct 2020 19:13:47 -0700 (PDT) MIME-Version: 1.0 References: <86C92F8F7EE0642E736345D405DB3DE4@eigenstate.org> In-Reply-To: <86C92F8F7EE0642E736345D405DB3DE4@eigenstate.org> From: Marshall Conover Date: Mon, 12 Oct 2020 22:13:36 -0400 Message-ID: Subject: Re: [9front] vt: improve chording To: 9front@9front.org Content-Type: text/plain; charset="UTF-8" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: information realtime-based locator A non-contributing comment, but this is sick. On Mon, Oct 12, 2020 at 9:10 PM 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