aboutsummaryrefslogtreecommitdiff
path: root/input_field.c
diff options
context:
space:
mode:
authorJack Jamison <jackqjamison@gmail.com>2025-11-05 20:15:24 -0500
committerJack Jamison <jackqjamison@gmail.com>2025-11-06 19:45:21 -0500
commit784f7000f29498e6c111afa78a53950989ee94b6 (patch)
tree8bf46ef56d4e4376227354c722c8c5bad0e6b4b3 /input_field.c
parenta5f6176f7ff33c0200a0686f4ba4ce264d578287 (diff)
more keybinds and fixes
Diffstat (limited to 'input_field.c')
-rw-r--r--input_field.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/input_field.c b/input_field.c
index 78e0a05..6a4dd54 100644
--- a/input_field.c
+++ b/input_field.c
@@ -13,7 +13,7 @@ int orderless_compare(const void *a, const void *b) {
return ((item_display_t*)a)->perc < ((item_display_t*)b)->perc;
}
-void filter_items(client_state* state) {
+void refilter_items(client_state* state) {
if (!state->items) return;
// get null terminated input buffer
@@ -80,12 +80,12 @@ void filter_items(client_state* state) {
}
void update_text_buffer(client_state* state) {
- filter_items(state);
+ refilter_items(state);
destroy_text_buffer(&state->input_buffer_grafix);
init_text_buffer(state, &state->input_buffer_grafix, state->input_buffer, array_size(state->input_buffer));
}
-key_repeat_t type_key(client_state* state, xkb_keysym_t keysym) {
+key_repeat_t execute_keypress(client_state* state, xkb_keysym_t keysym) {
bool ctrl = xkb_state_mod_name_is_active(state->xkb_state, XKB_MOD_NAME_CTRL, XKB_STATE_MODS_EFFECTIVE);
bool alt = xkb_state_mod_name_is_active(state->xkb_state, XKB_MOD_NAME_ALT, XKB_STATE_MODS_EFFECTIVE);
@@ -97,6 +97,7 @@ key_repeat_t type_key(client_state* state, xkb_keysym_t keysym) {
case XKB_KEY_f: return forward_word(state);
case XKB_KEY_b: return backward_word(state);
}
+ return KEY_NO_REPEAT;
}
else if (ctrl) {
switch (keysym) {
@@ -107,8 +108,8 @@ key_repeat_t type_key(client_state* state, xkb_keysym_t keysym) {
case XKB_KEY_n: return select_next(state);
case XKB_KEY_p: return select_previous(state);
- case XKB_KEY_e: return goto_end(state);
case XKB_KEY_a: return goto_start(state);
+ case XKB_KEY_e: return goto_end(state);
case XKB_KEY_f: return forward_char(state);
case XKB_KEY_b: return backward_char(state);
@@ -121,6 +122,7 @@ key_repeat_t type_key(client_state* state, xkb_keysym_t keysym) {
case XKB_KEY_BackSpace: return kill_to_start(state);
case XKB_KEY_Delete: return clear_input(state);
}
+ return KEY_NO_REPEAT;
}
else if (alt) {
switch (keysym) {
@@ -128,7 +130,10 @@ key_repeat_t type_key(client_state* state, xkb_keysym_t keysym) {
case XKB_KEY_BackSpace: return delete_word_backward(state);
case XKB_KEY_f: return forward_word(state);
case XKB_KEY_b: return backward_word(state);
+ case XKB_KEY_less: return select_first(state);
+ case XKB_KEY_greater: return select_last(state);
}
+ return KEY_NO_REPEAT;
}
switch (keysym) {
case XKB_KEY_Tab: return insert_selected(state);
@@ -139,6 +144,10 @@ key_repeat_t type_key(client_state* state, xkb_keysym_t keysym) {
case XKB_KEY_BackSpace:
case XKB_KEY_Delete:
return delete_char_backward(state);
+ case XKB_KEY_Down: return select_next(state);
+ case XKB_KEY_Up: return select_previous(state);
+ case XKB_KEY_Left: return backward_char_or_select_previous(state);
+ case XKB_KEY_Right: return forward_char_or_select_next(state);
}
// type char into buffer