iAdd numpad shortcuts. - thingmenu - A simple graphical menu launcher for X11. Err bitreich.org 70 hgit clone git://bitreich.org/thingmenu URL:git://bitreich.org/thingmenu bitreich.org 70 1Log /scm/thingmenu/log.gph bitreich.org 70 1Files /scm/thingmenu/files.gph bitreich.org 70 1Refs /scm/thingmenu/refs.gph bitreich.org 70 1Tags /scm/thingmenu/tag bitreich.org 70 1LICENSE /scm/thingmenu/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 17f3dbe69cd92eef39836ced8ba24e3035aee89f /scm/thingmenu/commit/17f3dbe69cd92eef39836ced8ba24e3035aee89f.gph bitreich.org 70 1parent f3edf619a8441c5ebc5ea4b209770bf30788c137 /scm/thingmenu/commit/f3edf619a8441c5ebc5ea4b209770bf30788c137.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Wed, 28 Dec 2022 22:23:39 +0100 Err bitreich.org 70 i Err bitreich.org 70 iAdd numpad shortcuts. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M config.mk | 2 +- Err bitreich.org 70 i M thingmenu.1 | 8 ++++++-- Err bitreich.org 70 i M thingmenu.c | 85 ++++++++++++++++++++++++++++--- Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 86 insertions(+), 9 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/config.mk b/config.mk /scm/thingmenu/file/config.mk.gph bitreich.org 70 i@@ -16,7 +16,7 @@ INCS = -I. -I/usr/include -I${X11INC} Err bitreich.org 70 i LIBS = -L/usr/lib -L${X11LIB} -lc -lX11 Err bitreich.org 70 i Err bitreich.org 70 i # flags Err bitreich.org 70 i-CPPFLAGS = -DVERSION=\"${VERSION}\" -D_POSIX_C_SOURCE=200809L Err bitreich.org 70 i+CPPFLAGS = -DVERSION=\"${VERSION}\" -D_POSIX_C_SOURCE=200809L -D_GNU_SOURCE Err bitreich.org 70 i CFLAGS = -g -std=c99 -pedantic -Wall ${INCS} ${CPPFLAGS} Err bitreich.org 70 i LDFLAGS = -g ${LIBS} Err bitreich.org 70 i #LDFLAGS = -s ${LIBS} Err bitreich.org 70 1diff --git a/thingmenu.1 b/thingmenu.1 /scm/thingmenu/file/thingmenu.1.gph bitreich.org 70 i@@ -9,9 +9,10 @@ Err bitreich.org 70 i .Sh SYNOPSIS Err bitreich.org 70 i .Nm Err bitreich.org 70 i .Bk -words Err bitreich.org 70 i-.Op Fl x Err bitreich.org 70 i-.Op Fl s Err bitreich.org 70 i+.Op Fl n Err bitreich.org 70 i .Op Fl o Err bitreich.org 70 i+.Op Fl s Err bitreich.org 70 i+.Op Fl x Err bitreich.org 70 i .Op Fl g Ar geometry Err bitreich.org 70 i .Op Fl w Ar widthscaling Err bitreich.org 70 i .Op Fl e Ar heightscaling Err bitreich.org 70 i@@ -62,6 +63,9 @@ button is clicked. Err bitreich.org 70 i .It Fl o Err bitreich.org 70 i Use the horizontal layout. Err bitreich.org 70 i . Err bitreich.org 70 i+.It Fl n Err bitreich.org 70 i+Prepend the numpad keys for shortcuts to the entries. Err bitreich.org 70 i+. Err bitreich.org 70 i .It Fl g Err bitreich.org 70 i Define the X11 geometry string, which is to be used. Err bitreich.org 70 i . Err bitreich.org 70 1diff --git a/thingmenu.c b/thingmenu.c /scm/thingmenu/file/thingmenu.c.gph bitreich.org 70 i@@ -106,6 +106,7 @@ static char *name = "thingmenu"; Err bitreich.org 70 i Err bitreich.org 70 i Entry **entries = NULL; Err bitreich.org 70 i int nentries = 0; Err bitreich.org 70 i+int exitentry = -1; Err bitreich.org 70 i int oneshot = 1; Err bitreich.org 70 i Bool ispressing = 0; Err bitreich.org 70 i Err bitreich.org 70 i@@ -157,6 +158,57 @@ keyrelease(XEvent *e) Err bitreich.org 70 i Err bitreich.org 70 i for (i = 0; i < nentries && !entries[i]->highlighted; i++); Err bitreich.org 70 i Err bitreich.org 70 i+ if (key >= XK_0 && key <= XK_9) { Err bitreich.org 70 i+ i = key - XK_0; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ } else if (key >= XK_KP_0 && key <= XK_KP_9) { Err bitreich.org 70 i+ i = key - XK_KP_0; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ switch (key) { Err bitreich.org 70 i+ case XK_KP_Insert: Err bitreich.org 70 i+ i = 0; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_KP_End: Err bitreich.org 70 i+ i = 1; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_KP_Down: Err bitreich.org 70 i+ i = 2; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_KP_Page_Down: Err bitreich.org 70 i+ i = 3; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_KP_Left: Err bitreich.org 70 i+ i = 4; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_KP_Begin: Err bitreich.org 70 i+ i = 5; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_KP_Right: Err bitreich.org 70 i+ i = 6; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_KP_Home: Err bitreich.org 70 i+ i = 7; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_KP_Up: Err bitreich.org 70 i+ i = 8; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case XK_KP_Page_Up: Err bitreich.org 70 i+ i = 9; Err bitreich.org 70 i+ key = XK_Return; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i switch (key) { Err bitreich.org 70 i case XK_k: Err bitreich.org 70 i key = XK_Up; Err bitreich.org 70 i@@ -183,6 +235,10 @@ keyrelease(XEvent *e) Err bitreich.org 70 i entries[i]->highlighted = True; Err bitreich.org 70 i drawentry(entries[i]); Err bitreich.org 70 i break; Err bitreich.org 70 i+ case XK_period: Err bitreich.org 70 i+ case XK_KP_Decimal: Err bitreich.org 70 i+ case XK_KP_Delete: Err bitreich.org 70 i+ i = exitentry; Err bitreich.org 70 i case XK_Return: Err bitreich.org 70 i case XK_space: Err bitreich.org 70 i if (i < nentries) { Err bitreich.org 70 i@@ -614,7 +670,7 @@ updateentries(void) Err bitreich.org 70 i void Err bitreich.org 70 i usage(void) Err bitreich.org 70 i { Err bitreich.org 70 i- fprintf(stderr, "usage: %s [-hxso] [-g geometry] [-w widthscaling] " Err bitreich.org 70 i+ fprintf(stderr, "usage: %s [-hnosx] [-g geometry] [-w widthscaling] " Err bitreich.org 70 i "[-e heightscaling] [--] " Err bitreich.org 70 i "label0 cmd0 [label1 cmd1 ...]\n", argv0); Err bitreich.org 70 i exit(1); Err bitreich.org 70 i@@ -623,7 +679,7 @@ usage(void) Err bitreich.org 70 i int Err bitreich.org 70 i main(int argc, char *argv[]) Err bitreich.org 70 i { Err bitreich.org 70 i- Bool addexit; Err bitreich.org 70 i+ Bool addexit, usenumpad; Err bitreich.org 70 i char *label, *cmd; Err bitreich.org 70 i int i, xr, yr, bitm; Err bitreich.org 70 i unsigned int wr, hr; Err bitreich.org 70 i@@ -631,6 +687,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i argv0 = argv[0]; Err bitreich.org 70 i Err bitreich.org 70 i addexit = True; Err bitreich.org 70 i+ usenumpad = False; Err bitreich.org 70 i Err bitreich.org 70 i if (argc < 2) Err bitreich.org 70 i usage(); Err bitreich.org 70 i@@ -654,6 +711,9 @@ main(int argc, char *argv[]) Err bitreich.org 70 i case 'e': Err bitreich.org 70 i heightscaling = atof(EARGF(usage())); Err bitreich.org 70 i break; Err bitreich.org 70 i+ case 'n': Err bitreich.org 70 i+ usenumpad = True; Err bitreich.org 70 i+ break; Err bitreich.org 70 i case 'o': Err bitreich.org 70 i horizontal = True; Err bitreich.org 70 i break; Err bitreich.org 70 i@@ -681,8 +741,15 @@ main(int argc, char *argv[]) Err bitreich.org 70 i die("realloc returned NULL"); Err bitreich.org 70 i if (!(entries[nentries-1] = calloc(1, sizeof(*entries[0])))) Err bitreich.org 70 i die("calloc returned NULL"); Err bitreich.org 70 i- if (!(entries[nentries-1]->label = strdup(label))) Err bitreich.org 70 i- die("strdup returned NULL\n"); Err bitreich.org 70 i+ if (usenumpad == True && nentries < 11) { Err bitreich.org 70 i+ if (!(asprintf(&entries[nentries-1]->label, Err bitreich.org 70 i+ "%d:%s", nentries-1, strdup(label)))) { Err bitreich.org 70 i+ die("asprintf returned NULL\n"); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ if (!(entries[nentries-1]->label = strdup(label))) Err bitreich.org 70 i+ die("strdup returned NULL\n"); Err bitreich.org 70 i+ } Err bitreich.org 70 i if (!(entries[nentries-1]->cmd = strdup(cmd))) Err bitreich.org 70 i die("strdup returned NULL\n"); Err bitreich.org 70 i entries[nentries-1]->forceexit = False; Err bitreich.org 70 i@@ -695,11 +762,17 @@ main(int argc, char *argv[]) Err bitreich.org 70 i die("realloc returned NULL"); Err bitreich.org 70 i if (!(entries[nentries-1] = calloc(1, sizeof(*entries[0])))) Err bitreich.org 70 i die("calloc returned NULL"); Err bitreich.org 70 i- if (!(entries[nentries-1]->label = strdup("cancel"))) Err bitreich.org 70 i- die("strdup returned NULL\n"); Err bitreich.org 70 i+ if (usenumpad == True) { Err bitreich.org 70 i+ if (!(entries[nentries-1]->label = strdup(".:cancel"))) Err bitreich.org 70 i+ die("strdup returned NULL\n"); Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ if (!(entries[nentries-1]->label = strdup("cancel"))) Err bitreich.org 70 i+ die("strdup returned NULL\n"); Err bitreich.org 70 i+ } Err bitreich.org 70 i if (!(entries[nentries-1]->cmd = strdup("exit"))) Err bitreich.org 70 i die("strdup returned NULL\n"); Err bitreich.org 70 i entries[nentries-1]->forceexit = True; Err bitreich.org 70 i+ exitentry = nentries - 1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) Err bitreich.org 70 .