From 90d6b2a866c6da29921dfae3d684203fd232ea74 Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Wed, 22 Oct 2025 12:26:19 -0400 Subject: some improvements --- array.c | 17 +++++++++++++++++ array.h | 1 + input_field.c | 2 +- main.c | 10 ++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/array.c b/array.c index 7120899..4345346 100644 --- a/array.c +++ b/array.c @@ -43,6 +43,23 @@ void* array_add_(void* array, size_t item_size) { return &(info[1]); } +void array_resize(void* array, size_t size) { + array_info* info = &((array_info*)array)[-1]; + info->size = size; + if (size > info->capacity) { + info->capacity = size; + + // round up to next power of 2 + info->capacity--; + info->capacity |= info->capacity >> 1; + info->capacity |= info->capacity >> 2; + info->capacity |= info->capacity >> 4; + info->capacity |= info->capacity >> 8; + info->capacity |= info->capacity >> 16; + info->capacity++; + } +} + void array_print(void* array) { array_info* info = &((array_info*)array)[-1]; printf( "size: %lu\n" diff --git a/array.h b/array.h index 4975261..1672ac6 100644 --- a/array.h +++ b/array.h @@ -10,6 +10,7 @@ typedef struct { } array_info; array_info* array_new_(size_t item_size, size_t size); +void array_resize(void* array, size_t size); void array_print(void* array); void array_pop(void* array); void* array_add_(void* array, size_t item_size); diff --git a/input_field.c b/input_field.c index aa522dc..6ca9a1b 100644 --- a/input_field.c +++ b/input_field.c @@ -112,7 +112,7 @@ bool type_key(client_state* state, xkb_keysym_t keysym) { update_text_buffer(state); free(buffer); - return false; + return true; } // submit line diff --git a/main.c b/main.c index c3b7eb0..714e3a5 100644 --- a/main.c +++ b/main.c @@ -1,3 +1,5 @@ +#include +#include #include #include #include @@ -37,6 +39,14 @@ int main(int argc, char* argv[]) { state.input_buffer = array_new(char, 0); state.filtered_items = array_new(item_display_t, 0); + // check locale + setlocale(LC_ALL, ""); + const char *encoding = nl_langinfo(CODESET); + if (strcmp(encoding, "UTF-8") != 0) { + fprintf(stderr, "Cannot continue because encoding (%s), is not UTF-8.", encoding); + return EXIT_FAILURE; + } + // read input parse_args(&state, argc, argv); read_stdin(&state); -- cgit v1.2.3