1
0
mirror of https://github.com/tiyn/dmenu.git synced 2025-10-18 22:01:20 +02:00

28 Commits

Author SHA1 Message Date
Marten
dc996ba476 Update README.md 2020-11-02 20:14:31 +01:00
tiyn
5497b4902d PKGBUILD update 2020-06-08 01:02:05 +00:00
TiynGER
a360224bb7 changing colors 2020-05-30 19:52:58 +02:00
TiynGER
a6921c5f88 changing colors 2020-05-30 19:48:14 +02:00
TiynGER
1fcd089005 new color 2020-05-29 17:29:07 +02:00
Marten Kante
94a416917c Update README.md 2020-05-06 12:29:41 +02:00
TiynGER
c59c4ee049 update readme 2020-05-06 12:26:06 +02:00
TiynGER
50d7471aad adding pkgbuild 2020-05-06 11:59:43 +02:00
TiynGER
4bf700187a fixing conflict 2020-04-02 01:27:52 +02:00
TiynGER
35350cad56 new color 2020-04-02 01:26:55 +02:00
TiynGER
30cdc72cf9 new color 2020-04-02 01:25:12 +02:00
TiynGER
d9e6d770e1 Merge branch 'master' of ssh+git://github/tiynger/dmenu-new 2020-03-29 11:22:22 +02:00
TiynGER
337d140d83 password 2020-03-29 11:22:12 +02:00
TiynGER
2ef8f0f16f config 2020-03-29 11:22:12 +02:00
TiynGER
589e5a707f center 2020-03-29 11:22:12 +02:00
TiynGER
14408b89d5 border 2020-03-29 11:22:12 +02:00
TiynGER
1d594d8739 enable color emojis 2020-03-29 11:21:33 +02:00
TiynGER
1cc2af4c2f update readme 2020-03-29 01:10:34 +01:00
TiynGER
dcf2712719 password 2020-03-29 01:09:05 +01:00
TiynGER
2d07914135 config 2020-03-29 01:09:05 +01:00
TiynGER
6f5f4ace27 center 2020-03-29 01:09:05 +01:00
TiynGER
8618ffbc2b border 2020-03-29 01:09:05 +01:00
TiynGER
a617f1e853 new colors 2020-03-29 01:07:08 +01:00
TiynGER
acf3ab704b smaller border 2020-03-28 22:34:57 +01:00
TiynGER
2ca219bc80 patching password 2020-03-28 22:24:44 +01:00
TiynGER
9691dd2308 patching center 2020-03-28 22:13:14 +01:00
TiynGER
3c90ca03a8 patching border 2020-03-28 22:11:05 +01:00
TiynGER
e288f6abd7 rm README 2020-03-28 22:09:16 +01:00
10 changed files with 404 additions and 18 deletions

49
PKGBUILD Normal file
View File

@@ -0,0 +1,49 @@
# This is an example PKGBUILD file. Use this as a start to creating your own,
# and remove these comments. For more information, see 'man PKGBUILD'.
# NOTE: Please fill out the license field for your package! If it is unknown,
# then please put 'unknown'.
# Maintainer: Marten Kante <tiyn@martenkante.eu>
pkgname=dmenu-tiyn-git
pkgver=4.9
pkgrel=1
epoch=
pkgdesc="This is the dmenu build of tiyn. It includes the border, center and password patches."
arch=(x86_64 i686)
url="https://github.com/tiyn/dmenu"
license=('MIT')
groups=()
depends=()
makedepends=(git)
checkdepends=()
optdepends=()
provides=(dmenu)
conflicts=(dmenu)
replaces=(dmenu)
backup=()
options=()
install=
changelog=
source=("git+$url")
noextract=()
md5sums=('SKIP')
validpgpkeys=()
pkgver() {
cd "${_pkgname}"
printf "4.9.r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
build() {
cd dmenu
make X11INC=/usr/include/X11 X11LIB=/usr/lib/X11
}
package() {
cd dmenu
mkdir -p ${pkgdir}/opt/${pkgname}
cp -rf * ${pkgdir}/opt/${pkgname}
make PREFIX=/usr DESTDIR="${pkgdir}" install
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
install -Dm644 README.md "${pkgdir}/usr/share/doc/${pkgname}/README.md"
}

26
README.md Normal file
View File

@@ -0,0 +1,26 @@
# dmenu
This is my patched version of dmenu.
The base version is directly from suckless.org.
## Patches
The list below shows the currently applied patches to this build.
- dmenu-border-4.9.diff
- dmenu-center-20200111-8cd37e1.diff
- dmenu-password-4.9.diff
## Installation
To install this package you can run several commands.
### AUR
If you're on Arch you can use the Arch User Repository.
For simplicity you can use a AUR-helper such as yay.
- `yay -S dmenu-tiyn-git`
Or you can clone it and run it by makepkg.
- `git clone https://aur.archlinux.org/dmenu-tiyn-git.git`
- `makepkg -sirc`
### MAKE
The most basic way is to clone the repository and then invoke make.
- `git clone https://github.com/tiyn/dmenu`
- `make clean install`

View File

@@ -2,6 +2,8 @@
/* Default settings; can be overriden by command line. */ /* Default settings; can be overriden by command line. */
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */ static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
static int centered = 0; /* -c option; centers dmenu on screen */
static int min_width = 500; /* minimum width when centered */
/* -fn option overrides fonts[0]; default X11 font or font set */ /* -fn option overrides fonts[0]; default X11 font or font set */
static const char *fonts[] = { static const char *fonts[] = {
"monospace:size=10" "monospace:size=10"
@@ -9,9 +11,9 @@ static const char *fonts[] = {
static const char *prompt = NULL; /* -p option; prompt to the left of input field */ static const char *prompt = NULL; /* -p option; prompt to the left of input field */
static const char *colors[SchemeLast][2] = { static const char *colors[SchemeLast][2] = {
/* fg bg */ /* fg bg */
[SchemeNorm] = { "#bbbbbb", "#222222" }, [SchemeNorm] = { "#dfdfdf", "#0e0f14" },
[SchemeSel] = { "#eeeeee", "#005577" }, [SchemeSel] = { "#eeeeee", "#282828" },
[SchemeOut] = { "#000000", "#00ffff" }, [SchemeOut] = { "#eeeeee", "#282828" },
}; };
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */ /* -l option; if nonzero, dmenu uses vertical list with given number of lines */
static unsigned int lines = 0; static unsigned int lines = 0;
@@ -21,3 +23,6 @@ static unsigned int lines = 0;
* for example: " /?\"&[]" * for example: " /?\"&[]"
*/ */
static const char worddelimiters[] = " "; static const char worddelimiters[] = " ";
/* Size of the window border */
static const unsigned int border_width = 2;

28
config.h Normal file
View File

@@ -0,0 +1,28 @@
/* 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 */
static int centered = 0; /* -c option; centers dmenu on screen */
static int min_width = 500; /* minimum width when centered */
/* -fn option overrides fonts[0]; default X11 font or font set */
static const char *fonts[] = {
"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] = { "#dfdfdf", "#0e0f14" },
[SchemeSel] = { "#eeeeee", "#282828" },
[SchemeOut] = { "#eeeeee", "#282828" },
};
/* -l option; if nonzero, dmenu uses vertical list with given number of lines */
static unsigned int lines = 0;
/*
* Characters not considered part of a word while deleting words
* for example: " /?\"&[]"
*/
static const char worddelimiters[] = " ";
/* Size of the window border */
static const unsigned int border_width = 2;

25
dmenu-border-4.9.diff Normal file
View 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 */

View File

@@ -0,0 +1,120 @@
From 8cd37e1ab9e7cb025224aeb3543f1a5be8bceb93 Mon Sep 17 00:00:00 2001
From: Nihal Jere <nihal@nihaljere.xyz>
Date: Sat, 11 Jan 2020 21:16:08 -0600
Subject: [PATCH] center patch now has adjustable minimum width
---
config.def.h | 2 ++
dmenu.1 | 3 +++
dmenu.c | 39 ++++++++++++++++++++++++++++++++-------
3 files changed, 37 insertions(+), 7 deletions(-)
diff --git a/config.def.h b/config.def.h
index 1edb647..88ef264 100644
--- a/config.def.h
+++ b/config.def.h
@@ -2,6 +2,8 @@
/* Default settings; can be overriden by command line. */
static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */
+static int centered = 0; /* -c option; centers dmenu on screen */
+static int min_width = 500; /* minimum width when centered */
/* -fn option overrides fonts[0]; default X11 font or font set */
static const char *fonts[] = {
"monospace:size=10"
diff --git a/dmenu.1 b/dmenu.1
index 323f93c..c036baa 100644
--- a/dmenu.1
+++ b/dmenu.1
@@ -40,6 +40,9 @@ which lists programs in the user's $PATH and runs the result in their $SHELL.
.B \-b
dmenu appears at the bottom of the screen.
.TP
+.B \-c
+dmenu appears centered on the screen.
+.TP
.B \-f
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.
diff --git a/dmenu.c b/dmenu.c
index 65f25ce..041c7f8 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -89,6 +89,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)
{
@@ -611,6 +620,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))) {
@@ -637,9 +647,16 @@ 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;
+ if (centered) {
+ mw = MIN(MAX(max_textw() + promptw, min_width), info[i].width);
+ x = info[i].x_org + ((info[i].width - mw) / 2);
+ y = info[i].y_org + ((info[i].height - mh) / 2);
+ } else {
+ x = info[i].x_org;
+ y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
+ mw = info[i].width;
+ }
+
XFree(info);
} else
#endif
@@ -647,11 +664,17 @@ 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;
+
+ if (centered) {
+ mw = MIN(MAX(max_textw() + promptw, min_width), wa.width);
+ x = (wa.width - mw) / 2;
+ y = (wa.height - mh) / 2;
+ } else {
+ x = 0;
+ y = topbar ? 0 : wa.height - mh;
+ mw = wa.width;
+ }
}
- promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
inputw = MIN(inputw, mw/3);
match();
@@ -709,6 +732,8 @@ 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], "-c")) /* centers dmenu on screen */
+ centered = 1;
else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
fstrncmp = strncasecmp;
fstrstr = cistrstr;
--
2.24.1

88
dmenu-password-4.9.diff Normal file
View File

@@ -0,0 +1,88 @@
diff -up dmenu-4.9/dmenu.1 dmenu-4.9-orig/dmenu.1
--- dmenu-4.9/dmenu.1 2019-09-25 12:55:42.666319316 -0600
+++ dmenu-4.9-orig/dmenu.1 2019-09-25 12:48:38.848249931 -0600
@@ -3,7 +3,7 @@
dmenu \- dynamic menu
.SH SYNOPSIS
.B dmenu
+.RB [ \-bfivP ]
-.RB [ \-bfiv ]
.RB [ \-l
.IR lines ]
.RB [ \-m
@@ -47,9 +47,6 @@ is faster, but will lock up X until stdi
.B \-i
dmenu matches menu items case insensitively.
.TP
+.B \-P
+dmenu will not directly display the keyboard input, but instead replace it with dots. All data from stdin will be ignored.
+.TP
.BI \-l " lines"
dmenu lists items vertically, with the given number of lines.
.TP
diff -up dmenu-4.9/dmenu.c dmenu-4.9-orig/dmenu.c
--- dmenu-4.9/dmenu.c 2019-09-25 12:48:55.756173240 -0600
+++ dmenu-4.9-orig/dmenu.c 2019-09-25 12:48:38.848249931 -0600
@@ -37,7 +37,7 @@ struct item {
static char text[BUFSIZ] = "";
static char *embed;
static int bh, mw, mh;
+static int inputw = 0, promptw, passwd = 0;
-static int inputw = 0, promptw;
static int lrpad; /* sum of left and right padding */
static size_t cursor;
static struct item *items = NULL;
@@ -132,7 +132,6 @@ drawmenu(void)
unsigned int curpos;
struct item *item;
int x = 0, y = 0, w;
+ char *censort;
drw_setscheme(drw, scheme[SchemeNorm]);
drw_rect(drw, 0, 0, mw, mh, 1, 1);
@@ -144,12 +143,7 @@ drawmenu(void)
/* draw input field */
w = (lines > 0 || !matches) ? mw - x : inputw;
drw_setscheme(drw, scheme[SchemeNorm]);
+ if (passwd) {
+ censort = ecalloc(1, sizeof(text));
+ memset(censort, '.', strlen(text));
+ drw_text(drw, x, 0, w, bh, lrpad / 2, censort, 0);
+ free(censort);
+ } else drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
- drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
curpos = TEXTW(text) - TEXTW(&text[cursor]);
if ((curpos += lrpad / 2 - 1) < w) {
@@ -531,11 +525,6 @@ readstdin(void)
size_t i, imax = 0, size = 0;
unsigned int tmpmax = 0;
+ if(passwd){
+ inputw = lines = 0;
+ return;
+ }
+
/* read each line from stdin and add it to the item list */
for (i = 0; fgets(buf, sizeof buf, stdin); i++) {
if (i + 1 >= size / sizeof *items)
@@ -693,7 +682,7 @@ setup(void)
static void
usage(void)
{
+ fputs("usage: dmenu [-bfiPv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
- fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
" [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr);
exit(1);
}
@@ -716,9 +705,7 @@ main(int argc, char *argv[])
else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
fstrncmp = strncasecmp;
fstrstr = cistrstr;
+ } else if (!strcmp(argv[i], "-P")) /* is the input a password */
+ passwd = 1;
+ else if (i + 1 == argc)
- } else if (i + 1 == argc)
usage();
/* these options take one argument */
else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */

View File

@@ -3,7 +3,7 @@
dmenu \- dynamic menu dmenu \- dynamic menu
.SH SYNOPSIS .SH SYNOPSIS
.B dmenu .B dmenu
.RB [ \-bfiv ] .RB [ \-bfivP ]
.RB [ \-l .RB [ \-l
.IR lines ] .IR lines ]
.RB [ \-m .RB [ \-m
@@ -40,6 +40,9 @@ which lists programs in the user's $PATH and runs the result in their $SHELL.
.B \-b .B \-b
dmenu appears at the bottom of the screen. dmenu appears at the bottom of the screen.
.TP .TP
.B \-c
dmenu appears centered on the screen.
.TP
.B \-f .B \-f
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.
@@ -47,6 +50,9 @@ is faster, but will lock up X until stdin reaches end\-of\-file.
.B \-i .B \-i
dmenu matches menu items case insensitively. dmenu matches menu items case insensitively.
.TP .TP
.B \-P
dmenu will not directly display the keyboard input, but instead replace it with dots. All data from stdin will be ignored.
.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.
.TP .TP

63
dmenu.c
View File

@@ -37,7 +37,7 @@ struct item {
static char text[BUFSIZ] = ""; static char text[BUFSIZ] = "";
static char *embed; static char *embed;
static int bh, mw, mh; static int bh, mw, mh;
static int inputw = 0, promptw; static int inputw = 0, promptw, passwd = 0;
static int lrpad; /* sum of left and right padding */ static int lrpad; /* sum of left and right padding */
static size_t cursor; static size_t cursor;
static struct item *items = NULL; static struct item *items = NULL;
@@ -89,6 +89,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)
{ {
@@ -132,6 +141,7 @@ drawmenu(void)
unsigned int curpos; unsigned int curpos;
struct item *item; struct item *item;
int x = 0, y = 0, w; int x = 0, y = 0, w;
char *censort;
drw_setscheme(drw, scheme[SchemeNorm]); drw_setscheme(drw, scheme[SchemeNorm]);
drw_rect(drw, 0, 0, mw, mh, 1, 1); drw_rect(drw, 0, 0, mw, mh, 1, 1);
@@ -143,7 +153,12 @@ drawmenu(void)
/* draw input field */ /* draw input field */
w = (lines > 0 || !matches) ? mw - x : inputw; w = (lines > 0 || !matches) ? mw - x : inputw;
drw_setscheme(drw, scheme[SchemeNorm]); drw_setscheme(drw, scheme[SchemeNorm]);
drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0); if (passwd) {
censort = ecalloc(1, sizeof(text));
memset(censort, '.', strlen(text));
drw_text(drw, x, 0, w, bh, lrpad / 2, censort, 0);
free(censort);
} else drw_text(drw, x, 0, w, bh, lrpad / 2, text, 0);
curpos = TEXTW(text) - TEXTW(&text[cursor]); curpos = TEXTW(text) - TEXTW(&text[cursor]);
if ((curpos += lrpad / 2 - 1) < w) { if ((curpos += lrpad / 2 - 1) < w) {
@@ -525,6 +540,11 @@ readstdin(void)
size_t i, imax = 0, size = 0; size_t i, imax = 0, size = 0;
unsigned int tmpmax = 0; unsigned int tmpmax = 0;
if(passwd){
inputw = lines = 0;
return;
}
/* read each line from stdin and add it to the item list */ /* read each line from stdin and add it to the item list */
for (i = 0; fgets(buf, sizeof buf, stdin); i++) { for (i = 0; fgets(buf, sizeof buf, stdin); i++) {
if (i + 1 >= size / sizeof *items) if (i + 1 >= size / sizeof *items)
@@ -611,6 +631,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 +658,16 @@ 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; if (centered) {
y = info[i].y_org + (topbar ? 0 : info[i].height - mh); mw = MIN(MAX(max_textw() + promptw, min_width), info[i].width);
mw = info[i].width; x = info[i].x_org + ((info[i].width - mw) / 2);
y = info[i].y_org + ((info[i].height - mh) / 2);
} else {
x = info[i].x_org;
y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
mw = info[i].width;
}
XFree(info); XFree(info);
} else } else
#endif #endif
@@ -647,11 +675,17 @@ 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;
y = topbar ? 0 : wa.height - mh; if (centered) {
mw = wa.width; mw = MIN(MAX(max_textw() + promptw, min_width), wa.width);
x = (wa.width - mw) / 2;
y = (wa.height - mh) / 2;
} else {
x = 0;
y = topbar ? 0 : wa.height - mh;
mw = wa.width;
}
} }
promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
inputw = MIN(inputw, mw/3); inputw = MIN(inputw, mw/3);
match(); match();
@@ -659,9 +693,10 @@ setup(void)
swa.override_redirect = True; swa.override_redirect = True;
swa.background_pixel = scheme[SchemeNorm][ColBg].pixel; swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask; 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, CopyFromParent, CopyFromParent, CopyFromParent,
CWOverrideRedirect | CWBackPixel | CWEventMask, &swa); CWOverrideRedirect | CWBackPixel | CWEventMask, &swa);
XSetWindowBorder(dpy, win, scheme[SchemeSel][ColBg].pixel);
XSetClassHint(dpy, win, &ch); XSetClassHint(dpy, win, &ch);
@@ -689,7 +724,7 @@ setup(void)
static void static void
usage(void) usage(void)
{ {
fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" fputs("usage: dmenu [-bfiPv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
" [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr);
exit(1); exit(1);
} }
@@ -709,10 +744,14 @@ 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], "-c")) /* centers dmenu on screen */
centered = 1;
else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */
fstrncmp = strncasecmp; fstrncmp = strncasecmp;
fstrstr = cistrstr; fstrstr = cistrstr;
} else if (i + 1 == argc) } else if (!strcmp(argv[i], "-P")) /* is the input a password */
passwd = 1;
else if (i + 1 == argc)
usage(); usage();
/* these options take one argument */ /* these options take one argument */
else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */ else if (!strcmp(argv[i], "-l")) /* number of lines in vertical list */

4
drw.c
View File

@@ -139,11 +139,11 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
* https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=916349 * https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=916349
* and lots more all over the internet. * and lots more all over the internet.
*/ */
FcBool iscol; /*FcBool iscol;
if(FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) { if(FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) {
XftFontClose(drw->dpy, xfont); XftFontClose(drw->dpy, xfont);
return NULL; return NULL;
} }*/
font = ecalloc(1, sizeof(Fnt)); font = ecalloc(1, sizeof(Fnt));
font->xfont = xfont; font->xfont = xfont;