errx(1, "improper position: %s", optarg);
}
-/* parse color string */
+/* parse font string */
static void
parsefonts(const char *s)
{
struct Menu *menu;
struct Item *item;
struct Item *previtem = NULL;
+ struct Item *lastitem;
KeySym ksym;
XEvent ev;
/* cycle through menu */
item = NULL;
- if (ksym == XK_Home) {
+ if (ksym == XK_Home || ksym == KSYMFIRST) {
item = itemcycle(currmenu, ITEMFIRST);
- } else if (ksym == XK_End) {
+ } else if (ksym == XK_End || ksym == KSYMLAST) {
item = itemcycle(currmenu, ITEMLAST);
- } else if (ksym == XK_ISO_Left_Tab || ksym == XK_Up) {
+ } else if (ksym == XK_ISO_Left_Tab || ksym == XK_Up || ksym == KSYMUP) {
item = itemcycle(currmenu, ITEMPREV);
- } else if (ksym == XK_Tab || ksym == XK_Down) {
+ } else if (ksym == XK_Tab || ksym == XK_Down || ksym == KSYMDOWN) {
item = itemcycle(currmenu, ITEMNEXT);
- } else if ((ksym == XK_Return || ksym == XK_Right) &&
- currmenu->selected != NULL) {
+ } else if (ksym >= XK_1 && ksym <= XK_9){
+ item = itemcycle(currmenu, ITEMFIRST);
+ lastitem = itemcycle(currmenu, ITEMLAST);
+ for (int i = ksym - XK_1; i > 0 && item != lastitem; i--) {
+ currmenu->selected = item;
+ item = itemcycle(currmenu, ITEMNEXT);
+ }
+ } else if ((ksym == XK_Return || ksym == XK_Right || ksym == KSYMRIGHT) &&
+ currmenu->selected != NULL) {
item = currmenu->selected;
goto selectitem;
- } else if ((ksym == XK_Escape || ksym == XK_Left) &&
+ } else if ((ksym == XK_Escape || ksym == XK_Left || ksym == KSYMLEFT) &&
currmenu->parent != NULL) {
item = currmenu->parent->selected;
currmenu = currmenu->parent;