URI: 
       tRead from stdin instead of FIFO - ltk - Socket-based GUI for X11 (WIP)
  HTML git clone git://lumidify.org/ltk.git (fast, but not encrypted)
  HTML git clone https://lumidify.org/git/ltk.git (encrypted, but very slow)
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 8427dcdb18de419d9d158dfa8eeedefe5baafc61
   DIR parent b0116ddb464d93adf3eeb2cd64f8ac9920cfc443
  HTML Author: lumidify <nobody@lumidify.org>
       Date:   Tue,  2 Jun 2020 18:56:19 +0200
       
       Read from stdin instead of FIFO
       
       Diffstat:
         M ltk.c                               |      27 +++++++++++----------------
         A test.gui                            |       4 ++++
         D test.sh                             |       6 ------
       
       3 files changed, 15 insertions(+), 22 deletions(-)
       ---
   DIR diff --git a/ltk.c b/ltk.c
       t@@ -206,30 +206,26 @@ proc_cmds(ltk_window *window, char *buf) {
                }
        }
        
       -/* copied from suckless st */
       -#define TIMEDIFF(t1, t2)        ((t1.tv_sec-t2.tv_sec)*1000 + \
       -                                (t1.tv_nsec-t2.tv_nsec)/1E6)
       -
        /* FIXME: destroy remaining widgets in hash on exit */
        int
        ltk_mainloop(ltk_window *window) {
                XEvent event;
       -        int fd_in;
                struct stat st;
                struct timespec tick;
       +        struct timeval tv;
       +        fd_set rfds;
       +        int fd_in = fileno(stdin);
       +        char buf[200]; /* FIXME: what would be sensible? */
       +        int retval;
                tick.tv_sec = 0;
                tick.tv_nsec = 10000;
       -        char buf[200]; /* FIXME: what would be sensible? */
       -
       -        if (lstat("ltk_in", &st) != -1) {
       -                /* FIXME... */
       -                unlink("ltk_in");
       -        }
       +        tv.tv_sec = 0;
       +        tv.tv_usec = 0;
        
       -        if (mkfifo("ltk_in", S_IRWXU)) return -1;
       -        fd_in = open("ltk_in", O_RDONLY | O_NONBLOCK, 0);
       -        if (fd_in == -1) return -1;
                while (running) {
       +                FD_ZERO(&rfds);
       +                FD_SET(fd_in, &rfds);
       +                retval = select(fd_in + 1, &rfds, NULL, NULL, &tv);
                        while (XPending(window->dpy)) {
                                XNextEvent(window->dpy, &event);
                                ltk_handle_event(window, event);
       t@@ -250,14 +246,13 @@ ltk_mainloop(ltk_window *window) {
                                        free(last);
                                } while (cur);
                                window->first_event = window->last_event = NULL;
       -                } else if (!read_line(fd_in, buf, sizeof(buf))) {
       +                } else if (retval != -1 && retval != 0 && !read_line(fd_in, buf, sizeof(buf))) {
                                proc_cmds(window, buf);
                        }
                        /* yes, this should be improved */
                        nanosleep(&tick, NULL);
        
                }
       -        unlink("ltk_in");
        }
        
        void
   DIR diff --git a/test.gui b/test.gui
       t@@ -0,0 +1,4 @@
       +create button btn1
       +grid btn1 0 0
       +create button btn2
       +grid btn2 1 1
   DIR diff --git a/test.sh b/test.sh
       t@@ -1,6 +0,0 @@
       -#!/bin/sh
       -
       -echo "create button btn1" > ltk_in
       -echo "grid btn1 0 0" > ltk_in
       -echo "create button btn2" > ltk_in
       -echo "grid btn2 1 1" > ltk_in