From 4e7e1e21b3eb29a5505dc69f668cf5f9481bd7d5 Mon Sep 17 00:00:00 2001 From: verdant Date: Mon, 3 Aug 2026 15:51:39 +0800 Subject: Add utils.h utils.c to provide get_input() Print the prompt at the status bar, handle character, backspace, enter and escape. Modify the variable buf in place. --- src/utils.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/utils.c (limited to 'src/utils.c') diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..9137e21 --- /dev/null +++ b/src/utils.c @@ -0,0 +1,50 @@ +#include "utils.h" +#include "fm.h" +#include "log.h" +#include +#include + +int +get_input(const char *prompt, char *buf) +{ + if (!prompt || !buf) + return -1; + + int ch; + int i = 0; + curs_set(1); + + while ((ch = getch())) { + werase(status_window->win); + + if (i < 0) + i = 0; + + if (ch >= 32 && ch <= 126) { + buf[i++] = ch; + } else if (ch == KEY_BACKSPACE || ch == 127 || ch == '\b') { + buf[--i] = '\0'; + } else if (ch == 27) { + werase(status_window->win); + curs_set(0); + return 0; + } else if (ch == KEY_ENTER || ch == '\n' || ch == '\r') { + if (i < PATH_MAX) { + buf[++i] = '\0'; + curs_set(0); + return 0; + } else { + return -1; + } + } + + mvwprintw(status_window->win, 0, 0, "%s%s", prompt, buf); + wrefresh(status_window->win); + + LOG_WRITE_INFO("%s", buf); + } + + curs_set(0); + + return 0; +} -- cgit v1.2.3