X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=st.c;h=7b7bd55b87765b0a3a49a0922bd9425f50418cee;hb=801ea034b652025dc22d26f6e1b802de932346da;hp=dbbc1f69b66596683d4bf19d5f88e4c5d777b006;hpb=7474a2fc3785eb1aad00f8cf2b50711bbe1fff0b;p=st.git diff --git a/st.c b/st.c index dbbc1f6..7b7bd55 100644 --- a/st.c +++ b/st.c @@ -59,8 +59,8 @@ #define STR_ARG_SIZ 16 #define DRAW_BUF_SIZ 20*1024 #define UTF_SIZ 4 -#define XK_NO_MOD UINT_MAX -#define XK_ANY_MOD 0 +#define XK_ANY_MOD UINT_MAX +#define XK_NO_MOD 0 #define REDRAW_TIMEOUT (80*1000) /* 80 ms */ @@ -2100,6 +2100,10 @@ tputc(char *c, int len) { sel.bx = -1; if(IS_SET(MODE_WRAP) && term.c.state & CURSOR_WRAPNEXT) tnewline(1); /* always go to first col */ + if(IS_SET(MODE_INSERT) && term.c.x+1 < term.col) + memmove(&term.line[term.c.y][term.c.x+1], + &term.line[term.c.y][term.c.x], + (term.col - term.c.x - 1) * sizeof(Glyph)); tsetchar(c, &term.c.attr, term.c.x, term.c.y); if(term.c.x+1 < term.col) tmoveto(term.c.x+1, term.c.y); @@ -2699,18 +2703,24 @@ kmap(KeySym k, uint state) { if(kp->k != k) continue; - if((state & mask) != mask && - (mask == XK_NO_MOD && state)) { + + if(mask == XK_NO_MOD && state) continue; - } + if(mask != XK_ANY_MOD && mask != XK_NO_MOD && !state) + continue; + if((state & mask) != state) + continue; + if((kp->appkey < 0 && IS_SET(MODE_APPKEYPAD)) || (kp->appkey > 0 && !IS_SET(MODE_APPKEYPAD))) { continue; } + if((kp->appcursor < 0 && IS_SET(MODE_APPCURSOR)) || (kp->appcursor > 0 && !IS_SET(MODE_APPCURSOR))) { continue; } + if((kp->crlf < 0 && IS_SET(MODE_CRLF)) || (kp->crlf > 0 && !IS_SET(MODE_CRLF))) { continue; @@ -2718,6 +2728,7 @@ kmap(KeySym k, uint state) { return kp->s; } + return NULL; }