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 .