URI: 
       Add key for toogling numlock handling - st - simple terminal
  HTML git clone https://git.parazyd.org/st
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 172f65436ce14a52842d67b862fdc45f8ff3ada3
   DIR parent b26df1d0d3f7791504150820e7c105b20c6b1c3b
  HTML Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
       Date:   Sun, 25 Nov 2012 09:23:02 +0100
       
       Add key for toogling numlock handling
       
       Keypad will generate keycodes when keypad application mode is enabled. It
       can cause problems with some programs like vi, which operates in such
       mode.
       
       This patch change by default don't generate the keycodes never, but this
       behaviour can be changed using the combination Alt + NumLock.
       ---
        config.def.h |   34 ++++++++++++++++++----------------
        st.c         |   17 +++++++++++++++--
        2 files changed, 33 insertions(+), 18 deletions(-)
       Diffstat:
         M config.def.h                        |      34 ++++++++++++++++---------------
         M st.c                                |      17 +++++++++++++++--
       
       2 files changed, 33 insertions(+), 18 deletions(-)
       ---
   DIR diff --git a/config.def.h b/config.def.h
       @@ -62,6 +62,7 @@ static Shortcut shortcuts[] = {
                { MODKEY|ShiftMask,        XK_Prior,        xzoom,                {.i = +1} },
                { MODKEY|ShiftMask,        XK_Next,        xzoom,                {.i = -1} },
                { ShiftMask,                XK_Insert,        selpaste,        {.i =  0} },
       +        { MODKEY,                XK_Num_Lock,        numlock,        {.i =  0} },
        };
        
        /*
       @@ -73,6 +74,7 @@ static Shortcut shortcuts[] = {
         * keypad value:
         * * 0: no value
         * * > 0: keypad application mode enabled
       + * *   = 2: term.numlock = 1
         * * < 0: keypad application mode disabled
         * cursor value:
         * * 0: no value
       @@ -123,24 +125,24 @@ static Key key[] = {
                { XK_KP_Insert,     XK_ANY_MOD,     "\033[2~",       0,    0,    0},
                { XK_KP_Delete,     ShiftMask,      "\033[3;2~",     0,    0,    0},
                { XK_KP_Delete,     XK_ANY_MOD,     "\033[3~",       0,    0,    0},
       -        { XK_KP_Multiply,   XK_ANY_MOD,     "\033Oj",       +1,    0,    0},
       -        { XK_KP_Add,        XK_ANY_MOD,     "\033Ok",       +1,    0,    0},
       -        { XK_KP_Enter,      XK_ANY_MOD,     "\033OM",       +1,    0,    0},
       +        { XK_KP_Multiply,   XK_ANY_MOD,     "\033Oj",       +2,    0,    0},
       +        { XK_KP_Add,        XK_ANY_MOD,     "\033Ok",       +2,    0,    0},
       +        { XK_KP_Enter,      XK_ANY_MOD,     "\033OM",       +2,    0,    0},
                { XK_KP_Enter,      XK_ANY_MOD,     "\r",           -1,    0,   -1},
                { XK_KP_Enter,      XK_ANY_MOD,     "\r\n",         -1,    0,   +1},
       -        { XK_KP_Subtract,   XK_ANY_MOD,     "\033Om",       +1,    0,    0},
       -        { XK_KP_Decimal,    XK_ANY_MOD,     "\033On",       +1,    0,    0},
       -        { XK_KP_Divide,     XK_ANY_MOD,     "\033Oo",       +1,    0,    0},
       -        { XK_KP_0,          XK_ANY_MOD,     "\033Op",       +1,    0,    0},
       -        { XK_KP_1,          XK_ANY_MOD,     "\033Oq",       +1,    0,    0},
       -        { XK_KP_2,          XK_ANY_MOD,     "\033Or",       +1,    0,    0},
       -        { XK_KP_3,          XK_ANY_MOD,     "\033Os",       +1,    0,    0},
       -        { XK_KP_4,          XK_ANY_MOD,     "\033Ot",       +1,    0,    0},
       -        { XK_KP_5,          XK_ANY_MOD,     "\033Ou",       +1,    0,    0},
       -        { XK_KP_6,          XK_ANY_MOD,     "\033Ov",       +1,    0,    0},
       -        { XK_KP_7,          XK_ANY_MOD,     "\033Ow",       +1,    0,    0},
       -        { XK_KP_8,          XK_ANY_MOD,     "\033Ox",       +1,    0,    0},
       -        { XK_KP_9,          XK_ANY_MOD,     "\033Oy",       +1,    0,    0},
       +        { XK_KP_Subtract,   XK_ANY_MOD,     "\033Om",       +2,    0,    0},
       +        { XK_KP_Decimal,    XK_ANY_MOD,     "\033On",       +2,    0,    0},
       +        { XK_KP_Divide,     XK_ANY_MOD,     "\033Oo",       +2,    0,    0},
       +        { XK_KP_0,          XK_ANY_MOD,     "\033Op",       +2,    0,    0},
       +        { XK_KP_1,          XK_ANY_MOD,     "\033Oq",       +2,    0,    0},
       +        { XK_KP_2,          XK_ANY_MOD,     "\033Or",       +2,    0,    0},
       +        { XK_KP_3,          XK_ANY_MOD,     "\033Os",       +2,    0,    0},
       +        { XK_KP_4,          XK_ANY_MOD,     "\033Ot",       +2,    0,    0},
       +        { XK_KP_5,          XK_ANY_MOD,     "\033Ou",       +2,    0,    0},
       +        { XK_KP_6,          XK_ANY_MOD,     "\033Ov",       +2,    0,    0},
       +        { XK_KP_7,          XK_ANY_MOD,     "\033Ow",       +2,    0,    0},
       +        { XK_KP_8,          XK_ANY_MOD,     "\033Ox",       +2,    0,    0},
       +        { XK_KP_9,          XK_ANY_MOD,     "\033Oy",       +2,    0,    0},
                { XK_BackSpace,     XK_NO_MOD,      "\177",          0,    0,    0},
                { XK_Up,            ShiftMask,      "\033[1;2A",     0,    0,    0},
                { XK_Up,            ControlMask,    "\033[1;5A",     0,    0,    0},
   DIR diff --git a/st.c b/st.c
       @@ -194,6 +194,7 @@ typedef struct {
                int bot;        /* bottom scroll limit */
                int mode;        /* terminal mode flags */
                int esc;        /* escape state flags */
       +        bool numlock;        /* lock numbers in keyboard */
                bool *tabs;
        } Term;
        
       @@ -261,6 +262,7 @@ typedef struct {
        /* function definitions used in config.h */
        static void xzoom(const Arg *);
        static void selpaste(const Arg *);
       +static void numlock(const Arg *);
        
        /* Config.h for applying patches and the configuration. */
        #include "config.h"
       @@ -1100,6 +1102,7 @@ tnew(int col, int row) {
                        term.alt [row] = xmalloc(term.col * sizeof(Glyph));
                        term.dirty[row] = 0;
                }
       +        term.numlock = 1;
                memset(term.tabs, 0, term.col * sizeof(*term.tabs));
                /* setup screen */
                treset();
       @@ -2700,6 +2703,12 @@ match(uint mask, uint state) {
                return true;
        }
        
       +void
       +numlock(const Arg *dummy)
       +{
       +        term.numlock ^= 1;
       +}
       +
        char*
        kmap(KeySym k, uint state) {
                uint mask;
       @@ -2725,8 +2734,12 @@ kmap(KeySym k, uint state) {
                        if(!match(mask, state))
                                continue;
        
       -                if((kp->appkey < 0 && IS_SET(MODE_APPKEYPAD)) ||
       -                                (kp->appkey > 0 && !IS_SET(MODE_APPKEYPAD))) {
       +                if(kp->appkey > 0) {
       +                        if(!IS_SET(MODE_APPKEYPAD))
       +                                continue;
       +                        if(term.numlock && kp->appkey == 2)
       +                                continue;
       +                } else if (kp->appkey < 0 && IS_SET(MODE_APPKEYPAD)) {
                                continue;
                        }