lchat

A line oriented chat front end for ii.
git clone git://git.suckless.org/lchat
Log | Files | Refs

commit 1242ea1d3350f961e9c9c113fb964caa34b11163
parent 25d90f4630b45e2b609d2e3daecb32cf5ff065fd
Author: Jan Klemkow <j.klemkow@wemelug.de>
Date:   Sat, 29 Jul 2017 22:15:59 +0200

Merge branch 'shua-master'

Diffstat:
slackline.c | 37+++++++++++++++++++++++++++++++++++--
slackline.h | 3++-
2 files changed, 37 insertions(+), 3 deletions(-)

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; 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 */