SMOLNET PORTAL home about changes
iAdding ARGBEGIN for flexible parameter handling and fixing the manpage. - 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 e54f54c03160ab7e6615e15f9ee0984ab5d2e9dc	/scm/thingmenu/commit/e54f54c03160ab7e6615e15f9ee0984ab5d2e9dc.gph	bitreich.org	70
1parent 0255257e75f6f3820d695394eb80cd20dcf78e78	/scm/thingmenu/commit/0255257e75f6f3820d695394eb80cd20dcf78e78.gph	bitreich.org	70
hAuthor: Christoph Lohmann <20h@r-36.net>	URL:mailto:20h@r-36.net	bitreich.org	70
iDate:   Sat,  4 Aug 2012 22:30:22 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iAdding ARGBEGIN for flexible parameter handling and fixing the manpage.	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  A arg.h                               |      41 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  M thingmenu.1                         |      11 ++++-------	Err	bitreich.org	70
i  M thingmenu.c                         |     113 +++++++++++++------------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i3 files changed, 91 insertions(+), 74 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/arg.h b/arg.h	/scm/thingmenu/file/arg.h.gph	bitreich.org	70
i@@ -0,0 +1,41 @@	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Copy me if you can.	Err	bitreich.org	70
i+ * by 20h	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#ifndef __ARG_H__	Err	bitreich.org	70
i+#define __ARG_H__	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+extern char *argv0;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define USED(x) ((void)(x))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define ARGBEGIN        for (argv0 = *argv, argv++, argc--;\	Err	bitreich.org	70
i+                                        argv[0] && argv[0][1]\	Err	bitreich.org	70
i+                                        && argv[0][0] == '-';\	Err	bitreich.org	70
i+                                        argc--, argv++) {\	Err	bitreich.org	70
i+                                char _argc;\	Err	bitreich.org	70
i+                                char **_argv;\	Err	bitreich.org	70
i+                                if (argv[0][1] == '-' && argv[0][2] == '\0') {\	Err	bitreich.org	70
i+                                        argv++;\	Err	bitreich.org	70
i+                                        argc--;\	Err	bitreich.org	70
i+                                        break;\	Err	bitreich.org	70
i+                                }\	Err	bitreich.org	70
i+                                for (argv[0]++, _argv = argv; argv[0][0];\	Err	bitreich.org	70
i+                                                argv[0]++) {\	Err	bitreich.org	70
i+                                        if (_argv != argv)\	Err	bitreich.org	70
i+                                                break;\	Err	bitreich.org	70
i+                                        _argc = argv[0][0];\	Err	bitreich.org	70
i+                                        switch (_argc)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define ARGEND                        }\	Err	bitreich.org	70
i+                                USED(_argc);\	Err	bitreich.org	70
i+                        }\	Err	bitreich.org	70
i+                        USED(argv);\	Err	bitreich.org	70
i+                        USED(argc);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define EARGF(x)        ((argv[1] == NULL)? ((x), abort(), (char *)0) :\	Err	bitreich.org	70
i+                        (argc--, argv++, argv[0]))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#endif	Err	bitreich.org	70
i+	Err	bitreich.org	70
1diff --git a/thingmenu.1 b/thingmenu.1	/scm/thingmenu/file/thingmenu.1.gph	bitreich.org	70
i@@ -13,8 +13,8 @@	Err	bitreich.org	70
i .Op Fl s	Err	bitreich.org	70
i .Op Fl o	Err	bitreich.org	70
i .Op Fl g Ar geometry	Err	bitreich.org	70
i-.Op Fl ws Ar widthscaling	Err	bitreich.org	70
i-.Op Fl hs Ar heightscaling	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 .Op Fl -	Err	bitreich.org	70
i .Ar label0 cmd0 [label1 cmd1 ...]	Err	bitreich.org	70
i .Ek	Err	bitreich.org	70
i@@ -49,7 +49,6 @@ options and default settings.	Err	bitreich.org	70
i Do not append a	Err	bitreich.org	70
i .Qq "Cancel"	Err	bitreich.org	70
i menu item.	Err	bitreich.org	70
i-.	Err	bitreich.org	70
i .Bd -filled	Err	bitreich.org	70
i .It Fl s	Err	bitreich.org	70
i Disable the oneshot behaviour. After one button click	Err	bitreich.org	70
i@@ -66,10 +65,10 @@ Use the horizontal layout.	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
i-.It Fl ws	Err	bitreich.org	70
i+.It Fl w	Err	bitreich.org	70
i Define the width scaling.	Err	bitreich.org	70
i .	Err	bitreich.org	70
i-.It Fl hs	Err	bitreich.org	70
i+.It Fl e	Err	bitreich.org	70
i Define the height scaling.	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .El	Err	bitreich.org	70
i@@ -91,7 +90,6 @@ After that the menu will not exit (-s).	Err	bitreich.org	70
i .Ed	Err	bitreich.org	70
i .Bd -literal	Err	bitreich.org	70
i         % thingmenu -s -ww 300 -- "Reboot now" reboot	Err	bitreich.org	70
i-	Err	bitreich.org	70
i .Ed	Err	bitreich.org	70
i .Bd -filled	Err	bitreich.org	70
i This will create a centered menu, which is aligned based on the length of the	Err	bitreich.org	70
i@@ -99,7 +97,6 @@ label texts. After the first clicked entry it will exit.	Err	bitreich.org	70
i .Ed	Err	bitreich.org	70
i .Bd -literal	Err	bitreich.org	70
i         % thingmenu "Force reboot" "reboot -f" Shutdown shutdown	Err	bitreich.org	70
i-	Err	bitreich.org	70
i .Ed	Err	bitreich.org	70
i .Bd -filled	Err	bitreich.org	70
i An example how to create multi-level menus is shown in the thingmenu-menu.sh	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,10 @@ int nentries = 0;	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+char *argv0;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#include "arg.h"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i /* configuration, allows nested code to access above variables */	Err	bitreich.org	70
i #include "config.h"	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -594,10 +598,10 @@ updateentries(void)	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i-usage(char *argv0)	Err	bitreich.org	70
i+usage(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        fprintf(stderr, "usage: %s [-hxso] [-g geometry] [-ws widthscaling] "	Err	bitreich.org	70
i-                        "[-hs heightscaling] [--] "	Err	bitreich.org	70
i+        fprintf(stderr, "usage: %s [-hxso] [-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 }	Err	bitreich.org	70
i@@ -610,74 +614,49 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         int i, xr, yr, bitm;	Err	bitreich.org	70
i         unsigned int wr, hr;	Err	bitreich.org	70
i 	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 	Err	bitreich.org	70
i         if (argc < 2)	Err	bitreich.org	70
i-                usage(argv[0]);	Err	bitreich.org	70
i-        i = 1;	Err	bitreich.org	70
i-        for (; argv[i]; i++) {	Err	bitreich.org	70
i-                if (argv[i][0] != '-')	Err	bitreich.org	70
i-                        break;	Err	bitreich.org	70
i-                if (argv[i][1] == '-') {	Err	bitreich.org	70
i-                        i++;	Err	bitreich.org	70
i-                        break;	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                switch (argv[i][1]) {	Err	bitreich.org	70
i-                case 'g':	Err	bitreich.org	70
i-                        if (i >= argc - 1)	Err	bitreich.org	70
i-                                break;	Err	bitreich.org	70
i-                        bitm = XParseGeometry(argv[i+1], &xr, &yr, &wr, &hr);	Err	bitreich.org	70
i-                        if (bitm & XValue)	Err	bitreich.org	70
i-                                wx = xr;	Err	bitreich.org	70
i-                        if (bitm & YValue)	Err	bitreich.org	70
i-                                wy = yr;	Err	bitreich.org	70
i-                        if (bitm & WidthValue)	Err	bitreich.org	70
i-                                ww = (int)wr;	Err	bitreich.org	70
i-                        if (bitm & HeightValue)	Err	bitreich.org	70
i-                                wh = (int)hr;	Err	bitreich.org	70
i-                        if (bitm & XNegative && wx == 0)	Err	bitreich.org	70
i-                                wx = -1;	Err	bitreich.org	70
i-                        if (bitm & YNegative && wy == 0)	Err	bitreich.org	70
i-                                wy = -1;	Err	bitreich.org	70
i-                        i++;	Err	bitreich.org	70
i-                        break;	Err	bitreich.org	70
i-                case 'h':	Err	bitreich.org	70
i-                        switch ((i >= argc - 1)? 0 : argv[i][2]) {	Err	bitreich.org	70
i-                        case 's':	Err	bitreich.org	70
i-                                heightscaling = atof(argv[i+1]);	Err	bitreich.org	70
i-                                i++;	Err	bitreich.org	70
i-                                break;	Err	bitreich.org	70
i-                        default:	Err	bitreich.org	70
i-                                usage(argv[0]);	Err	bitreich.org	70
i-                        }	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-                case 's':	Err	bitreich.org	70
i-                        oneshot = 0;	Err	bitreich.org	70
i-                        break;	Err	bitreich.org	70
i-                case 'w':	Err	bitreich.org	70
i-                        switch ((i >= argc - 1)? 0 : argv[i][2]) {	Err	bitreich.org	70
i-                        case 's':	Err	bitreich.org	70
i-                                widthscaling = atof(argv[i+1]);	Err	bitreich.org	70
i-                                i++;	Err	bitreich.org	70
i-                                break;	Err	bitreich.org	70
i-                        default:	Err	bitreich.org	70
i-                                usage(argv[0]);	Err	bitreich.org	70
i-                        }	Err	bitreich.org	70
i-                        break;	Err	bitreich.org	70
i-                case 'x':	Err	bitreich.org	70
i-                        addexit = False;	Err	bitreich.org	70
i-                        break;	Err	bitreich.org	70
i-                default:	Err	bitreich.org	70
i-                        usage(argv[0]);	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i+                usage();	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        ARGBEGIN {	Err	bitreich.org	70
i+        case 'g':	Err	bitreich.org	70
i+                bitm = XParseGeometry(EARGF(usage()), &xr, &yr, &wr, &hr);	Err	bitreich.org	70
i+                if (bitm & XValue)	Err	bitreich.org	70
i+                        wx = xr;	Err	bitreich.org	70
i+                if (bitm & YValue)	Err	bitreich.org	70
i+                        wy = yr;	Err	bitreich.org	70
i+                if (bitm & WidthValue)	Err	bitreich.org	70
i+                        ww = (int)wr;	Err	bitreich.org	70
i+                if (bitm & HeightValue)	Err	bitreich.org	70
i+                        wh = (int)hr;	Err	bitreich.org	70
i+                if (bitm & XNegative && wx == 0)	Err	bitreich.org	70
i+                        wx = -1;	Err	bitreich.org	70
i+                if (bitm & YNegative && wy == 0)	Err	bitreich.org	70
i+                        wy = -1;	Err	bitreich.org	70
i+                break;	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 'o':	Err	bitreich.org	70
i+                horizontal = True;	Err	bitreich.org	70
i+                break;	Err	bitreich.org	70
i+        case 's':	Err	bitreich.org	70
i+                oneshot = 0;	Err	bitreich.org	70
i+                break;	Err	bitreich.org	70
i+        case 'w':	Err	bitreich.org	70
i+                widthscaling = atof(EARGF(usage()));	Err	bitreich.org	70
i+                break;	Err	bitreich.org	70
i+        case 'x':	Err	bitreich.org	70
i+                addexit = False;	Err	bitreich.org	70
i+                break;	Err	bitreich.org	70
i+        default:	Err	bitreich.org	70
i+                usage();	Err	bitreich.org	70
i+        } ARGEND;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        for (; argv[i]; i++) {	Err	bitreich.org	70
i+        for (i = 0; argv[i]; i++) {	Err	bitreich.org	70
i                 label = argv[i];	Err	bitreich.org	70
i                 if (!argv[i+1])	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i@@ -696,7 +675,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i                         die("strdup returned NULL\n");	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i         if (nentries < 1)	Err	bitreich.org	70
i-                usage(argv[0]);	Err	bitreich.org	70
i+                usage();	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         if (addexit) {	Err	bitreich.org	70
i                 entries = realloc(entries, sizeof(entries[0])*(++nentries));	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/thingmenu/commit/e54f54c03160...
Content-Typetext/plain; charset=utf-8