correct buffering - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 3cb67937811b34fcc600b4eb96bd8fdd392ecab4
 (DIR) parent cf147ae9da0221123596b749d4742d06f0ea643b
 (HTM) Author: Matthias-Christian Ott <ott@enolink.de>
       Date:   Sun, 15 Jun 2008 09:19:22 +0200
       
       correct buffering
       
       Diffstat:
         M std.c                               |      31 ++++++++++++++++---------------
       
       1 file changed, 16 insertions(+), 15 deletions(-)
       ---
 (DIR) diff --git a/std.c b/std.c
       @@ -85,7 +85,7 @@ movea(int x, int y) {
                y = MAX(y, lines);
                cx = x;
                cy = y;
       -        cmd("s %d,%d", x, y);
       +        cmd("seek(%d,%d)", x, y);
        }
        
        void
       @@ -186,10 +186,10 @@ parseesc(void) {
                                        case 0:
                                        case 22:
                                                if(bold)
       -                                                cmd("b");
       +                                                cmd("bold");
                                        case 1:
                                                if(!bold)
       -                                                cmd("b");
       +                                                cmd("bold");
                                                break;
                                        }
                                }
       @@ -204,7 +204,7 @@ parseesc(void) {
        
        void
        scroll(int l) {
       -        cmd("s %d, %d", cx, cy + l);
       +        cmd("seek(%d,%d)", cx, cy + l);
        }
        
        void
       @@ -279,17 +279,18 @@ main(int argc, char *argv[]) {
                        r = select(ptm + 1, &rfds, NULL, NULL, NULL);
                        if(r == -1)
                                eprintn("error, cannot select");
       -                if(FD_ISSET(ptm, &rfds)) {
       -                        c = getch();
       -                        switch(c) {
       -                        case '\033':
       -                                parseesc();
       -                                break;
       -                        default:
       -                                putchar(c);
       -                        }
       -                        fflush(stdout);
       -                }
       +                if(FD_ISSET(ptm, &rfds))
       +                        do {
       +                                c = getch();
       +                                switch(c) {
       +                                case '\033':
       +                                        parseesc();
       +                                        break;
       +                                default:
       +                                        putchar(c);
       +                                }
       +                                fflush(stdout);
       +                        } while(rbuf.i < rbuf.n);
                }
                return 0;
        }