iAdding horizontal and 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 2e6e710ce313489069e9de6905e1e7f91499910f /scm/thingmenu/commit/2e6e710ce313489069e9de6905e1e7f91499910f.gph bitreich.org 70
1parent 9f2398547291d67362c3c6499f64deed736ef424 /scm/thingmenu/commit/9f2398547291d67362c3c6499f64deed736ef424.gph bitreich.org 70
hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70
iDate: Sat, 2 Jul 2011 12:14:12 +0200 Err bitreich.org 70
i Err bitreich.org 70
iAdding horizontal and manpage. Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M Makefile | 8 +++++++- Err bitreich.org 70
i D README.md | 26 -------------------------- Err bitreich.org 70
i A thingmenu.1 | 123 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i M thingmenu.c | 84 +++++++++++++++++++++++-------- Err bitreich.org 70
i Err bitreich.org 70
i4 files changed, 192 insertions(+), 49 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/Makefile b/Makefile /scm/thingmenu/file/Makefile.gph bitreich.org 70
i@@ -36,7 +36,7 @@ clean: Err bitreich.org 70
i dist: clean Err bitreich.org 70
i @echo creating dist tarball Err bitreich.org 70
i @mkdir -p ${NAME}-${VERSION} Err bitreich.org 70
i- @cp -R LICENSE Makefile README.md config.mk \ Err bitreich.org 70
i+ @cp -R LICENSE Makefile ${NAME}.1 README.md config.mk \ Err bitreich.org 70
i ${SRC} *.h ${NAME}-${VERSION} Err bitreich.org 70
i @tar -cf ${NAME}-${VERSION}.tar ${NAME}-${VERSION} Err bitreich.org 70
i @gzip ${NAME}-${VERSION}.tar Err bitreich.org 70
i@@ -52,9 +52,15 @@ install: all Err bitreich.org 70
i @mkdir -p ${DESTDIR}${PREFIX}/bin Err bitreich.org 70
i @cp -f ${NAME} ${DESTDIR}${PREFIX}/bin Err bitreich.org 70
i @chmod 755 ${DESTDIR}${PREFIX}/bin/${NAME} Err bitreich.org 70
i+ @echo installing manual page to ${DESTDIR}${MANPREFIX}/man1 Err bitreich.org 70
i+ @mkdir -p ${DESTDIR}${MANPREFIX}/man1 Err bitreich.org 70
i+ @cp -f ${NAME}.1 ${DESTDIR}${MANPREFIX}/man1 Err bitreich.org 70
i+ @chmod 644 ${DESTDIR}${MANPREFIX}/man1/${NAME}.1 Err bitreich.org 70
i Err bitreich.org 70
i uninstall: Err bitreich.org 70
i @echo removing executable file from ${DESTDIR}${PREFIX}/bin Err bitreich.org 70
i @rm -f ${DESTDIR}${PREFIX}/bin/${NAME} Err bitreich.org 70
i+ @echo removing manual page from ${DESTDIR}${PREFIX}/man1 Err bitreich.org 70
i+ @rm -f ${DESTDIR}${MANPREFIX}/man1/${NAME}.1 Err bitreich.org 70
i Err bitreich.org 70
i .PHONY: all options clean dist install uninstall Err bitreich.org 70
1diff --git a/README.md b/README.md /scm/thingmenu/file/README.md.gph bitreich.org 70
i@@ -1,26 +0,0 @@ Err bitreich.org 70
i-# Thingmenu - a simple X11 menu Err bitreich.org 70
i- Err bitreich.org 70
i-This application evolved out of the need to be able to run commands Err bitreich.org 70
i-in a touchscreen environment. Err bitreich.org 70
i- Err bitreich.org 70
i-## Installation Err bitreich.org 70
i- Err bitreich.org 70
i- % tar -xzvf thingmenu-*.tar.gz Err bitreich.org 70
i- % cd thingmenu Err bitreich.org 70
i- % make Err bitreich.org 70
i- % sudo PREFIX=/usr make install Err bitreich.org 70
i- Err bitreich.org 70
i-## Usage Err bitreich.org 70
i- Err bitreich.org 70
i- # This will open a 300px wide menu, which is showing an Err bitreich.org 70
i- # entry "Reboot now". When being clicked this entry will run Err bitreich.org 70
i- # "reboot". After that the menu will not exit (-s). Err bitreich.org 70
i- % thingmenu -s -ww 300 -- "Reboot now:reboot" Err bitreich.org 70
i- Err bitreich.org 70
i- # This will create a centered menu, which is aligned based Err bitreich.org 70
i- # on the length of the label texts. After the first clicked Err bitreich.org 70
i- # entry it will exit. Err bitreich.org 70
i- % thingmenu "Force reboot:reboot -f" "Shutdown:shutdown" Err bitreich.org 70
i- Err bitreich.org 70
i-Have fun! 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@@ -0,0 +1,123 @@ Err bitreich.org 70
i+.Dd July 02, 2011 Err bitreich.org 70
i+.Dt THINGMENU 1 Err bitreich.org 70
i+.Os Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh NAME Err bitreich.org 70
i+.Nm thingmenu Err bitreich.org 70
i+.Nd a simple menu for X11 Err bitreich.org 70
i+. 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 o Err bitreich.org 70
i+.Op Fl wh Ar height Err bitreich.org 70
i+.Op Fl ww Ar width Err bitreich.org 70
i+.Op Fl wx Ar x position Err bitreich.org 70
i+.Op Fl wy Ar y position Err bitreich.org 70
i+.Op Fl - Err bitreich.org 70
i+.Ar [label:]cmd ... Err bitreich.org 70
i+.Ek Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh DESCRIPTION Err bitreich.org 70
i+.Bd -filled Err bitreich.org 70
i+.Nm Err bitreich.org 70
i+is a simple menu for X11. The menu can be displayed in a horizontal or Err bitreich.org 70
i+a vertical layout. The manual specification of the parameters of the Err bitreich.org 70
i+menu makes it flexible to be used in many circumstances. Err bitreich.org 70
i+.Ed Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh IMPLEMENTATION Err bitreich.org 70
i+.Bd -filled Err bitreich.org 70
i+Installation is as straighforward as grabbing the tar.gz file, extracting Err bitreich.org 70
i+it and running Err bitreich.org 70
i+.Qq "make; make install;" Err bitreich.org 70
i+inside the Err bitreich.org 70
i+.Qq "thingmenu-*" Err bitreich.org 70
i+directory. Err bitreich.org 70
i+The prefix for the installation can easily set using Err bitreich.org 70
i+.Qq "PREFIX=/usr make install". Err bitreich.org 70
i+.Ed Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh OPTIONS Err bitreich.org 70
i+.Nm Err bitreich.org 70
i+options and default settings. Err bitreich.org 70
i+.Pp Err bitreich.org 70
i+.Bl -tag -width ".Fl test Ao Ar string Ac" Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Fl x 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+.Nm Err bitreich.org 70
i+won't exit, Err bitreich.org 70
i+except when the Err bitreich.org 70
i+.Qq "Cancel" Err bitreich.org 70
i+button is clicked. Err bitreich.org 70
i+.Ed Err bitreich.org 70
i+. 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 wh Err bitreich.org 70
i+Define the overall window height. Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Fl ww Err bitreich.org 70
i+Define the overall window width. Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Fl wx Err bitreich.org 70
i+Define the absolute x position. Err bitreich.org 70
i+. Err bitreich.org 70
i+.It Fl wy Err bitreich.org 70
i+Define the absolute y position. Err bitreich.org 70
i+. Err bitreich.org 70
i+.El Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh CUSTOMIZATION Err bitreich.org 70
i+.Bd -filled Err bitreich.org 70
i+.Nm Err bitreich.org 70
i+is customized by creating a custom config.h and (re)compiling the Err bitreich.org 70
i+source code. Err bitreich.org 70
i+.Ed Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh EXAMPLES Err bitreich.org 70
i+.Bd -filled Err bitreich.org 70
i+Open a 300px wide menu, which is showing an entry Err bitreich.org 70
i+.Qq "Reboot now". Err bitreich.org 70
i+When being clicked this entry will run Err bitreich.org 70
i+.Qq "reboot". Err bitreich.org 70
i+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+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+. Err bitreich.org 70
i+.Sh FILES Err bitreich.org 70
i+LICENSE, thingmenu-menu.sh, config.def.h, config.h Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh AUTHORS Err bitreich.org 70
i+See LICENSE file for authors in the distribution. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh LICENSE Err bitreich.org 70
i+.Nm Err bitreich.org 70
i+is released under the MIT/X Consortium License. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh BUGS Err bitreich.org 70
i+.Ss "Reporting Bugs" Err bitreich.org 70
i+Report bugs to: Err bitreich.org 70
i+.An "Christoph Lohmann" Aq 20h@R-36.net 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@@ -91,8 +91,12 @@ static void (*handler[LASTEvent]) (XEvent *) = { Err bitreich.org 70
i static Display *dpy; Err bitreich.org 70
i static DC dc; Err bitreich.org 70
i static Window root, win; Err bitreich.org 70
i-static Bool running = True; Err bitreich.org 70
i-static int ww = 0, wh = 0, wx = 0, wy = 0; Err bitreich.org 70
i+static Bool running = True, horizontal = False; Err bitreich.org 70
i+/* Err bitreich.org 70
i+ * ww = window width; www = wanted width window; wh = window height; Err bitreich.org 70
i+ * wx = window x position; wy = window y position; Err bitreich.org 70
i+ */ Err bitreich.org 70
i+static int ww = 0, www = 0, wh = 0, wx = 0, wy = 0; Err bitreich.org 70
i static char *name = "thingmenu"; Err bitreich.org 70
i Err bitreich.org 70
i Entry **entries = NULL; Err bitreich.org 70
i@@ -384,17 +388,28 @@ setup(void) Err bitreich.org 70
i Err bitreich.org 70
i /* init appearance */ Err bitreich.org 70
i Err bitreich.org 70
i+ for (i = 0, www = 0; i < nentries; i++) { Err bitreich.org 70
i+ ls = textnw(entries[i]->label, Err bitreich.org 70
i+ strlen(entries[i]->label)); Err bitreich.org 70
i+ if (ls > www) Err bitreich.org 70
i+ www = ls; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ www *= 1.5; Err bitreich.org 70
i+ Err bitreich.org 70
i if (ww == 0) { Err bitreich.org 70
i- for (i = 0, ww = 0; i < nentries; i++) { Err bitreich.org 70
i- ls = textnw(entries[i]->label, Err bitreich.org 70
i- strlen(entries[i]->label)); Err bitreich.org 70
i- if (ls > ww) Err bitreich.org 70
i- ww = ls; Err bitreich.org 70
i+ if (horizontal) { Err bitreich.org 70
i+ ww = www * nentries; Err bitreich.org 70
i+ } else { Err bitreich.org 70
i+ ww = www; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ } Err bitreich.org 70
i+ if (wh == 0) { Err bitreich.org 70
i+ if (horizontal) { Err bitreich.org 70
i+ wh = dc.font.height * 2; Err bitreich.org 70
i+ } else { Err bitreich.org 70
i+ wh = nentries * (dc.font.height * 2); Err bitreich.org 70
i } Err bitreich.org 70
i- ww *= 1.5; Err bitreich.org 70
i } Err bitreich.org 70
i- if (wh == 0) Err bitreich.org 70
i- wh = (nentries + 2) * dc.font.height + 4; Err bitreich.org 70
i if (wy == 0) Err bitreich.org 70
i wy = (sh - wh) / 2; Err bitreich.org 70
i if (wx == 0) Err bitreich.org 70
i@@ -473,22 +488,35 @@ unpress() Err bitreich.org 70
i void Err bitreich.org 70
i updateentries(void) Err bitreich.org 70
i { Err bitreich.org 70
i- int i, y = 0, h; Err bitreich.org 70
i+ int i, x, y, h, w; Err bitreich.org 70
i Err bitreich.org 70
i- h = wh / nentries; Err bitreich.org 70
i+ x = 0; Err bitreich.org 70
i+ y = 0; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (horizontal) { Err bitreich.org 70
i+ h = wh; Err bitreich.org 70
i+ w = www; Err bitreich.org 70
i+ } else { Err bitreich.org 70
i+ h = wh / nentries; Err bitreich.org 70
i+ w = ww; Err bitreich.org 70
i+ } Err bitreich.org 70
i for(i = 0; i < nentries; i++) { Err bitreich.org 70
i- entries[i]->x = 0; Err bitreich.org 70
i+ entries[i]->x = x; Err bitreich.org 70
i entries[i]->y = y; Err bitreich.org 70
i- entries[i]->w = ww; Err bitreich.org 70
i+ entries[i]->w = w; Err bitreich.org 70
i entries[i]->h = h; Err bitreich.org 70
i- y += h; Err bitreich.org 70
i+ if (horizontal) { Err bitreich.org 70
i+ x += w; Err bitreich.org 70
i+ } else { Err bitreich.org 70
i+ y += h; Err bitreich.org 70
i+ } Err bitreich.org 70
i } 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 { Err bitreich.org 70
i- fprintf(stderr, "usage: %s [-hs] [-wh height] [-ww width] " Err bitreich.org 70
i+ fprintf(stderr, "usage: %s [-hxso] [-wh height] [-ww width] " Err bitreich.org 70
i "[-wx x position] [-wy y position] [--] " Err bitreich.org 70
i "label:cmd ...\n", argv0); Err bitreich.org 70
i exit(1); Err bitreich.org 70
i@@ -497,9 +525,13 @@ usage(char *argv0) 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 char *label, *cmd; Err bitreich.org 70
i int i; Err bitreich.org 70
i 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@@ -515,6 +547,9 @@ main(int argc, char *argv[]) Err bitreich.org 70
i switch (argv[i][1]) { Err bitreich.org 70
i case 'h': Err bitreich.org 70
i usage(argv[0]); 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@@ -540,6 +575,9 @@ main(int argc, char *argv[]) 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@@ -568,12 +606,14 @@ main(int argc, char *argv[]) Err bitreich.org 70
i if (nentries < 1) Err bitreich.org 70
i usage(argv[0]); Err bitreich.org 70
i Err bitreich.org 70
i- entries = realloc(entries, sizeof(entries[0])*(++nentries)); Err bitreich.org 70
i- entries[nentries-1] = malloc(sizeof(*entries[0])); Err bitreich.org 70
i- bzero(entries[nentries-1], sizeof(*entries[0])); Err bitreich.org 70
i- entries[nentries-1]->label = strdup("cancel"); Err bitreich.org 70
i- entries[nentries-1]->cmd = "exit"; Err bitreich.org 70
i- entries[nentries-1]->forceexit = True; Err bitreich.org 70
i+ if (addexit) { Err bitreich.org 70
i+ entries = realloc(entries, sizeof(entries[0])*(++nentries)); Err bitreich.org 70
i+ entries[nentries-1] = malloc(sizeof(*entries[0])); Err bitreich.org 70
i+ bzero(entries[nentries-1], sizeof(*entries[0])); Err bitreich.org 70
i+ entries[nentries-1]->label = strdup("cancel"); Err bitreich.org 70
i+ entries[nentries-1]->cmd = "exit"; Err bitreich.org 70
i+ entries[nentries-1]->forceexit = True; Err bitreich.org 70
i+ } Err bitreich.org 70
i Err bitreich.org 70
i if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) Err bitreich.org 70
i fprintf(stderr, "warning: no locale support\n"); Err bitreich.org 70
.
Response:
text/plain