aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2024-02-15 23:20:23 +0100
committerGabriel A. Giovanini <mail@gabrielgio.me>2024-02-15 23:20:23 +0100
commitc573d3b7954296d95a0f8a79b8ac2ca261d86a02 (patch)
treec7bc998800ffc625d5c57c8aa17da5edb2ebeefd
parent0667e9c0a77791b739bcb359b0ed9f33abbc4133 (diff)
downloaddict-c573d3b7954296d95a0f8a79b8ac2ca261d86a02.tar.gz
dict-c573d3b7954296d95a0f8a79b8ac2ca261d86a02.tar.bz2
dict-c573d3b7954296d95a0f8a79b8ac2ca261d86a02.zip
fix: Add better support for utf-8
-rw-r--r--CMakeLists.txt2
-rw-r--r--main.c12
-rw-r--r--ui.c40
-rw-r--r--ui.h13
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)
diff --git a/main.c b/main.c
index f95a465..026b4b5 100644
--- a/main.c
+++ b/main.c
@@ -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);
diff --git a/ui.c b/ui.c
index 2e779e3..9762859 100644
--- a/ui.c
+++ b/ui.c
@@ -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);
+ }
+}
diff --git a/ui.h b/ui.h
index 8035d6f..cdc0539 100644
--- a/ui.h
+++ b/ui.h
@@ -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);
+