From b5fb37cc81740be4e8e08b04d5b489d79ba170d6 Mon Sep 17 00:00:00 2001 From: dam Date: Mon, 3 Oct 2022 23:24:17 +0000 Subject: Prototype code for go-to function. --- main.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/main.c b/main.c index cff3639..092b74d 100644 --- a/main.c +++ b/main.c @@ -706,8 +706,9 @@ void initialize_tui() { setlocale(LC_ALL, "C.UTF-8"); // Sets locale for C library functions; Allows usage of UTF-8. initscr(); // Start curses mode. cbreak(); // Line buffering disabled; pass on everty thing to me. - keypad(stdscr, TRUE); // I need that nifty F1 + keypad(stdscr, TRUE); // I need that nifty F1. curs_set(0); // Set cursor invisible. + noecho(); // Disable echoing input characters. // Initialize pairs of colors. start_color(); @@ -1090,8 +1091,10 @@ int main(int argc, char *argv[]) { addstr(string_buffer); // Get new task name. + echo(); curs_set(1); mvgetnstr(selected_task_row, 1, string_buffer, MAX_TASK_NAME-1); + noecho(); curs_set(0); // Apply new task name. @@ -1107,7 +1110,7 @@ int main(int argc, char *argv[]) { if (selected_task == NULL || selected_task == active_task) { break; } - + refresh(); const char *message = "Press enter to delete."; const size_t length = strlen(message); int left_padding = ((size_x - 2) - length) / 2; @@ -1125,6 +1128,44 @@ int main(int argc, char *argv[]) { break; } + case 'g': + case 'G': { + if (selected_task == NULL) { + break; + } + + // TODO WIP + + const char *message = " Go to: "; + const int length = strlen(message); + int available = layouts[1].columns[0].width - length; + sprintf(string_buffer, "%s%*s", message, available, ""); + + attron(COLOR_PAIR(selected_task_theme) | A_BOLD); + mvaddch(size_y - 1, 0, ACS_DIAMOND); + mvaddstr(size_y - 1, 1, string_buffer); + + // Get line number. + echo(); + curs_set(1); + mvgetnstr(size_y - 1, 1 + length, string_buffer, available-1); + noecho(); + curs_set(0); + + attrset(A_NORMAL); + + if (is_empty_string(string_buffer) == true) { + break; + } + + intmax_t input = strtoimax(string_buffer, NULL, 10) - 1; + db->selected_task = input < 0 ? 0 : + input >= db->count ? db->count - 1 : + input; + + break; + } + case KEY_F(4): { if (selected_task == NULL) { break; -- cgit v1.2.3