diff options
author | Kalle Wallin <kaw@linux.se> | 2004-03-26 12:31:40 +0000 |
---|---|---|
committer | Kalle Wallin <kaw@linux.se> | 2004-03-26 12:31:40 +0000 |
commit | de0277cb4f648484179ddca68a39cadcdb892338 (patch) | |
tree | 1684dbcfc8c0d7c1de1dc5ffbdb9a983c1511caf /screen_utils.c | |
parent | 8ccbb1a4fc500d7ae746868da85907f4c80f1ea2 (diff) | |
download | mpd-de0277cb4f648484179ddca68a39cadcdb892338.tar.gz mpd-de0277cb4f648484179ddca68a39cadcdb892338.tar.xz mpd-de0277cb4f648484179ddca68a39cadcdb892338.zip |
Added reversed and wrapped list search (find).
git-svn-id: https://svn.musicpd.org/ncmpc/trunk@497 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'screen_utils.c')
-rw-r--r-- | screen_utils.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/screen_utils.c b/screen_utils.c index 648291f03..9feda742a 100644 --- a/screen_utils.c +++ b/screen_utils.c @@ -9,8 +9,12 @@ #include "support.h" #include "command.h" #include "options.h" +#include "list_window.h" #include "screen.h" +#define FIND_PROMPT "Find: " +#define RFIND_PROMPT "Find backward: " + char * screen_readln(WINDOW *w, char *prompt) { @@ -34,6 +38,70 @@ screen_readln(WINDOW *w, char *prompt) return line; } + +/* query user for a string and find it in a list window */ +int +screen_find(screen_t *screen, + mpd_client_t *c, + list_window_t *lw, + int rows, + command_t findcmd, + list_window_callback_fn_t callback_fn) +{ + int reversed = 0; + int retval = 0; + char *prompt = FIND_PROMPT; + + if( findcmd==CMD_LIST_RFIND ||findcmd==CMD_LIST_RFIND_NEXT ) + { + prompt = RFIND_PROMPT; + reversed = 1; + } + + switch(findcmd) + { + case CMD_LIST_FIND: + case CMD_LIST_RFIND: + if( screen->findbuf ) + { + free(screen->findbuf); + screen->findbuf=NULL; + } + /* continue... */ + case CMD_LIST_FIND_NEXT: + case CMD_LIST_RFIND_NEXT: + if( !screen->findbuf ) + screen->findbuf=screen_readln(screen->status_window.w, prompt); + if( reversed ) + retval = list_window_rfind(lw, + callback_fn, + c, + screen->findbuf, + options.find_wrap, + rows); + else + retval = list_window_find(lw, + callback_fn, + c, + screen->findbuf, + options.find_wrap); + if( retval == 0 ) + { + lw->repaint = 1; + } + else + { + screen_status_printf("Unable to find \'%s\'", screen->findbuf); + beep(); + } + return 1; + default: + break; + } + return 0; +} + + int my_waddstr(WINDOW *w, const char *text, int color) { @@ -61,3 +129,4 @@ my_mvwaddstr(WINDOW *w, int x, int y, const char *text, int color) return ret; } + |