Merge branch 'shua-master' - lchat - A line oriented chat front end for ii.
 (HTM) git clone git://git.suckless.org/lchat
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit 1242ea1d3350f961e9c9c113fb964caa34b11163
 (DIR) parent 25d90f4630b45e2b609d2e3daecb32cf5ff065fd
 (HTM) Author: Jan Klemkow <j.klemkow@wemelug.de>
       Date:   Sat, 29 Jul 2017 22:15:59 +0200
       
       Merge branch 'shua-master'
       
       Diffstat:
         M slackline.c                         |      37 +++++++++++++++++++++++++++++--
         M slackline.h                         |       3 ++-
       
       2 files changed, 37 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/slackline.c b/slackline.c
       @@ -157,9 +157,39 @@ sl_keystroke(struct slackline *sl, int key)
                                sl->last -= ncur - sl->ptr;
                                *sl->last = '\0';
                                break;
       +                case '0':
       +                case '1':
       +                case '2':
       +                case '3':
       +                case '4':
       +                case '5':
       +                case '6':
       +                case '7':
       +                case '8':
       +                case '9':
       +                        sl->nummod = key;
       +                        sl->esc = ESC_BRACKET_NUM;
       +                        return 0;
                        }
                        sl->esc = ESC_NONE;
                        return 0;
       +        case ESC_BRACKET_NUM:
       +                switch(key) {
       +                case '~':
       +                        switch(sl->nummod) {
       +                        case '7':
       +                                sl->bcur = sl->rcur = 0;
       +                                sl->ptr = sl->buf;
       +                                break;
       +                        case '8':
       +                                sl->rcur = sl->rlen;
       +                                sl->bcur = sl_postobyte(sl, sl->rcur);
       +                                sl->ptr = sl->buf + sl->bcur;
       +                                break;
       +                        }
       +                        sl->esc = ESC_NONE;
       +                        return 0;
       +                }
                }
        
                /* handle ctl keys */
       @@ -188,6 +218,9 @@ sl_keystroke(struct slackline *sl, int key)
                        sl->ptr = ncur;
        
                        return 0;
       +        case 21: /* ctrl+u or clearline, weird that it's a NAK */
       +                sl_reset(sl);
       +                return 0;
                }
        
                /* byte-wise composing of UTF-8 runes */
       @@ -207,14 +240,14 @@ sl_keystroke(struct slackline *sl, int key)
        
                /* add character to buffer */
                if (sl->rcur < sl->rlen) {        /* insert into buffer */
       -                char *ncur = sl_postoptr(sl, sl->rcur + 1);
                        char *cur = sl_postoptr(sl, sl->rcur);
                        char *end = sl_postoptr(sl, sl->rlen);
       +                char *ncur = cur + sl->ubuf_len;
        
                        memmove(ncur, cur, end - cur);
                }
        
       -        memcpy(sl->last, sl->ubuf, sl->ubuf_len);
       +        memcpy(sl_postoptr(sl, sl->rcur), sl->ubuf, sl->ubuf_len);
        
                sl->ptr  += sl->ubuf_len;
                sl->last += sl->ubuf_len;
 (DIR) diff --git a/slackline.h b/slackline.h
       @@ -3,7 +3,7 @@
        
        #include <stdbool.h>
        
       -enum esc_seq {ESC_NONE, ESC, ESC_BRACKET};
       +enum esc_seq {ESC_NONE, ESC, ESC_BRACKET, ESC_BRACKET_NUM};
        
        struct slackline {
                /* buffer */
       @@ -21,6 +21,7 @@ struct slackline {
                size_t rlen;        /* amount of runes */
        
                enum esc_seq esc;
       +        char nummod;
        
                /* UTF-8 handling */
                char ubuf[6];        /* UTF-8 buffer */