URI: 
       tButtons 4 and 5 - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 09a5f197726c79ef7221cc6f83527c65a6bb1ca3
   DIR parent c16f1f733b5748211db515fa19dd821065fd6fc7
  HTML Author: rsc <devnull@localhost>
       Date:   Wed,  9 Jun 2004 14:01:54 +0000
       
       Buttons 4 and 5
       
       Diffstat:
         M src/cmd/samterm/main.c              |      41 ++++++++++++++++++++++++++++---
       
       1 file changed, 37 insertions(+), 4 deletions(-)
       ---
   DIR diff --git a/src/cmd/samterm/main.c b/src/cmd/samterm/main.c
       t@@ -435,6 +435,19 @@ flushtyping(int clearesc)
        #define        SCROLLKEY        Kdown
        #define        BACKSCROLLKEY        Kup
        #define        ESC                0x1B
       +#define        HOMEKEY        Khome
       +#define        ENDKEY        Kend
       +#define        PAGEUP        Kpgup
       +#define        PAGEDOWN        Kpgdown
       +
       +int
       +nontypingkey(c)
       +{
       +        return c==SCROLLKEY || c==BACKSCROLLKEY
       +                || c==LEFTARROW || c==RIGHTARROW
       +                || c==HOMEKEY || c==ENDKEY
       +                || c==PAGEUP || c==PAGEDOWN;
       +}
        
        void
        type(Flayer *l, int res)        /* what a bloody mess this is */
       t@@ -448,7 +461,7 @@ type(Flayer *l, int res)        /* what a bloody mess this is */
        
                scrollkey = 0;
                if(res == RKeyboard)
       -                scrollkey = (qpeekc()==SCROLLKEY || qpeekc()==BACKSCROLLKEY);        /* ICK */
       +                scrollkey = nontypingkey(qpeekc());        /* ICK */
        
                if(hostlock || t->lock){
                        kbdblock();
       t@@ -463,7 +476,7 @@ type(Flayer *l, int res)        /* what a bloody mess this is */
                backspacing = 0;
                while((c = kbdchar())>0){
                        if(res == RKeyboard){
       -                        if(c==SCROLLKEY || c==BACKSCROLLKEY || c==ESC)
       +                        if(nontypingkey(c) || c==ESC)
                                        break;
                                /* backspace, ctrl-u, ctrl-w, del */
                                if(c=='\b' || c==0x15 || c==0x17 || c==0x7F){
       t@@ -491,16 +504,36 @@ type(Flayer *l, int res)        /* what a bloody mess this is */
                                flushtyping(0);
                        onethird(l, a);
                }
       -        if(c == SCROLLKEY){
       +        if(c==SCROLLKEY || c==PAGEDOWN){
                        flushtyping(0);
                        center(l, l->origin+l->f.nchars+1);
                        /* backspacing immediately after outcmd(): sorry */
       -        }else if(c == BACKSCROLLKEY){
       +        }else if(c==BACKSCROLLKEY || c==PAGEUP){
                        flushtyping(0);
                        a0 = l->origin-l->f.nchars;
                        if(a0 < 0)
                                a0 = 0;
                        center(l, a0);
       +        }else if(c == RIGHTARROW){
       +                flushtyping(0);
       +                a0 = l->p0;
       +                if(a0 < t->rasp.nrunes)
       +                        a0++;
       +                flsetselect(l, a0, a0);
       +                center(l, a0);
       +        }else if(c == LEFTARROW){
       +                flushtyping(0);
       +                a0 = l->p0;
       +                if(a0 > 0)
       +                        a0--;
       +                flsetselect(l, a0, a0);
       +                center(l, a0);
       +        }else if(c == HOMEKEY){
       +                flushtyping(0);
       +                center(l, 0);
       +        }else if(c == ENDKEY){
       +                flushtyping(0);
       +                center(l, t->rasp.nrunes);
                }else if(backspacing && !hostlock){
                        if(l->f.p0>0 && a>0){
                                switch(c){