Add patches
This commit is contained in:
4
README
4
README
@@ -2,6 +2,10 @@ dmenu - dynamic menu
|
|||||||
====================
|
====================
|
||||||
dmenu is an efficient dynamic menu for X.
|
dmenu is an efficient dynamic menu for X.
|
||||||
|
|
||||||
|
Patches
|
||||||
|
-------
|
||||||
|
+ Case insensitive
|
||||||
|
+ Center
|
||||||
|
|
||||||
Requirements
|
Requirements
|
||||||
------------
|
------------
|
||||||
|
|||||||
24
config.h
Normal file
24
config.h
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/* See LICENSE file for copyright and license details. */
|
||||||
|
/* Default settings; can be overriden by command line. */
|
||||||
|
|
||||||
|
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
|
||||||
|
/* -fn option overrides fonts[0]; default X11 font or font set */
|
||||||
|
static const char *fonts[] = {
|
||||||
|
"FiraCode Nerd Font Mono:size=13",
|
||||||
|
"monospace:size=10"
|
||||||
|
};
|
||||||
|
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
|
||||||
|
static const char *colors[SchemeLast][2] = {
|
||||||
|
/* fg bg */
|
||||||
|
[SchemeNorm] = { "#ffffff", "#1c1b1d" },
|
||||||
|
[SchemeSel] = { "#1c1b1d", "#98c379" },
|
||||||
|
[SchemeOut] = { "#000000", "#00ffff" },
|
||||||
|
};
|
||||||
|
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
|
||||||
|
static unsigned int lines = 6;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Characters not considered part of a word while deleting words
|
||||||
|
* for example: " /?\"&[]"
|
||||||
|
*/
|
||||||
|
static const char worddelimiters[] = " ";
|
||||||
@@ -2,7 +2,8 @@
|
|||||||
VERSION = 5.0
|
VERSION = 5.0
|
||||||
|
|
||||||
# paths
|
# paths
|
||||||
PREFIX = /usr/local
|
#PREFIX = /usr/local
|
||||||
|
PREFIX = /home/marc/.local
|
||||||
MANPREFIX = $(PREFIX)/share/man
|
MANPREFIX = $(PREFIX)/share/man
|
||||||
|
|
||||||
X11INC = /usr/X11R6/include
|
X11INC = /usr/X11R6/include
|
||||||
|
|||||||
25
diff/dmenu-border-4.9.diff
Normal file
25
diff/dmenu-border-4.9.diff
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
diff -up dmenu-4.9-b/config.def.h dmenu-4.9-a/config.def.h
|
||||||
|
--- dmenu-4.9-b/config.def.h 2019-02-02 13:55:02.000000000 +0100
|
||||||
|
+++ dmenu-4.9-a/config.def.h 2019-05-19 02:10:12.740040403 +0200
|
||||||
|
@@ -21,3 +21,6 @@ static unsigned int lines = 0;
|
||||||
|
* for example: " /?\"&[]"
|
||||||
|
*/
|
||||||
|
static const char worddelimiters[] = " ";
|
||||||
|
+
|
||||||
|
+/* Size of the window border */
|
||||||
|
+static const unsigned int border_width = 5;
|
||||||
|
diff -up dmenu-4.9-b/dmenu.c dmenu-4.9-a/dmenu.c
|
||||||
|
--- dmenu-4.9-b/dmenu.c 2019-02-02 13:55:02.000000000 +0100
|
||||||
|
+++ dmenu-4.9-a/dmenu.c 2019-05-19 02:11:20.966710117 +0200
|
||||||
|
@@ -654,9 +654,10 @@ setup(void)
|
||||||
|
swa.override_redirect = True;
|
||||||
|
swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
|
||||||
|
swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask;
|
||||||
|
- win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0,
|
||||||
|
+ win = XCreateWindow(dpy, parentwin, x, y, mw, mh, border_width,
|
||||||
|
CopyFromParent, CopyFromParent, CopyFromParent,
|
||||||
|
CWOverrideRedirect | CWBackPixel | CWEventMask, &swa);
|
||||||
|
+ XSetWindowBorder(dpy, win, scheme[SchemeSel][ColBg].pixel);
|
||||||
|
XSetClassHint(dpy, win, &ch);
|
||||||
|
|
||||||
|
/* open input methods */
|
||||||
53
diff/dmenu-caseinsensitive-5.0.diff
Normal file
53
diff/dmenu-caseinsensitive-5.0.diff
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
diff --git a/dmenu.1 b/dmenu.1
|
||||||
|
index 323f93c..3e3b31b 100644
|
||||||
|
--- a/dmenu.1
|
||||||
|
+++ b/dmenu.1
|
||||||
|
@@ -3,7 +3,7 @@
|
||||||
|
dmenu \- dynamic menu
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B dmenu
|
||||||
|
-.RB [ \-bfiv ]
|
||||||
|
+.RB [ \-bfsv ]
|
||||||
|
.RB [ \-l
|
||||||
|
.IR lines ]
|
||||||
|
.RB [ \-m
|
||||||
|
@@ -44,8 +44,8 @@ dmenu appears at the bottom of the screen.
|
||||||
|
dmenu grabs the keyboard before reading stdin if not reading from a tty. This
|
||||||
|
is faster, but will lock up X until stdin reaches end\-of\-file.
|
||||||
|
.TP
|
||||||
|
-.B \-i
|
||||||
|
-dmenu matches menu items case insensitively.
|
||||||
|
+.B \-s
|
||||||
|
+dmenu matches menu items case sensitively.
|
||||||
|
.TP
|
||||||
|
.BI \-l " lines"
|
||||||
|
dmenu lists items vertically, with the given number of lines.
|
||||||
|
diff --git a/dmenu.c b/dmenu.c
|
||||||
|
index 65f25ce..855df59 100644
|
||||||
|
--- a/dmenu.c
|
||||||
|
+++ b/dmenu.c
|
||||||
|
@@ -55,8 +55,9 @@ static Clr *scheme[SchemeLast];
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
-static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
|
||||||
|
-static char *(*fstrstr)(const char *, const char *) = strstr;
|
||||||
|
+static char * cistrstr(const char *s, const char *sub);
|
||||||
|
+static int (*fstrncmp)(const char *, const char *, size_t) = strncasecmp;
|
||||||
|
+static char *(*fstrstr)(const char *, const char *) = cistrstr;
|
||||||
|
|
||||||
|
static void
|
||||||
|
appenditem(struct item *item, struct item **list, struct item **last)
|
||||||
|
@@ -709,9 +710,9 @@ main(int argc, char *argv[])
|
||||||
|
topbar = 0;
|
||||||
|
else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */
|
||||||
|
fast = 1;
|
||||||
|
- else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
|
||||||
|
- fstrncmp = strncasecmp;
|
||||||
|
- fstrstr = cistrstr;
|
||||||
|
+ else if (!strcmp(argv[i], "-s")) { /* case-sensitive item matching */
|
||||||
|
+ fstrncmp = strncmp;
|
||||||
|
+ fstrstr = strstr;
|
||||||
|
} else if (i + 1 == argc)
|
||||||
|
usage();
|
||||||
|
/* these options take one argument */
|
||||||
56
diff/dmenu-center-4.8.diff
Normal file
56
diff/dmenu-center-4.8.diff
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
diff --git a/dmenu.c b/dmenu.c
|
||||||
|
index 5e9c367..2268ea9 100644
|
||||||
|
--- a/dmenu.c
|
||||||
|
+++ b/dmenu.c
|
||||||
|
@@ -88,6 +88,15 @@ calcoffsets(void)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int
|
||||||
|
+max_textw(void)
|
||||||
|
+{
|
||||||
|
+ int len = 0;
|
||||||
|
+ for (struct item *item = items; item && item->text; item++)
|
||||||
|
+ len = MAX(TEXTW(item->text), len);
|
||||||
|
+ return len;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
cleanup(void)
|
||||||
|
{
|
||||||
|
@@ -598,6 +607,7 @@ setup(void)
|
||||||
|
bh = drw->fonts->h + 2;
|
||||||
|
lines = MAX(lines, 0);
|
||||||
|
mh = (lines + 1) * bh;
|
||||||
|
+ promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
|
||||||
|
#ifdef XINERAMA
|
||||||
|
i = 0;
|
||||||
|
if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
|
||||||
|
@@ -624,9 +634,9 @@ setup(void)
|
||||||
|
if (INTERSECT(x, y, 1, 1, info[i]))
|
||||||
|
break;
|
||||||
|
|
||||||
|
- x = info[i].x_org;
|
||||||
|
- y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
|
||||||
|
- mw = info[i].width;
|
||||||
|
+ mw = MIN(MAX(max_textw() + promptw, 100), info[i].width);
|
||||||
|
+ x = info[i].x_org + ((info[i].width - mw) / 2);
|
||||||
|
+ y = info[i].y_org + ((info[i].height - mh) / 2);
|
||||||
|
XFree(info);
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
@@ -634,11 +644,10 @@ setup(void)
|
||||||
|
if (!XGetWindowAttributes(dpy, parentwin, &wa))
|
||||||
|
die("could not get embedding window attributes: 0x%lx",
|
||||||
|
parentwin);
|
||||||
|
- x = 0;
|
||||||
|
- y = topbar ? 0 : wa.height - mh;
|
||||||
|
- mw = wa.width;
|
||||||
|
+ mw = MIN(MAX(max_textw() + promptw, 100), wa.width);
|
||||||
|
+ x = (wa.width - mw) / 2;
|
||||||
|
+ y = (wa.height - mh) / 2;
|
||||||
|
}
|
||||||
|
- promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
|
||||||
|
inputw = MIN(inputw, mw/3);
|
||||||
|
match();
|
||||||
|
|
||||||
6
dmenu.1
6
dmenu.1
@@ -3,7 +3,7 @@
|
|||||||
dmenu \- dynamic menu
|
dmenu \- dynamic menu
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B dmenu
|
.B dmenu
|
||||||
.RB [ \-bfiv ]
|
.RB [ \-bfsv ]
|
||||||
.RB [ \-l
|
.RB [ \-l
|
||||||
.IR lines ]
|
.IR lines ]
|
||||||
.RB [ \-m
|
.RB [ \-m
|
||||||
@@ -44,8 +44,8 @@ dmenu appears at the bottom of the screen.
|
|||||||
dmenu grabs the keyboard before reading stdin if not reading from a tty. This
|
dmenu grabs the keyboard before reading stdin if not reading from a tty. This
|
||||||
is faster, but will lock up X until stdin reaches end\-of\-file.
|
is faster, but will lock up X until stdin reaches end\-of\-file.
|
||||||
.TP
|
.TP
|
||||||
.B \-i
|
.B \-s
|
||||||
dmenu matches menu items case insensitively.
|
dmenu matches menu items case sensitively.
|
||||||
.TP
|
.TP
|
||||||
.BI \-l " lines"
|
.BI \-l " lines"
|
||||||
dmenu lists items vertically, with the given number of lines.
|
dmenu lists items vertically, with the given number of lines.
|
||||||
|
|||||||
34
dmenu.c
34
dmenu.c
@@ -55,8 +55,9 @@ static Clr *scheme[SchemeLast];
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
|
static char * cistrstr(const char *s, const char *sub);
|
||||||
static char *(*fstrstr)(const char *, const char *) = strstr;
|
static int (*fstrncmp)(const char *, const char *, size_t) = strncasecmp;
|
||||||
|
static char *(*fstrstr)(const char *, const char *) = cistrstr;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
appenditem(struct item *item, struct item **list, struct item **last)
|
appenditem(struct item *item, struct item **list, struct item **last)
|
||||||
@@ -89,6 +90,15 @@ calcoffsets(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
max_textw(void)
|
||||||
|
{
|
||||||
|
int len = 0;
|
||||||
|
for (struct item *item = items; item && item->text; item++)
|
||||||
|
len = MAX(TEXTW(item->text), len);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cleanup(void)
|
cleanup(void)
|
||||||
{
|
{
|
||||||
@@ -611,6 +621,7 @@ setup(void)
|
|||||||
bh = drw->fonts->h + 2;
|
bh = drw->fonts->h + 2;
|
||||||
lines = MAX(lines, 0);
|
lines = MAX(lines, 0);
|
||||||
mh = (lines + 1) * bh;
|
mh = (lines + 1) * bh;
|
||||||
|
promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
|
||||||
#ifdef XINERAMA
|
#ifdef XINERAMA
|
||||||
i = 0;
|
i = 0;
|
||||||
if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
|
if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
|
||||||
@@ -637,9 +648,9 @@ setup(void)
|
|||||||
if (INTERSECT(x, y, 1, 1, info[i]))
|
if (INTERSECT(x, y, 1, 1, info[i]))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
x = info[i].x_org;
|
mw = MIN(MAX(max_textw() + promptw, 100), info[i].width);
|
||||||
y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
|
x = info[i].x_org + ((info[i].width - mw) / 2);
|
||||||
mw = info[i].width;
|
y = info[i].y_org + ((info[i].height - mh) / 2);
|
||||||
XFree(info);
|
XFree(info);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
@@ -647,11 +658,10 @@ setup(void)
|
|||||||
if (!XGetWindowAttributes(dpy, parentwin, &wa))
|
if (!XGetWindowAttributes(dpy, parentwin, &wa))
|
||||||
die("could not get embedding window attributes: 0x%lx",
|
die("could not get embedding window attributes: 0x%lx",
|
||||||
parentwin);
|
parentwin);
|
||||||
x = 0;
|
mw = MIN(MAX(max_textw() + promptw, 100), wa.width);
|
||||||
y = topbar ? 0 : wa.height - mh;
|
x = (wa.width - mw) / 2;
|
||||||
mw = wa.width;
|
y = (wa.height - mh) / 2;
|
||||||
}
|
}
|
||||||
promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
|
|
||||||
inputw = MIN(inputw, mw/3);
|
inputw = MIN(inputw, mw/3);
|
||||||
match();
|
match();
|
||||||
|
|
||||||
@@ -709,9 +719,9 @@ main(int argc, char *argv[])
|
|||||||
topbar = 0;
|
topbar = 0;
|
||||||
else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */
|
else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */
|
||||||
fast = 1;
|
fast = 1;
|
||||||
else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
|
else if (!strcmp(argv[i], "-s")) { /* case-sensitive item matching */
|
||||||
fstrncmp = strncasecmp;
|
fstrncmp = strncmp;
|
||||||
fstrstr = cistrstr;
|
fstrstr = strstr;
|
||||||
} else if (i + 1 == argc)
|
} else if (i + 1 == argc)
|
||||||
usage();
|
usage();
|
||||||
/* these options take one argument */
|
/* these options take one argument */
|
||||||
|
|||||||
Reference in New Issue
Block a user