diff options
author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-02-15 23:20:23 +0100 |
---|---|---|
committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-02-15 23:20:23 +0100 |
commit | c573d3b7954296d95a0f8a79b8ac2ca261d86a02 (patch) | |
tree | c7bc998800ffc625d5c57c8aa17da5edb2ebeefd | |
parent | 0667e9c0a77791b739bcb359b0ed9f33abbc4133 (diff) | |
download | dict-c573d3b7954296d95a0f8a79b8ac2ca261d86a02.tar.gz dict-c573d3b7954296d95a0f8a79b8ac2ca261d86a02.tar.bz2 dict-c573d3b7954296d95a0f8a79b8ac2ca261d86a02.zip |
fix: Add better support for utf-8
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | main.c | 12 | ||||
-rw-r--r-- | ui.c | 40 | ||||
-rw-r--r-- | ui.h | 13 |
4 files changed, 62 insertions, 5 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index fd48cee..f253be6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ add_executable(dict ${src}) target_compile_options(dict PRIVATE -Wall -Wextra -Wpedantic -Werror) target_include_directories(dict PUBLIC "${PROJECT_BINARY_DIR}") -target_link_libraries(dict sqlite3 ncursesw m) +target_link_libraries(dict sqlite3 ncursesw m c) add_subdirectory(ext) @@ -11,14 +11,15 @@ unsigned int count_lines(FILE* file); int load_or_save_db(sqlite3 *pInMemory, const char *zFilename, int isSave); int main() { - Data *data = new_data(":memory:"); bootstrap(data); setlocale(LC_ALL, ""); - initscr(); noecho(); cbreak(); + nonl(); + keypad(stdscr, TRUE); + initscr(); FILE *f = fopen("dict.txt", "r"); unsigned int lines = count_lines(f); @@ -43,6 +44,13 @@ int main() { clear(); refresh(); + + TEXT_BOX *box = new_text_box(stdscr, 10); + get_char(box); + + clear(); + refresh(); + endwin(); free_data(data); @@ -1,6 +1,10 @@ -#include "math.h" +#define NCURSES_WIDECHAR 1 + #include <ncurses.h> +#include <math.h> #include <stdlib.h> +#include <string.h> +#include <wchar.h> #include "ui.h" const char *uload = "█"; @@ -42,3 +46,37 @@ void bar_step(PROGRESS_BAR* bar, float step){ wmove(bar->scr,0,0); wrefresh(bar->scr); } + + +TEXT_BOX* new_text_box(WINDOW* scr, int length) { + TEXT_BOX *text = (TEXT_BOX*)malloc(sizeof(TEXT_BOX)); + text->scr = scr; + text->length = length; + text->current = 0; + text->text = malloc(sizeof(char)*(length+1)); + memset(text->text, '\0', length); + return text; +} + +void get_char(TEXT_BOX* text) { + while(1){ + wchar_t c; + get_wch((wint_t*)&c); + + switch(c) { + case KEY_BACKSPACE: + if (text->current > 0) { + text->text[text->current--] = '\0'; + } + break; + default: + if (text->current < (text->length-2)) { + text->text[text->current] = c; + text->text[++text->current] = '\0'; + } + } + move(0,0); + wrefresh(text->scr); + wprintw(text->scr, "%*ls", text->current,text->text); + } +} @@ -7,5 +7,16 @@ typedef struct progress_bar { } PROGRESS_BAR; PROGRESS_BAR* new_progress_bar(WINDOW*, float); - void bar_step(PROGRESS_BAR*, float); + + +typedef struct text_box { + wchar_t *text; + int length; + int current; + WINDOW *scr; +} TEXT_BOX; + +TEXT_BOX* new_text_box(WINDOW*, int); +void get_char(TEXT_BOX* text); + |