X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fscreen_find.c;h=3fdf9f30dd923914723c2e85658161e95a8a322f;hb=370d69821e05906c6d276e22fd3ddf0166d596a2;hp=e58a1a2ad88ce869d6f12a0b43ef9a028e88580f;hpb=0796b270b1699336f29908d11bca92d64da0653c;p=ncmpc.git diff --git a/src/screen_find.c b/src/screen_find.c index e58a1a2..3fdf9f3 100644 --- a/src/screen_find.c +++ b/src/screen_find.c @@ -19,7 +19,7 @@ #include "screen_find.h" #include "screen_utils.h" -#include "screen_message.h" +#include "screen_status.h" #include "screen.h" #include "i18n.h" #include "options.h" @@ -30,7 +30,7 @@ #define JUMP_PROMPT _("Jump") /* query user for a string and find it in a list window */ -int +bool screen_find(struct list_window *lw, command_t findcmd, list_window_callback_fn_t callback_fn, void *callback_data) @@ -96,7 +96,7 @@ screen_jump(struct list_window *lw, list_window_paint_callback_t paint_callback, void *callback_data) { - char *search_str, *iter; + char *search_str, *iter, *temp; const int WRLN_MAX_LINE_SIZE = 1024; int key = 65; command_t cmd; @@ -111,20 +111,21 @@ screen_jump(struct list_window *lw, search_str = screen.findbuf + g_snprintf(screen.findbuf, WRLN_MAX_LINE_SIZE, "%s: ", JUMP_PROMPT); iter = search_str; - /* unfortunately wgetch returns "next/previous-page" not as an ascii-char */ - while(!g_ascii_iscntrl(key) && key != KEY_NPAGE && key != KEY_PPAGE) { + while(1) { key = screen_getch(screen.findbuf); - /* if backspace or delete was pressed */ - if (key == KEY_BACKSPACE || key == 330) { + /* if backspace or delete was pressed, process instead of ending loop */ + if (key == KEY_BACKSPACE || key == KEY_DC) { int i; - /* don't end the loop */ - key = 65; if (search_str <= g_utf8_find_prev_char(screen.findbuf, iter)) iter = g_utf8_find_prev_char(screen.findbuf, iter); for (i = 0; *(iter + i) != '\0'; i++) *(iter + i) = '\0'; continue; } + /* if a control key was pressed, end loop */ + else if (g_ascii_iscntrl(key) || key == KEY_NPAGE || key == KEY_PPAGE) { + break; + } else { *iter = key; if (iter < screen.findbuf + WRLN_MAX_LINE_SIZE - 3) @@ -144,4 +145,8 @@ screen_jump(struct list_window *lw, ungetch(key); if ((cmd=get_keyboard_command()) != CMD_NONE) do_input_event(cmd); + + temp = g_strdup(search_str); + g_free(screen.findbuf); + screen.findbuf = temp; }