From a60bbb9e4feb828a1283cf98b36bb8dfc718b0e6 Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Sun, 2 Oct 2016 05:47:33 +0200 Subject: Add some MPD keyboard controls --- nncmpp.c | 53 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/nncmpp.c b/nncmpp.c index f384e3c..1520fd4 100644 --- a/nncmpp.c +++ b/nncmpp.c @@ -1090,6 +1090,8 @@ enum user_action USER_ACTION_MPD_TOGGLE, USER_ACTION_MPD_STOP, USER_ACTION_MPD_NEXT, + USER_ACTION_MPD_VOLUME_UP, + USER_ACTION_MPD_VOLUME_DOWN, USER_ACTION_GOTO_ITEM_PREVIOUS, USER_ACTION_GOTO_ITEM_NEXT, @@ -1139,6 +1141,22 @@ app_process_user_action (enum user_action action) case USER_ACTION_MPD_NEXT: MPD_SIMPLE ("next") return true; + case USER_ACTION_MPD_VOLUME_UP: + if (g_ctx.volume >= 0) + { + char *volume = xstrdup_printf ("%d", MIN (100, g_ctx.volume + 10)); + MPD_SIMPLE ("setvol", volume) + free (volume); + } + return true; + case USER_ACTION_MPD_VOLUME_DOWN: + if (g_ctx.volume >= 0) + { + char *volume = xstrdup_printf ("%d", MAX (0, g_ctx.volume - 10)); + MPD_SIMPLE ("setvol", volume) + free (volume); + } + return true; // TODO: relative seeks #if 0 @@ -1273,18 +1291,26 @@ static struct binding } g_default_bindings[] = { - { "Escape", USER_ACTION_QUIT }, - { "Up", USER_ACTION_GOTO_ITEM_PREVIOUS }, - { "Down", USER_ACTION_GOTO_ITEM_NEXT }, - { "PageUp", USER_ACTION_GOTO_PAGE_PREVIOUS }, - { "PageDown", USER_ACTION_GOTO_PAGE_NEXT }, - { "C-l", USER_ACTION_REDRAW }, - { "C-p", USER_ACTION_GOTO_ITEM_PREVIOUS }, - { "C-n", USER_ACTION_GOTO_ITEM_NEXT }, - { "C-b", USER_ACTION_GOTO_PAGE_PREVIOUS }, - { "C-f", USER_ACTION_GOTO_PAGE_NEXT }, - // TODO: bindings for MPD control - { NULL, USER_ACTION_NONE }, + { "Escape", USER_ACTION_QUIT }, + { "C-l", USER_ACTION_REDRAW }, + + { "Up", USER_ACTION_GOTO_ITEM_PREVIOUS }, + { "Down", USER_ACTION_GOTO_ITEM_NEXT }, + { "PageUp", USER_ACTION_GOTO_PAGE_PREVIOUS }, + { "PageDown", USER_ACTION_GOTO_PAGE_NEXT }, + { "C-p", USER_ACTION_GOTO_ITEM_PREVIOUS }, + { "C-n", USER_ACTION_GOTO_ITEM_NEXT }, + { "C-b", USER_ACTION_GOTO_PAGE_PREVIOUS }, + { "C-f", USER_ACTION_GOTO_PAGE_NEXT }, + + // Not sure how to set these up, they're pretty arbitrary so far + { "Left", USER_ACTION_MPD_PREVIOUS }, + { "Space", USER_ACTION_MPD_TOGGLE }, + { "C-Space", USER_ACTION_MPD_STOP }, + { "Right", USER_ACTION_MPD_NEXT }, + { "M-PageUp", USER_ACTION_MPD_VOLUME_UP }, + { "M-PageDown", USER_ACTION_MPD_VOLUME_DOWN }, + { NULL, USER_ACTION_NONE }, }; static bool @@ -1516,7 +1542,8 @@ mpd_on_events (unsigned subsystems, void *user_data) (void) user_data; struct mpd_client *c = &g_ctx.client; - if (subsystems & (MPD_SUBSYSTEM_PLAYER | MPD_SUBSYSTEM_PLAYLIST)) + if (subsystems & (MPD_SUBSYSTEM_PLAYER + | MPD_SUBSYSTEM_PLAYLIST | MPD_SUBSYSTEM_MIXER)) mpd_request_info (); else mpd_client_idle (c, 0); -- cgit v1.2.3-70-g09d2