diff options
Diffstat (limited to 'src/fruits')
| -rw-r--r-- | src/fruits/cmc/ui/pane_search.c | 19 | ||||
| -rw-r--r-- | src/fruits/cmc/ui/ui.h | 1 |
2 files changed, 16 insertions, 4 deletions
diff --git a/src/fruits/cmc/ui/pane_search.c b/src/fruits/cmc/ui/pane_search.c index e75caa5..e273504 100644 --- a/src/fruits/cmc/ui/pane_search.c +++ b/src/fruits/cmc/ui/pane_search.c @@ -37,6 +37,8 @@ void cmc_sp_add_search(struct cmc_ui *ui, struct cmc_search *search) static bool handle_text_input(struct cmc_search_tab *tab, struct ncinput *input) { + bool entered = false; + switch (input->id) { case NCKEY_BACKSPACE: if (tab->cursor > 0) { @@ -59,7 +61,8 @@ static bool handle_text_input(struct cmc_search_tab *tab, struct ncinput *input) tab->input_active = false; // Erase text on next render. tab->input_changed = true; - return true; + entered = true; + break; default: if (ncinput_ctrl_p(input)) { switch (input->id) { @@ -111,7 +114,15 @@ static bool handle_text_input(struct cmc_search_tab *tab, struct ncinput *input) break; } - return false; + + tab->visual_cursor = 0; + if (tab->cursor > 0) { + for (u32 i = 0; i < tab->cursor; i++) { + tab->visual_cursor += al_wchar_width(al_wstr_at(&tab->input_text, i)); + } + } + + return entered; } bool cmc_sp_handle_input(struct cmc_ui *ui, struct ncinput *input) @@ -142,7 +153,7 @@ bool cmc_sp_handle_input(struct cmc_ui *ui, struct ncinput *input) tab->input_changed = true; s32 absx = ncplane_abs_x(tab->input); s32 absy = ncplane_abs_y(tab->input); - notcurses_cursor_enable(ui->nc, absy, absx + tab->cursor); + notcurses_cursor_enable(ui->nc, absy, absx + tab->visual_cursor); break; } } @@ -174,7 +185,7 @@ void cmc_sp_render(struct cmc_ui *ui) if (tab->input_active) { s32 absx = ncplane_abs_x(tab->input); s32 absy = ncplane_abs_y(tab->input); - notcurses_cursor_enable(ui->nc, absy, absx + tab->cursor); + notcurses_cursor_enable(ui->nc, absy, absx + tab->visual_cursor); } } diff --git a/src/fruits/cmc/ui/ui.h b/src/fruits/cmc/ui/ui.h index 996bb73..2f73a81 100644 --- a/src/fruits/cmc/ui/ui.h +++ b/src/fruits/cmc/ui/ui.h @@ -21,6 +21,7 @@ struct cmc_search_tab { struct cmc_search *search; struct ncplane *input; u32 cursor; + u32 visual_cursor; bool input_active; wstr input_text; bool input_changed; |