tAdd support for mpd current song - spoon - dwm status utility (2f30 fork)
 (HTM) git clone git://src.adamsgaard.dk/spoon
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 121956cfc0fa87ba9608d804f3ca044dc57c8d12
 (DIR) parent c9624f19c37036e05abadc0c8c978a07581cb5dd
 (HTM) Author: lostd <lostd@2f30.org>
       Date:   Sun, 15 May 2016 14:08:13 +0100
       
       Add support for mpd current song
       
       Diffstat:
         M Makefile                            |       6 +++---
         M spoon.c                             |      34 +++++++++++++++++++++++++++++--
       
       2 files changed, 35 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       t@@ -1,7 +1,7 @@
        PREFIX = /usr/local
       -CFLAGS = -I/usr/X11R6/include
       -LDFLAGS = -L/usr/X11R6/lib
       -LDLIBS = -lxkbfile -lX11
       +CFLAGS = -I/usr/X11R6/include -I/usr/local/include
       +LDFLAGS = -L/usr/X11R6/lib -L/usr/local/lib
       +LDLIBS = -lxkbfile -lX11 -lmpdclient
        OBJ = spoon.o
        BIN = spoon
        
 (DIR) diff --git a/spoon.c b/spoon.c
       t@@ -9,6 +9,8 @@
        #include <X11/XKBlib.h>
        #include <X11/extensions/XKBrules.h>
        
       +#include <mpd/client.h>
       +
        #define LEN(x) (sizeof (x) / sizeof *(x))
        
        int dummyread(char *buf, size_t len);
       t@@ -40,8 +42,36 @@ dummyread(char *buf, size_t len)
        int
        mpdread(char *buf, size_t len)
        {
       -        strlcpy(buf, "mpd", len);
       -        return 0;
       +        struct mpd_connection *conn;
       +        struct mpd_song *song;
       +        const char *artist, *title;
       +        int ret = 0;
       +
       +        conn = mpd_connection_new(NULL, 0, 0);
       +        if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) {
       +                warnx("cannot connect to mpd");
       +                return -1;
       +        }
       +        mpd_send_current_song(conn);
       +        song = mpd_recv_song(conn);
       +        if (song == NULL) {
       +                warnx("cannot recv mpd song");
       +                ret = -1;
       +                goto out;
       +        }
       +        artist = mpd_song_get_tag(song, MPD_TAG_ARTIST, 0);
       +        title = mpd_song_get_tag(song, MPD_TAG_TITLE, 0);
       +        if (artist != NULL && title != NULL)
       +                snprintf(buf, len, "%s - %s", artist, title);
       +        else if (title != NULL)
       +                strlcpy(buf, title, len);
       +        else
       +                ret = -1;
       +        mpd_song_free(song);
       +        mpd_response_finish(conn);
       +out:
       +        mpd_connection_free(conn);
       +        return ret;
        }
        
        #ifdef __OpenBSD__