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

19 Commits

Author SHA1 Message Date
829066cbb2 making tab and shift tab cycle suggestions 2023-11-06 00:54:42 +01:00
b5fe99141e updated repository title in readme 2023-10-24 06:10:39 +02:00
dfc6c11af1 updated config 2023-10-24 04:10:11 +02:00
c27e2fb20e added fuzzymatching to readme 2023-10-22 06:54:03 +02:00
TiynGER
70b41a0fe6 update readme 2020-06-14 22:19:33 +02:00
TiynGER
0395a11ec1 changing colors 2020-05-30 19:53:23 +02:00
TiynGER
9dcf8053a8 adding packages to gitignore 2020-05-30 01:14:27 +02:00
TiynGER
e5ff77ab9c adding .gitignore 2020-05-30 01:09:57 +02:00
TiynGER
9afe2c2b5b fixing PKGBUILD AND SRCINFO Versions 2020-05-30 01:08:20 +02:00
TiynGER
446fd5502f Merge branch 'config' of ssh+git://github/tiynger/dmenu-new into config 2020-05-29 17:29:51 +02:00
TiynGER
7263e134aa new color 2020-05-29 17:29:47 +02:00
Marten Kante
f325b36ae6 Update README.md 2020-05-06 12:30:01 +02:00
TiynGER
1551fa01e1 update readme 2020-05-06 12:26:30 +02:00
TiynGER
5bc1cb0478 adding pkgbuild 2020-05-06 11:59:23 +02:00
TiynGER
3a6a2a8457 new color 2020-04-02 01:28:30 +02:00
TiynGER
3befdc0815 new color 2020-04-02 01:25:45 +02:00
TiynGER
da47fa1f67 no readme in base 2020-03-29 16:24:24 +02:00
TiynGER
1d594d8739 enable color emojis 2020-03-29 11:21:33 +02:00
TiynGER
a617f1e853 new colors 2020-03-29 01:07:08 +01:00
9 changed files with 123 additions and 182 deletions

17
.SRCINFO Normal file
View File

@@ -0,0 +1,17 @@
pkgbase = dmenu-tiyn-git
pkgdesc = This is the dmenu build of tiyn. It includes the border, center and password patches.
pkgver = 4.9
pkgrel = 1
url = https://github.com/tiyn/dmenu
arch = x86_64
arch = i686
license = MIT
makedepends = git
provides = dmenu
conflicts = dmenu
replaces = dmenu
source = git+https://github.com/tiyn/dmenu
md5sums = SKIP
pkgname = dmenu-tiyn-git

9
.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
*.o
*.orig
*.1
dmenu
dmenu_run
dmenu_path
stest
pkg
*.pkg.tar.xz

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"
}

View File

@@ -1,11 +1,19 @@
# dmenu
This is my patched version of dmenu.
The base version is directly from suckless.org.
This belongs to my larbs installation script, meaning it's supposed to work in the environment of the larbs-base-installation.
## 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
- dmenu-xresources-20200302-db6093f.diff
- dmenu-border-4.9.diff (adds a border)
- dmenu-center-20200111-8cd37e1.diff (adds option to center dmenu)
- dmenu-fuzzymatch-4.9.diff (adds option to fuzzy matching)
- dmenu-password-4.9.diff (adds option to hide input)
## Installation
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

@@ -4,6 +4,7 @@
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 */
static int fuzzy = 1; /* -F option; if 0, dmenu doesn't use fuzzy matching */
/* -fn option overrides fonts[0]; default X11 font or font set */
static const char *fonts[] = {
"monospace:size=10"
@@ -11,9 +12,9 @@ static const char *fonts[] = {
static const char *prompt = NULL; /* -p option; prompt to the left of input field */
static const char *colors[SchemeLast][2] = {
/* fg bg */
[SchemeNorm] = { "#bbbbbb", "#222222" },
[SchemeSel] = { "#eeeeee", "#005577" },
[SchemeOut] = { "#000000", "#00ffff" },
[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;
@@ -23,3 +24,6 @@ static unsigned int lines = 0;
* for example: " /?\"&[]"
*/
static const char worddelimiters[] = " ";
/* Size of the window border */
static const unsigned int border_width = 2;

View File

@@ -1,120 +0,0 @@
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

View File

@@ -40,9 +40,6 @@ 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.

77
dmenu.c
View File

@@ -89,15 +89,6 @@ 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)
{
@@ -453,7 +444,8 @@ insert:
if (lines > 0)
return;
/* fallthrough */
case XK_Up:
// case XK_Up:
case XK_ISO_Left_Tab:
if (sel && sel->left && (sel = sel->left)->right == curr) {
curr = prev;
calcoffsets();
@@ -481,28 +473,29 @@ insert:
if (sel)
sel->out = 1;
break;
case XK_Right:
if (text[cursor] != '\0') {
cursor = nextrune(+1);
break;
}
if (lines > 0)
return;
/* fallthrough */
case XK_Down:
// case XK_Right:
// if (text[cursor] != '\0') {
// cursor = nextrune(+1);
// break;
// }
// if (lines > 0)
// return;
// /* fallthrough */
// case XK_Down:
case XK_Tab:
if (sel && sel->right && (sel = sel->right) == next) {
curr = next;
calcoffsets();
}
break;
case XK_Tab:
if (!sel)
return;
strncpy(text, sel->text, sizeof text - 1);
text[sizeof text - 1] = '\0';
cursor = strlen(text);
match();
break;
// case XK_Tab:
// if (!sel)
// return;
// strncpy(text, sel->text, sizeof text - 1);
// text[sizeof text - 1] = '\0';
// cursor = strlen(text);
// match();
// break;
}
draw:
@@ -620,7 +613,6 @@ 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))) {
@@ -647,16 +639,9 @@ setup(void)
if (INTERSECT(x, y, 1, 1, info[i]))
break;
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;
}
x = info[i].x_org;
y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
mw = info[i].width;
XFree(info);
} else
#endif
@@ -664,17 +649,11 @@ setup(void)
if (!XGetWindowAttributes(dpy, parentwin, &wa))
die("could not get embedding window attributes: 0x%lx",
parentwin);
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;
}
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();
@@ -732,8 +711,6 @@ 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;

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
* and lots more all over the internet.
*/
FcBool iscol;
/*FcBool iscol;
if(FcPatternGetBool(xfont->pattern, FC_COLOR, 0, &iscol) == FcResultMatch && iscol) {
XftFontClose(drw->dpy, xfont);
return NULL;
}
}*/
font = ecalloc(1, sizeof(Fnt));
font->xfont = xfont;