st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit 3cb67937811b34fcc600b4eb96bd8fdd392ecab4
parent cf147ae9da0221123596b749d4742d06f0ea643b
Author: Matthias-Christian Ott <ott@enolink.de>
Date:   Sun, 15 Jun 2008 09:19:22 +0200

correct buffering

Diffstat:
Mstd.c | 31++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)
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;
 }