aboutsummaryrefslogtreecommitdiffstats
path: root/screen_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'screen_utils.c')
-rw-r--r--screen_utils.c69
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;
}
+