| dmenu-grid-4.9.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| dmenu-grid-4.9.diff (3353B) | |
| --- | |
| 1 From 39ab9676914bd0d8105d0f96bbd7611a53077438 Mon Sep 17 00:00:00 2001 | |
| 2 From: Miles Alan <[email protected]> | |
| 3 Date: Sat, 4 Jul 2020 11:19:04 -0500 | |
| 4 Subject: [PATCH] Add -g option to display entries in the given number of… | |
| 5 columns | |
| 6 | |
| 7 This option can be used in conjunction with -l to format dmenu's options… | |
| 8 arbitrary size grids. For example, to create a 4 column by 6 line grid, … | |
| 9 could use: dmenu -g 4 -l 6 | |
| 10 --- | |
| 11 config.def.h | 3 ++- | |
| 12 dmenu.1 | 7 ++++++- | |
| 13 dmenu.c | 22 ++++++++++++++++------ | |
| 14 3 files changed, 24 insertions(+), 8 deletions(-) | |
| 15 | |
| 16 diff --git a/config.def.h b/config.def.h | |
| 17 index 1edb647..96cf3c9 100644 | |
| 18 --- a/config.def.h | |
| 19 +++ b/config.def.h | |
| 20 @@ -13,8 +13,9 @@ static const char *colors[SchemeLast][2] = { | |
| 21 [SchemeSel] = { "#eeeeee", "#005577" }, | |
| 22 [SchemeOut] = { "#000000", "#00ffff" }, | |
| 23 }; | |
| 24 -/* -l option; if nonzero, dmenu uses vertical list with given number of… | |
| 25 +/* -l and -g options; controls number of lines and columns in grid if >… | |
| 26 static unsigned int lines = 0; | |
| 27 +static unsigned int columns = 0; | |
| 28 | |
| 29 /* | |
| 30 * Characters not considered part of a word while deleting words | |
| 31 diff --git a/dmenu.1 b/dmenu.1 | |
| 32 index 323f93c..d0a734a 100644 | |
| 33 --- a/dmenu.1 | |
| 34 +++ b/dmenu.1 | |
| 35 @@ -4,6 +4,8 @@ dmenu \- dynamic menu | |
| 36 .SH SYNOPSIS | |
| 37 .B dmenu | |
| 38 .RB [ \-bfiv ] | |
| 39 +.RB [ \-g | |
| 40 +.IR columns ] | |
| 41 .RB [ \-l | |
| 42 .IR lines ] | |
| 43 .RB [ \-m | |
| 44 @@ -47,8 +49,11 @@ is faster, but will lock up X until stdin reaches end… | |
| 45 .B \-i | |
| 46 dmenu matches menu items case insensitively. | |
| 47 .TP | |
| 48 +.BI \-g " columns" | |
| 49 +dmenu lists items in a grid with the given number of columns. | |
| 50 +.TP | |
| 51 .BI \-l " lines" | |
| 52 -dmenu lists items vertically, with the given number of lines. | |
| 53 +dmenu lists items in a grid with the given number of lines. | |
| 54 .TP | |
| 55 .BI \-m " monitor" | |
| 56 dmenu is displayed on the monitor number supplied. Monitor numbers are … | |
| 57 diff --git a/dmenu.c b/dmenu.c | |
| 58 index 6b8f51b..d79b6bb 100644 | |
| 59 --- a/dmenu.c | |
| 60 +++ b/dmenu.c | |
| 61 @@ -77,7 +77,7 @@ calcoffsets(void) | |
| 62 int i, n; | |
| 63 | |
| 64 if (lines > 0) | |
| 65 - n = lines * bh; | |
| 66 + n = lines * columns * bh; | |
| 67 else | |
| 68 n = mw - (promptw + inputw + TEXTW("<") + TEXTW(">")); | |
| 69 /* calculate which items will begin the next page and previous … | |
| 70 @@ -152,9 +152,15 @@ drawmenu(void) | |
| 71 } | |
| 72 | |
| 73 if (lines > 0) { | |
| 74 - /* draw vertical list */ | |
| 75 - for (item = curr; item != next; item = item->right) | |
| 76 - drawitem(item, x, y += bh, mw - x); | |
| 77 + /* draw grid */ | |
| 78 + int i = 0; | |
| 79 + for (item = curr; item != next; item = item->right, i++) | |
| 80 + drawitem( | |
| 81 + item, | |
| 82 + x + ((i / lines) * ((mw - x) / columns… | |
| 83 + y + (((i % lines) + 1) * bh), | |
| 84 + (mw - x) / columns | |
| 85 + ); | |
| 86 } else if (matches) { | |
| 87 /* draw horizontal list */ | |
| 88 x += inputw; | |
| 89 @@ -708,9 +714,13 @@ main(int argc, char *argv[]) | |
| 90 } else if (i + 1 == argc) | |
| 91 usage(); | |
| 92 /* these options take one argument */ | |
| 93 - else if (!strcmp(argv[i], "-l")) /* number of lines i… | |
| 94 + else if (!strcmp(argv[i], "-g")) { /* number of colum… | |
| 95 + columns = atoi(argv[++i]); | |
| 96 + if (lines == 0) lines = 1; | |
| 97 + } else if (!strcmp(argv[i], "-l")) { /* number of lines… | |
| 98 lines = atoi(argv[++i]); | |
| 99 - else if (!strcmp(argv[i], "-m")) | |
| 100 + if (columns == 0) columns = 1; | |
| 101 + } else if (!strcmp(argv[i], "-m")) | |
| 102 mon = atoi(argv[++i]); | |
| 103 else if (!strcmp(argv[i], "-p")) /* adds prompt to le… | |
| 104 prompt = argv[++i]; | |
| 105 -- | |
| 106 2.23.1 | |
| 107 |