--- config.def.h | 2 ++ dmenu.1 | 4 ++++ dmenu.c | 18 ++++++++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/config.def.h b/config.def.h index 1edb647..d7fd009 100644 --- a/config.def.h +++ b/config.def.h _AT_@ -21,3 +21,5 @@ static unsigned int lines = 0; * for example: " /?\"&[]" */ static const char worddelimiters[] = " "; + +static int floating_window = 0; diff --git a/dmenu.1 b/dmenu.1 index 323f93c..c1cb38d 100644 --- a/dmenu.1 +++ b/dmenu.1 _AT_@ -4,6 +4,7 @@ dmenu \- dynamic menu .SH SYNOPSIS .B dmenu .RB [ \-bfiv ] +.RB [ \-fw ] .RB [ \-l .IR lines ] .RB [ \-m _AT_@ -47,6 +48,9 @@ is faster, but will lock up X until stdin reaches end\-of\-file. .B \-i dmenu matches menu items case insensitively. .TP +.B \-fw +dmenu appears as a floating window. +.TP .BI \-l " lines" dmenu lists items vertically, with the given number of lines. .TP diff --git a/dmenu.c b/dmenu.c index 86dbe16..31d6a0f 100644 --- a/dmenu.c +++ b/dmenu.c _AT_@ -649,6 +649,12 @@ setup(void) x = info[i].x_org; y = info[i].y_org + (topbar ? 0 : info[i].height - mh); mw = info[i].width; + if (floating_window) + { + x += info[i].width / 3; + y = info[i].height / 4; + mw -= 2 * info[i].width / 3; + } XFree(info); } else #endif _AT_@ -659,6 +665,12 @@ setup(void) x = 0; y = topbar ? 0 : wa.height - mh; mw = wa.width; + if (floating_window) + { + x = wa.width / 3; + y = wa.height / 4; + mw -= 2 * wa.width / 3; + } } promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0; inputw = MIN(inputw, mw/3); _AT_@ -698,7 +710,7 @@ setup(void) static void usage(void) { - fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" + fputs("usage: dmenu [-bfiv] [-fw] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); exit(1); } _AT_@ -721,7 +733,9 @@ main(int argc, char *argv[]) else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ fstrncmp = strncasecmp; fstrstr = cistrstr; - } else if (i + 1 == argc) + } else if (!strcmp(argv[i], "-fw")) /* floating window */ + floating_window = 1; + else if (i + 1 == argc) usage(); /* these options take one argument */ else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */ -- 2.29.2Received on Sun Nov 29 2020 - 18:59:50 CET
This archive was generated by hypermail 2.3.0 : Sun Nov 29 2020 - 19:00:42 CET