aboutsummaryrefslogtreecommitdiff
path: root/input_field.c
diff options
context:
space:
mode:
authorRiley Beckett <rbeckettvt@gmail.com>2025-10-19 00:26:59 -0400
committerRiley Beckett <rbeckettvt@gmail.com>2025-10-19 00:26:59 -0400
commit56c5a1da4de4a7511882b2a9d4bae608aca1e61b (patch)
treee041ad1554d1f3c66f06e199ee9a93ff74d91f86 /input_field.c
parentbe014d7b8df14596530ef8f9e7d7a8afae281c5c (diff)
change allow-free-result to exact-match
Diffstat (limited to 'input_field.c')
-rw-r--r--input_field.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/input_field.c b/input_field.c
index 31ae627..1601204 100644
--- a/input_field.c
+++ b/input_field.c
@@ -5,6 +5,7 @@
#include "graphics.h"
void filter_items(client_state* state) {
+ if (!state->items) return;
array_clear(state->filtered_items);
// get null terminated input buffer
@@ -12,14 +13,14 @@ void filter_items(client_state* state) {
char input_buffer_string[len + 1];
memcpy(input_buffer_string, state->input_buffer, len);
input_buffer_string[len] = '\0';
-
+
// add all strings with substring
for (uint32_t i = 0; i < array_size(state->items); ++i) {
if (strstr(state->items[i].text, input_buffer_string) != NULL) {
array_add(state->filtered_items, i);
}
}
-
+
// select item
if (array_size(state->filtered_items) > 0) state->selected_filtered_item = 0;
else state->selected_filtered_item = -1;
@@ -54,7 +55,7 @@ bool type_key(client_state* state, xkb_keysym_t keysym) {
array_free(state->input_buffer);
state->input_buffer = array_new(char, len);
memcpy(state->input_buffer, selected, len);
-
+
update_text_buffer(state);
}
return true;
@@ -105,15 +106,13 @@ bool type_key(client_state* state, xkb_keysym_t keysym) {
}
void submit_line(client_state* state) {
- if (state->selected_filtered_item == -1) {
- if (state->allow_free_result) {
- printf("%.*s\n", (int)array_size(state->input_buffer), state->input_buffer);
- } else {
- return;
- }
- } else {
+ if (state->exact_match) {
+ if (state->selected_filtered_item == -1) return;
printf("%s\n", state->items[state->filtered_items[state->selected_filtered_item]].text);
}
+ else {
+ printf("%.*s\n", (int)array_size(state->input_buffer), state->input_buffer);
+ }
state->running = false;
state->exit_code = EXIT_SUCCESS;
}