t* sacc + cursorline and uri preview
       
   URI git clone git://git.codevoid.de/sacc-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR LICENSE
       ---
   DIR commit bb8924f35719c580e9fa543a4cbea1258f764acf
   DIR parent 43803bed9713d10bf08e93ca0a48298be15e9cdf
   URI Author: Quentin Rameau <quinq@fifth.space>
       Date:   Mon, 20 Aug 2018 11:07:48 +0200
       
       Do not use UI functions (uistatus) when output not a term
       
       Diffstat:
         M sacc.c                              |      59 +++++++++++++++++++------------
       
       1 file changed, 37 insertions(+), 22 deletions(-)
       ---
   DIR diff --git a/sacc.c b/sacc.c
       t@@ -28,6 +28,19 @@ static int devnullfd;
        static int parent = 1;
        static int interactive;
        
       +static void (*diag)(char *fmt, ...);
       +
       +void
       +stddiag(char *fmt, ...)
       +{
       +        va_list arg;
       +
       +        va_start(arg, fmt);
       +        vfprintf(stderr, fmt, arg);
       +        va_end(arg);
       +        fputc('\n', stderr);
       +}
       +
        void
        die(const char *fmt, ...)
        {
       t@@ -267,7 +280,7 @@ displaytextitem(Item *item)
                uicleanup();
                switch (pid = fork()) {
                case -1:
       -                uistatus("Couldn't fork.");
       +                diag("Couldn't fork.");
                        return;
                case 0:
                        parent = 0;
       t@@ -353,7 +366,7 @@ molddiritem(char *raw)
                if (!strcmp(s, ".\r\n") || !strcmp(s, ".\n"))
                        --nitems;
                if (!nitems) {
       -                uistatus("Couldn't parse dir item");
       +                diag("Couldn't parse dir item");
                        return NULL;
                }
        
       t@@ -404,7 +417,7 @@ getrawitem(int sock)
                *buf = '\0';
        
                if (n < 0) {
       -                uistatus("Can't read socket: %s", strerror(errno));
       +                diag("Can't read socket: %s", strerror(errno));
                        clear(&raw);
                }
        
       t@@ -429,7 +442,7 @@ sendselector(int sock, const char *selector)
        
                free(msg);
                if (n == -1)
       -                uistatus("Can't send message: %s", strerror(errno));
       +                diag("Can't send message: %s", strerror(errno));
        
                return n;
        }
       t@@ -446,8 +459,8 @@ connectto(const char *host, const char *port)
                int sock, r;
        
                if (r = getaddrinfo(host, port, &hints, &addrs)) {
       -                uistatus("Can't resolve hostname \"%s\": %s",
       -                         host, gai_strerror(r));
       +                diag("Can't resolve hostname \"%s\": %s",
       +                     host, gai_strerror(r));
                        return -1;
                }
        
       t@@ -462,12 +475,12 @@ connectto(const char *host, const char *port)
                        break;
                }
                if (sock < 0) {
       -                uistatus("Can't open socket: %s", strerror(errno));
       +                diag("Can't open socket: %s", strerror(errno));
                        return -1;
                }
                if (r < 0) {
       -                uistatus("Can't connect to: %s:%s: %s",
       -                         host, port, strerror(errno));
       +                diag("Can't connect to: %s:%s: %s",
       +                     host, port, strerror(errno));
                        return -1;
                }
        
       t@@ -538,8 +551,8 @@ downloaditem(Item *item)
                }
        
                if ((dest = open(path, O_WRONLY|O_CREAT|O_EXCL, mode)) < 0) {
       -                uistatus("Can't open destination file %s: %s",
       -                         path, strerror(errno));
       +                diag("Can't open destination file %s: %s",
       +                     path, strerror(errno));
                        errno = 0;
                        goto cleanup;
                }
       t@@ -567,7 +580,7 @@ fetchitem(Item *item)
                close(sock);
        
                if (item->raw && !*item->raw) {
       -                uistatus("Empty response from server");
       +                diag("Empty response from server");
                        clear(&item->raw);
                }
        
       t@@ -579,7 +592,7 @@ plumb(char *url)
        {
                switch (fork()) {
                case -1:
       -                uistatus("Couldn't fork.");
       +                diag("Couldn't fork.");
                        return;
                case 0:
                        parent = 0;
       t@@ -589,7 +602,7 @@ plumb(char *url)
                                _exit(1);
                }
        
       -        uistatus("Plumbed \"%s\"", url);
       +        diag("Plumbed \"%s\"", url);
        }
        
        static void
       t@@ -627,8 +640,8 @@ plumbitem(Item *item)
        
                if (path && (!tag || strcmp(tag, path))) {
                        if ((dest = open(path, O_WRONLY|O_CREAT|O_EXCL, mode)) < 0) {
       -                        uistatus("Can't open destination file %s: %s",
       -                                 path, strerror(errno));
       +                        diag("Can't open destination file %s: %s",
       +                             path, strerror(errno));
                                errno = 0;
                                goto cleanup;
                        }
       t@@ -699,8 +712,7 @@ dig(Item *entry, Item *item)
                        return 0;
                default:
                        if (t >= '0' && t <= 'Z') {
       -                        uistatus("Type %c (%s) not supported",
       -                                 t, typedisplay(t));
       +                        diag("Type %c (%s) not supported", t, typedisplay(t));
                                return 0;
                        }
                case 'g':
       t@@ -795,8 +807,8 @@ delve(Item *hole)
                                        entry = hole;
                                break;
                        case 0:
       -                        uistatus("Couldn't get %s:%s/%c%s", hole->host,
       -                                 hole->port, hole->type, hole->selector);
       +                        diag("Couldn't get %s:%s/%c%s", hole->host,
       +                             hole->port, hole->type, hole->selector);
                                break;
                        case '4':
                        case '5':
       t@@ -933,10 +945,13 @@ main(int argc, char *argv[])
                mainurl = xstrdup(argv[1]);
        
                mainentry = moldentry(mainurl);
       -        if (interactive)
       +        if (interactive) {
       +                diag = uistatus;
                        delve(mainentry);
       -        else
       +        } else {
       +                diag = stddiag;
                        printout(mainentry);
       +        }
        
                exit(0);
        }