Thumbnail

rani/cscroll.git

Clone URL: https://git.buni.party/rani/cscroll.git

commit ee6f9344e7e5e4189800a24f2baae778b9c56a72 Author: rani <clagv.randomgames@gmail.com> Date: Mon Feb 06 19:13:01 2023 +0000 Added support for backspace key in curses_getline() diff --git a/include/io.h b/include/io.h index 81840ce..6a63e81 100644 --- a/include/io.h +++ b/include/io.h @@ -7212 +7214 @@ enum colors {  };    enum keys { - CTRL_B = 2, - CTRL_C = 3, - CTRL_F = 6, - CTRL_N = 14, - CTRL_P = 16, - CTRL_Z = 26, + CTRL_B = 2, + CTRL_C = 3, + CTRL_F = 6, + CTRL_N = 14, + CTRL_P = 16, + CTRL_Z = 26, + KEY_ESC = 27, + KEY_DEL = 127,  };     diff --git a/src/io.c b/src/io.c index 237bfef..e57d34e 100644 --- a/src/io.c +++ b/src/io.c @@ -2817 +2817 @@ char * prompt(char * t, char ** args) {   delwin(w);   return args[cursor - 1];   case 'q': - case 27: + case KEY_ESC:   goto done;   default:   break; @@ -30514 +30514 @@ char * curses_getline(char * p) {     char * inp = malloc(128);   size_t l = 0; - char c; + int c;   while ((c = getch()) != '\n') {   if ((l + 1) % 127 == 0) {   // add 1 byte to prevent buffer overrun on deletion   inp = realloc(inp, l + 129);   }   - if (c == 127) { + if (c == KEY_DEL || c == KEY_BACKSPACE) {   if (l > 0) l--;   } else if (isprint(c)) {   // do not bother with non-printable characters @@ -32910 +32910 @@ char * curses_getline(char * p) {   for (size_t i = l - COLS + plen + 1; i < l; i++) {   addch(inp[i]);   } - } else if ((unsigned)x != plen && c == 127) { + } else if ((unsigned)x != plen && (c == KEY_DEL || c == KEY_BACKSPACE)) {   mvaddch(y, x - 1, ' ');   move(y, x - 1); - } else if (c != 127) { + } else if (c != KEY_DEL && c != KEY_BACKSPACE) {   addch(c);   }