From 0b0cfa5d3681a31b3bdf079aa164fc58bc06c414 Mon Sep 17 00:00:00 2001 From: speedie Date: Mon, 6 Mar 2023 19:13:38 +0100 Subject: [PATCH] add support for keybinds that work in any mode --- keybinds.h | 21 +++++++++++---------- libs/argv.c | 6 ++++-- libs/mode.h | 6 ------ spmenu.c | 2 +- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/keybinds.h b/keybinds.h index 3812bb6..cd486a5 100644 --- a/keybinds.h +++ b/keybinds.h @@ -19,8 +19,9 @@ */ /* Modes - * 0: Normal mode - * 1: Insert mode + * -1: Any mode + * 0: Normal mode + * 1: Insert mode * * Switch mode by calling switchmode */ @@ -42,11 +43,7 @@ static Key keys[] = { { 1, 0, XK_Down, move, {.i = 2 } }, { 1, 0, XK_Left, move, {.i = 3 } }, { 1, 0, XK_Right, move, {.i = 4 } }, - { 1, CONTROL, XK_v, paste, {.i = 1 } }, /* primary buffer */ - { 1, CONTROL|SHIFT, XK_v, paste, {.i = 2 } }, { 1, 0, XK_BackSpace, backspace, {0} }, - { 1, 0, XK_Return, selectitem, {.i = +1 } }, - { 1, 0, XK_Tab, complete, {0} }, /* normal mode * @@ -67,8 +64,6 @@ static Key keys[] = { { 0, 0, XK_j, move, {.i = 2 } }, { 0, 0, XK_h, move, {.i = 3 } }, { 0, 0, XK_l, move, {.i = 4 } }, - { 0, CONTROL, XK_v, paste, {.i = 1 } }, /* primary buffer */ - { 0, CONTROL|SHIFT, XK_v, paste, {.i = 2 } }, { 0, CONTROL, XK_k, restoresel, {0} }, { 0, CONTROL, XK_r, viewhist, {0} }, { 0, CONTROL, XK_u, clear, {0} }, @@ -79,10 +74,16 @@ static Key keys[] = { { 0, SHIFT, XK_g, moveend, {0} }, { 0, 0, XK_Next, movenext, {0} }, { 0, 0, XK_Prior, moveprev, {0} }, - { 0, 0, XK_Return, selectitem, {.i = +1 } }, - { 0, 0, XK_Tab, complete, {0} }, { 0, MODIFIER1, XK_b, moveword, {.i = -1 } }, { 0, MODIFIER1, XK_f, moveword, {.i = +1 } }, { 0, MODIFIER1, XK_p, navhistory, {.i = -1 } }, { 0, MODIFIER1, XK_n, navhistory, {.i = +1 } }, + + /* any mode + * + * mode modifier key function argument */ + { -1, 0, XK_Return, selectitem, {.i = +1 } }, + { -1, 0, XK_Tab, complete, {0} }, + { -1, CONTROL, XK_v, paste, {.i = 1 } }, /* primary buffer */ + { -1, CONTROL|SHIFT, XK_v, paste, {.i = 2 } }, }; diff --git a/libs/argv.c b/libs/argv.c index f96399c..811bc07 100644 --- a/libs/argv.c +++ b/libs/argv.c @@ -27,6 +27,8 @@ readargs(int argc, char *argv[]) if (!strcmp(argv[i], "-v")) { /* prints version information */ puts("spmenu-"VERSION); exit(0); + } else if (!strcmp(argv[i], "-h")) { /* help */ + usage(); } else if (!strcmp(argv[i], "-it")) { /* image: top */ imageposition = 0; } else if (!strcmp(argv[i], "-ib")) { /* image: bottom */ @@ -120,7 +122,7 @@ readargs(int argc, char *argv[]) } else if (!strcmp(argv[i], "-si")) { /* don't hide image */ hideimage = 0; } else if (i + 1 == argc) - usage(); + fprintf(stderr, "spmenu: Invalid argument: '%s'\n", argv[i]); /* these options take one argument */ else if (!strcmp(argv[i], "-g")) { /* number of columns in grid */ @@ -267,7 +269,7 @@ readargs(int argc, char *argv[]) else if (!strcmp(argv[i], "-n")) /* preselected item */ preselected = atoi(argv[++i]); else - usage(); + fprintf(stderr, "spmenu: Invalid argument: '%s'\n", argv[i]); } void diff --git a/libs/mode.h b/libs/mode.h index cd25577..52a53b4 100644 --- a/libs/mode.h +++ b/libs/mode.h @@ -1,11 +1,5 @@ static char modetext[16] = "Insert"; /* default mode text */ -/* available modes */ -typedef enum mode { - Normal, - Insert, -} image_mode; - /* mode settings */ static int curMode = 1; /* 0 is command mode */ static int allowkeys = 1; /* whether or not to interpret a keypress as an insertion */ diff --git a/spmenu.c b/spmenu.c index 510f2c9..0972206 100644 --- a/spmenu.c +++ b/spmenu.c @@ -1090,7 +1090,7 @@ keypress(XEvent *e) for (i = 0; i < LENGTH(keys); i++) { if (keysym == keys[i].keysym && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) && keys[i].func) - if (keys[i].mode && curMode) { + if (keys[i].mode && curMode || keys[i].mode == -1) { keys[i].func(&(keys[i].arg)); return; } else if (!keys[i].mode && !curMode) {