diff -Naur dwmbase/config.def.h dwmfork/config.def.h --- dwmbase/config.def.h 2015-11-08 23:39:37.000000000 +0100 +++ dwmfork/config.def.h 2018-02-19 09:29:10.686311679 +0100 @@ -1,5 +1,5 @@ /* See LICENSE file for copyright and license details. */ - +#include //needed for X11 media keys, remove if unnecessary /* appearance */ static const char *fonts[] = { "monospace:size=10" @@ -61,6 +61,9 @@ /* modifier key function argument */ { MODKEY, XK_p, spawn, {.v = dmenucmd } }, { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, + { 0, XF86XK_AudioPlay, mpdcontrol, {.i = 0 } }, + { 0, XF86XK_AudioPrev, mpdcontrol, {.i = -1 } }, + { 0, XF86XK_AudioNext, mpdcontrol, {.i = +1 } }, { MODKEY, XK_b, togglebar, {0} }, { MODKEY, XK_j, focusstack, {.i = +1 } }, { MODKEY, XK_k, focusstack, {.i = -1 } }, diff -Naur dwmbase/config.mk dwmfork/config.mk --- dwmbase/config.mk 2015-11-08 23:39:37.000000000 +0100 +++ dwmfork/config.mk 2018-02-19 09:30:08.112973336 +0100 @@ -22,7 +22,7 @@ # includes and libs INCS = -I${X11INC} -I${FREETYPEINC} -LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} +LIBS = -L${X11LIB} -lmpdclient -lX11 ${XINERAMALIBS} ${FREETYPELIBS} # flags CPPFLAGS = -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} diff -Naur dwmbase/dwm.c dwmfork/dwm.c --- dwmbase/dwm.c 2015-11-08 23:39:37.000000000 +0100 +++ dwmfork/dwm.c 2018-02-19 09:32:28.099627791 +0100 @@ -40,6 +40,9 @@ #include #endif /* XINERAMA */ #include +#include +#include +#include #include "drw.h" #include "util.h" @@ -184,6 +187,7 @@ static void monocle(Monitor *m); static void motionnotify(XEvent *e); static void movemouse(const Arg *arg); +static void mpdcontrol(const Arg *arg); static Client *nexttiled(Client *c); static void pop(Client *); static void propertynotify(XEvent *e); @@ -1209,6 +1213,40 @@ } } +void +mpdcontrol(const Arg *arg) +{ + struct mpd_connection *connection; + connection = mpd_connection_new(NULL,0,1000); + if(mpd_connection_get_error(connection)!=MPD_ERROR_SUCCESS) + { + mpd_connection_free(connection); + return; + } + switch(arg->i) + { + case -1: + mpd_send_previous(connection); + break; + case 0: + ; + struct mpd_status *stat; + stat = mpd_status_begin(); + mpd_send_status(connection); + stat = mpd_recv_status(connection); + if(mpd_status_get_state(stat)==MPD_STATE_STOP) + mpd_send_play(connection); + else + mpd_send_toggle_pause(connection); + mpd_status_free(stat); + break; + case 1: + mpd_send_next(connection); + break; + } + mpd_connection_free(connection); +} + Client * nexttiled(Client *c) {