Index: head/x11/thinglaunch/Makefile =================================================================== --- head/x11/thinglaunch/Makefile (revision 482820) +++ head/x11/thinglaunch/Makefile (revision 482821) @@ -1,27 +1,29 @@ # Created by: Emanuel Haupt # $FreeBSD$ PORTNAME= thinglaunch PORTVERSION= 1.8 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= x11 MASTER_SITES= LOCAL/ehaupt MAINTAINER= ehaupt@FreeBSD.org COMMENT= Very fast launcher program for X + +LICENSE= MIT USE_XORG= x11 xorgproto CPPFLAGS+= -I${LOCALBASE}/include -lX11 LDFLAGS+= -L${LOCALBASE}/lib PLIST_FILES= bin/thinglaunch do-build: ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} ${WRKSRC}/${PORTNAME}.c \ -o ${WRKSRC}/${PORTNAME} do-install: ${INSTALL_PROGRAM} ${WRKSRC}/${PORTNAME} ${STAGEDIR}${PREFIX}/bin .include Index: head/x11/thinglaunch/files/patch-thinglaunch.c =================================================================== --- head/x11/thinglaunch/files/patch-thinglaunch.c (revision 482820) +++ head/x11/thinglaunch/files/patch-thinglaunch.c (revision 482821) @@ -1,111 +1,111 @@ ---- thinglaunch.c.orig 2004-09-20 16:27:56.000000000 +0200 -+++ thinglaunch.c 2009-09-01 22:11:10.000000000 +0200 +--- thinglaunch.c.orig 2004-09-20 14:27:56 UTC ++++ thinglaunch.c @@ -19,10 +19,14 @@ */ #include #include +#include #include #include #include #include +#ifdef __FreeBSD__ +#include +#endif static void createWindow(); static void setupGC(); -@@ -50,10 +54,13 @@ +@@ -50,10 +54,13 @@ unsigned long black, white; /* the actual commandline */ char command[MAXCMD+1]; +size_t cursor_pos; int main(int argc, char ** argv) { command[0] = 0x0; + cursor_pos = 0; + createWindow(); setupGC(); -@@ -209,15 +216,15 @@ +@@ -209,15 +216,15 @@ static void redraw() { int font_height; int textwidth; - + font_height = font_info->ascent + font_info->descent; - textwidth = XTextWidth(font_info, command, strlen(command)); + textwidth = XTextWidth(font_info, command, cursor_pos); XFillRectangle(display, win, rectgc, 0, 0, WINWIDTH, WINHEIGHT); XDrawRectangle(display, win, gc, 0, 0, WINWIDTH-1, WINHEIGHT-1); XDrawString(display, win, gc, 2, font_height+2, command, strlen(command)); - XDrawLine(display, win, gc, 2 + textwidth, font_height + 2, - 2 + textwidth + 10, font_height+2); + XDrawLine(display, win, gc, 2 + textwidth, font_height + 4, + 2 + textwidth + 10, font_height+4); XFlush(display); -@@ -229,22 +236,36 @@ +@@ -229,22 +236,36 @@ static void keypress(XKeyEvent * keyeven #define KEYBUFLEN 20 char buffer[KEYBUFLEN+1]; KeySym key_symbol; - int len; + int len, tmp_pos; len = XLookupString(keyevent, buffer, 1, &key_symbol, NULL); buffer[len] = 0x0; + len = strlen(command); switch(key_symbol) { - case 0xff1b: /* this is escape */ + case XK_Escape: exit(0); break; - case 0xff08: /* backspace */ - len = strlen(command); - if (len > 0) { - command[len-1] = 0x0; - } + case XK_BackSpace: + if (cursor_pos) + for (tmp_pos = --cursor_pos; tmp_pos <= len; tmp_pos++) + command[tmp_pos] = command[tmp_pos+1]; -+ break; + break; +- case 0xff0d: /* enter */ + case XK_Left: + if (cursor_pos) + cursor_pos--; + break; + case XK_Right: + if (cursor_pos < len) + cursor_pos++; + break; + case XK_Home: + cursor_pos = 0; + break; + case XK_End: + cursor_pos = len; - break; -- case 0xff0d: /* enter */ ++ break; + case XK_Return: execcmd(); break; default: -@@ -253,10 +274,11 @@ +@@ -253,10 +274,11 @@ static void keypress(XKeyEvent * keyeven /* normal printable chars */ if (key_symbol >= 0x20 && key_symbol <= 0x7e) { - len = strlen(command); if (len < MAXCMD) { - command[len] = buffer[0]; - command[len+1] = 0x0; + if (cursor_pos != len) + for (tmp_pos = len; tmp_pos > cursor_pos; tmp_pos--) + command[tmp_pos] = command[tmp_pos-1]; + command[cursor_pos++] = buffer[0]; } } redraw();