add some more control codes - 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 c2233eb6bae4c356cd92d71b9173bd3c62fed00e
 (DIR) parent 5ee1873a1ec3bc220efc5e1d1203b6fec97b8b71
 (HTM) Author: shuall <shualloret@gmail.com>
       Date:   Tue, 18 Jul 2017 20:37:40 -0400
       
       add some more control codes
       
       Using st, and these are more for my own convenience.
       I'm not sure how they translate to other terminals.
       - ctrl+u sends NAK, so clear line on NAK
       - home and end don't send 'home' and 'end' vt100 codes,
         they send \033[7~ and \033[8~ respectively
       
       Diffstat:
         M slackline.c                         |      33 +++++++++++++++++++++++++++++++
         M slackline.h                         |       3 ++-
       
       2 files changed, 35 insertions(+), 1 deletion(-)
       ---
 (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 */
 (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 */