]> pd.if.org Git - pd_readline/blobdiff - pd_readline2.c
More progress.
[pd_readline] / pd_readline2.c
index 02b943d6f87be14760eeaf1be7c64570b4bf68d7..63a31e797e7c527c372eef46128a416ce429a782 100644 (file)
@@ -9,6 +9,8 @@
 /*  The code can now distinguish between a printable key    */ \r
 /*  and a key that should not be printed.                   */ \r
 \r
+/*  Backspace key, and left and right arrow keys now work.  */   \r
+\r
 /*  It will still be some time before this is a REAL        */ \r
 /*  readline, but we are "on the way"......                 */     \r
 /*  This code is released to the public domain.             */ \r
@@ -138,20 +140,44 @@ int main(void)
       /* F2 is 27, 79, 81.  */  \r
       /* F3 is 27, 79, 82.  */  \r
       /* F4 is 27, 79, 83.  */  \r
-           \r
-                \r
+      \r
+      /* Backspace */ \r
+      else if(key == 127) \r
+      { \r
+                buffer[bufpnt].key = key;  \r
+                /* Move 1 char to left */  \r
+                printf("\033[1D");\r
+                printf("\040"); \r
+                printf("\033[1D");  \r
+                bufpnt += 1;                   \r
+         }           \r
+                           \r
       else if(key == 27)        \r
-          {  \r
-                         \r
+          {                      \r
                          buffer[bufpnt].esc = 1;                        \r
                          key = getch(); \r
               if(key == 91)               \r
               buffer[bufpnt].lbr = 1;                \r
               key = getch(); \r
-              if( (key >= 65) && (key <= 68) )  \r
+              if(key == 65) /* Up arrow */ \r
+               {                                \r
+                                buffer[bufpnt].key = key;                                            \r
+               }       \r
+               if(key == 66) /* Down arrow */ \r
+               {                                \r
+                                buffer[bufpnt].key = key;                                            \r
+               }        \r
+               if(key == 67) /* Left arrow */ \r
+               {                                \r
+                                buffer[bufpnt].key = key; \r
+                                printf("\033[1C");   \r
+               }\r
+                if(key == 68) /* Right arrow */ \r
                {                                \r
-                                buffer[bufpnt].key = key;                  \r
-               }                                 \r
+                                buffer[bufpnt].key = key; \r
+                                printf("\033[1D");                                                                                                                                               \r
+               }\r
+                                                 \r
             bufpnt += 1;           \r
           } \r
               \r
@@ -163,7 +189,7 @@ int main(void)
                         puts("\n");  \r
                         int j ; \r
                   /* Print the array of structs. */ \r
-                    for (j=0; j<20; j++)       \r
+                    for (j=0; j<bufpnt; j++)   \r
                     { \r
                            printf("Fnkey: %d ", buffer[j].fnkey  ) ; \r
                            printf("Ctrl:  %d ", buffer[j].ctrl   ) ;   \r