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
10 changed files with 123 additions and 157 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

@@ -2,6 +2,9 @@
/* 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 */
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"
@@ -9,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;
@@ -21,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,88 +0,0 @@
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
.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 stdin reaches end\-of\-file.
.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

View File

@@ -1,21 +0,0 @@
--- dmenu.1 2019-09-25 12:55:42.666319316 -0600
+++ 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

59
dmenu.c
View File

@@ -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) {
@@ -450,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();
@@ -478,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:
@@ -531,11 +527,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)
@@ -700,7 +691,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);
}
@@ -723,9 +714,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 */

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;