summaryrefslogtreecommitdiff
path: root/wm
diff options
context:
space:
mode:
authorstkhan <personal@slickd.xyz>2022-11-03 20:28:42 -0500
committerstkhan <personal@slickd.xyz>2022-11-03 20:28:42 -0500
commit1867d262a3098f6e02544c2b58f4fe63798dc0a3 (patch)
treebf4acf2cb4218073b5b8fb52243a46b04eaf5ddb /wm
parent1c05c8df4b84a54e8f2a9a7b0a222bca280a5e47 (diff)
stuff
Diffstat (limited to 'wm')
-rw-r--r--wm/dmenu-5.1/-u1
-rw-r--r--wm/dmenu-5.1/dmenu-allow-color-font-5.0.diff32
-rwxr-xr-xwm/dmenu-5.1/dmenu_run.old2
-rw-r--r--wm/dmenu-5.2/LICENSE (renamed from wm/dmenu-5.1/LICENSE)0
-rw-r--r--wm/dmenu-5.2/Makefile (renamed from wm/dmenu-5.1/Makefile)0
-rw-r--r--wm/dmenu-5.2/README (renamed from wm/dmenu-5.1/README)0
-rw-r--r--wm/dmenu-5.2/arg.h (renamed from wm/dmenu-5.1/arg.h)0
-rw-r--r--wm/dmenu-5.2/config.def.h (renamed from wm/dmenu-5.1/config.def.h)0
-rw-r--r--wm/dmenu-5.2/config.h (renamed from wm/dmenu-5.1/config.h)0
-rw-r--r--wm/dmenu-5.2/config.mk (renamed from wm/dmenu-5.1/config.mk)5
-rw-r--r--wm/dmenu-5.2/dmenu.1 (renamed from wm/dmenu-5.1/dmenu.1)0
-rw-r--r--wm/dmenu-5.2/dmenu.c (renamed from wm/dmenu-5.1/dmenu.c)83
-rwxr-xr-xwm/dmenu-5.2/dmenu_path (renamed from wm/dmenu-5.1/dmenu_path)0
-rwxr-xr-xwm/dmenu-5.2/dmenu_run (renamed from wm/dmenu-5.1/dmenu_run)0
-rw-r--r--wm/dmenu-5.2/drw.c (renamed from wm/dmenu-5.1/drw.c)88
-rw-r--r--wm/dmenu-5.2/drw.h (renamed from wm/dmenu-5.1/drw.h)1
-rw-r--r--wm/dmenu-5.2/stest.1 (renamed from wm/dmenu-5.1/stest.1)0
-rw-r--r--wm/dmenu-5.2/stest.c (renamed from wm/dmenu-5.1/stest.c)0
-rw-r--r--wm/dmenu-5.2/util.c (renamed from wm/dmenu-5.1/util.c)23
-rw-r--r--wm/dmenu-5.2/util.h (renamed from wm/dmenu-5.1/util.h)0
-rw-r--r--wm/dwm-6.3/config.h10
-rw-r--r--wm/dwm-6.4/Makefile4
-rw-r--r--wm/dwm-6.4/config.def.h4
-rw-r--r--wm/dwm-6.4/config.h153
-rwxr-xr-xwm/dwm-6.4/dwmbin0 -> 90424 bytes
25 files changed, 289 insertions, 117 deletions
diff --git a/wm/dmenu-5.1/-u b/wm/dmenu-5.1/-u
deleted file mode 100644
index ac60330..0000000
--- a/wm/dmenu-5.1/-u
+++ /dev/null
@@ -1 +0,0 @@
-/usr/local/sbin /usr/local/bin /usr/bin /usr/lib/jvm/default/bin /usr/bin/site_perl /usr/bin/vendor_perl /usr/bin/core_perl /usr/sbin/ /home/khan/.local/bin/ /usr/sbin/ /home/khan/.local/bin/
diff --git a/wm/dmenu-5.1/dmenu-allow-color-font-5.0.diff b/wm/dmenu-5.1/dmenu-allow-color-font-5.0.diff
deleted file mode 100644
index 767b466..0000000
--- a/wm/dmenu-5.1/dmenu-allow-color-font-5.0.diff
+++ /dev/null
@@ -1,32 +0,0 @@
-diff --git drw.c drw.c
-index 4cdbcbe..7a5bc0d 100644
---- drw.c
-+++ drw.c
-@@ -133,19 +133,6 @@ xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
- die("no font specified.");
- }
-
-- /* Do not allow using color fonts. This is a workaround for a BadLength
-- * error from Xft with color glyphs. Modelled on the Xterm workaround. See
-- * https://bugzilla.redhat.com/show_bug.cgi?id=1498269
-- * https://lists.suckless.org/dev/1701/30932.html
-- * https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=916349
-- * and lots more all over the internet.
-- */
-- 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;
- font->pattern = pattern;
-@@ -351,7 +338,6 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
- fcpattern = FcPatternDuplicate(drw->fonts->pattern);
- FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
- FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue);
-- FcPatternAddBool(fcpattern, FC_COLOR, FcFalse);
-
- FcConfigSubstitute(NULL, fcpattern, FcMatchPattern);
- FcDefaultSubstitute(fcpattern);
diff --git a/wm/dmenu-5.1/dmenu_run.old b/wm/dmenu-5.1/dmenu_run.old
deleted file mode 100755
index 834ede5..0000000
--- a/wm/dmenu-5.1/dmenu_run.old
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-dmenu_path | dmenu "$@" | ${SHELL:-"/bin/sh"} &
diff --git a/wm/dmenu-5.1/LICENSE b/wm/dmenu-5.2/LICENSE
index 2a64b28..2a64b28 100644
--- a/wm/dmenu-5.1/LICENSE
+++ b/wm/dmenu-5.2/LICENSE
diff --git a/wm/dmenu-5.1/Makefile b/wm/dmenu-5.2/Makefile
index a03a95c..a03a95c 100644
--- a/wm/dmenu-5.1/Makefile
+++ b/wm/dmenu-5.2/Makefile
diff --git a/wm/dmenu-5.1/README b/wm/dmenu-5.2/README
index a8fcdfe..a8fcdfe 100644
--- a/wm/dmenu-5.1/README
+++ b/wm/dmenu-5.2/README
diff --git a/wm/dmenu-5.1/arg.h b/wm/dmenu-5.2/arg.h
index e94e02b..e94e02b 100644
--- a/wm/dmenu-5.1/arg.h
+++ b/wm/dmenu-5.2/arg.h
diff --git a/wm/dmenu-5.1/config.def.h b/wm/dmenu-5.2/config.def.h
index 1edb647..1edb647 100644
--- a/wm/dmenu-5.1/config.def.h
+++ b/wm/dmenu-5.2/config.def.h
diff --git a/wm/dmenu-5.1/config.h b/wm/dmenu-5.2/config.h
index 2085cc2..2085cc2 100644
--- a/wm/dmenu-5.1/config.h
+++ b/wm/dmenu-5.2/config.h
diff --git a/wm/dmenu-5.1/config.mk b/wm/dmenu-5.2/config.mk
index 0df3fc8..30c43a2 100644
--- a/wm/dmenu-5.1/config.mk
+++ b/wm/dmenu-5.2/config.mk
@@ -1,5 +1,5 @@
# dmenu version
-VERSION = 5.1
+VERSION = 5.2
# paths
PREFIX = /usr/local
@@ -17,6 +17,7 @@ FREETYPELIBS = -lfontconfig -lXft
FREETYPEINC = /usr/include/freetype2
# OpenBSD (uncomment)
#FREETYPEINC = $(X11INC)/freetype2
+#MANPREFIX = ${PREFIX}/man
# includes and libs
INCS = -I$(X11INC) -I$(FREETYPEINC)
@@ -24,7 +25,7 @@ LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS)
# flags
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS)
-CFLAGS = -std=c99 -pedantic -Wall -Os $(INCS) $(CPPFLAGS)
+CFLAGS = -std=c99 -pedantic -Wall -O3 $(INCS) $(CPPFLAGS)
LDFLAGS = $(LIBS)
# compiler and linker
diff --git a/wm/dmenu-5.1/dmenu.1 b/wm/dmenu-5.2/dmenu.1
index 323f93c..323f93c 100644
--- a/wm/dmenu-5.1/dmenu.1
+++ b/wm/dmenu-5.2/dmenu.1
diff --git a/wm/dmenu-5.1/dmenu.c b/wm/dmenu-5.2/dmenu.c
index d95e6c6..0526abb 100644
--- a/wm/dmenu-5.1/dmenu.c
+++ b/wm/dmenu-5.2/dmenu.c
@@ -24,6 +24,8 @@
* MAX(0, MIN((y)+(h),(r).y_org+(r).height) - MAX((y),(r).y_org)))
#define LENGTH(X) (sizeof X / sizeof X[0])
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
+#define NUMBERSMAXDIGITS 100
+#define NUMBERSBUFSIZE (NUMBERSMAXDIGITS * 2) + 1
/* enums */
enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */
@@ -34,6 +36,7 @@ struct item {
int out;
};
+static char numbers[NUMBERSBUFSIZE] = "";
static char text[BUFSIZ] = "";
static char *embed;
static int bh, mw, mh;
@@ -58,6 +61,13 @@ static Clr *scheme[SchemeLast];
static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
static char *(*fstrstr)(const char *, const char *) = strstr;
+static unsigned int
+textw_clamp(const char *str, unsigned int n)
+{
+ unsigned int w = drw_fontset_getwidth_clamp(drw, str, n) + lrpad;
+ return MIN(w, n);
+}
+
static void
appenditem(struct item *item, struct item **list, struct item **last)
{
@@ -79,13 +89,13 @@ calcoffsets(void)
if (lines > 0)
n = lines * bh;
else
- n = mw - (promptw + inputw + TEXTW("<") + TEXTW(">"));
+ n = mw - (promptw + inputw + TEXTW("<") + TEXTW(">") + TEXTW(numbers));
/* calculate which items will begin the next page and previous page */
for (i = 0, next = curr; next; next = next->right)
- if ((i += (lines > 0) ? bh : MIN(TEXTW(next->text), n)) > n)
+ if ((i += (lines > 0) ? bh : textw_clamp(next->text, n)) > n)
break;
for (i = 0, prev = curr; prev && prev->left; prev = prev->left)
- if ((i += (lines > 0) ? bh : MIN(TEXTW(prev->left->text), n)) > n)
+ if ((i += (lines > 0) ? bh : textw_clamp(prev->left->text, n)) > n)
break;
}
@@ -97,6 +107,9 @@ cleanup(void)
XUngrabKey(dpy, AnyKey, AnyModifier, root);
for (i = 0; i < SchemeLast; i++)
free(scheme[i]);
+ for (i = 0; items && items[i].text; ++i)
+ free(items[i].text);
+ free(items);
drw_free(drw);
XSync(dpy, False);
XCloseDisplay(dpy);
@@ -134,6 +147,21 @@ drawitem(struct item *item, int x, int y, int w)
}
static void
+recalculatenumbers()
+{
+ unsigned int numer = 0, denom = 0;
+ struct item *item;
+ if (matchend) {
+ numer++;
+ for (item = matchend; item && item->left; item = item->left)
+ numer++;
+ }
+ for (item = items; item && item->text; item++)
+ denom++;
+ snprintf(numbers, NUMBERSBUFSIZE, "%d/%d", numer, denom);
+}
+
+static void
drawmenu(void)
{
unsigned int curpos;
@@ -158,6 +186,7 @@ drawmenu(void)
drw_rect(drw, x + curpos, 2, 2, bh - 4, 1, 0);
}
+ recalculatenumbers();
if (lines > 0) {
/* draw vertical list */
for (item = curr; item != next; item = item->right)
@@ -172,13 +201,15 @@ drawmenu(void)
}
x += w;
for (item = curr; item != next; item = item->right)
- x = drawitem(item, x, 0, MIN(TEXTW(item->text), mw - x - TEXTW(">")));
+ x = drawitem(item, x, 0, textw_clamp(item->text, mw - x - TEXTW(">") - TEXTW(numbers)));
if (next) {
w = TEXTW(">");
drw_setscheme(drw, scheme[SchemeNorm]);
- drw_text(drw, mw - w, 0, w, bh, lrpad / 2, ">", 0);
+ drw_text(drw, mw - w - TEXTW(numbers), 0, w, bh, lrpad / 2, ">", 0);
}
}
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_text(drw, mw - TEXTW(numbers), 0, TEXTW(numbers), bh, lrpad / 2, numbers, 0);
drw_map(drw, win, 0, 0, mw, mh);
}
@@ -232,7 +263,7 @@ match(void)
/* separate input text into tokens to be matched individually */
for (s = strtok(buf, " "); s; tokv[tokc - 1] = s, s = strtok(NULL, " "))
if (++tokc > tokn && !(tokv = realloc(tokv, ++tokn * sizeof *tokv)))
- die("cannot realloc %u bytes:", tokn * sizeof *tokv);
+ die("cannot realloc %zu bytes:", tokn * sizeof *tokv);
len = tokc ? strlen(tokv[0]) : 0;
matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL;
@@ -405,7 +436,7 @@ keypress(XKeyEvent *ev)
switch(ksym) {
default:
insert:
- if (!iscntrl(*buf))
+ if (!iscntrl((unsigned char)*buf))
insert(buf, len);
break;
case XK_Delete:
@@ -507,9 +538,9 @@ insert:
case XK_Tab:
if (!sel)
return;
- strncpy(text, sel->text, sizeof text - 1);
- text[sizeof text - 1] = '\0';
- cursor = strlen(text);
+ cursor = strnlen(sel->text, sizeof text - 1);
+ memcpy(text, sel->text, cursor);
+ text[cursor] = '\0';
match();
break;
}
@@ -539,29 +570,22 @@ paste(void)
static void
readstdin(void)
{
- char buf[sizeof text], *p;
- size_t i, imax = 0, size = 0;
- unsigned int tmpmax = 0;
+ char *line = NULL;
+ size_t i, junk, size = 0;
+ ssize_t len;
/* read each line from stdin and add it to the item list */
- for (i = 0; fgets(buf, sizeof buf, stdin); i++) {
+ for (i = 0; (len = getline(&line, &junk, stdin)) != -1; i++, line = NULL) {
if (i + 1 >= size / sizeof *items)
if (!(items = realloc(items, (size += BUFSIZ))))
- die("cannot realloc %u bytes:", size);
- if ((p = strchr(buf, '\n')))
- *p = '\0';
- if (!(items[i].text = strdup(buf)))
- die("cannot strdup %u bytes:", strlen(buf) + 1);
+ die("cannot realloc %zu bytes:", size);
+ if (line[len - 1] == '\n')
+ line[len - 1] = '\0';
+ items[i].text = line;
items[i].out = 0;
- drw_font_getexts(drw->fonts, buf, strlen(buf), &tmpmax, NULL);
- if (tmpmax > inputw) {
- inputw = tmpmax;
- imax = i;
- }
}
if (items)
items[i].text = NULL;
- inputw = items ? TEXTW(items[imax].text) : 0;
lines = MIN(lines, i);
}
@@ -652,7 +676,7 @@ setup(void)
/* no focused window is on screen, so use pointer location instead */
if (mon < 0 && !area && XQueryPointer(dpy, root, &dw, &dw, &x, &y, &di, &di, &du))
for (i = 0; i < n; i++)
- if (INTERSECT(x, y, 1, 1, info[i]))
+ if (INTERSECT(x, y, 1, 1, info[i]) != 0)
break;
x = info[i].x_org;
@@ -670,7 +694,7 @@ setup(void)
mw = wa.width;
}
promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
- inputw = MIN(inputw, mw/3);
+ inputw = mw / 3; /* input width: ~33% of monitor width */
match();
/* create menu window */
@@ -707,9 +731,8 @@ setup(void)
static void
usage(void)
{
- 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);
+ die("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n"
+ " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]");
}
int
diff --git a/wm/dmenu-5.1/dmenu_path b/wm/dmenu-5.2/dmenu_path
index 3a7cda7..3a7cda7 100755
--- a/wm/dmenu-5.1/dmenu_path
+++ b/wm/dmenu-5.2/dmenu_path
diff --git a/wm/dmenu-5.1/dmenu_run b/wm/dmenu-5.2/dmenu_run
index e3b2aab..e3b2aab 100755
--- a/wm/dmenu-5.1/dmenu_run
+++ b/wm/dmenu-5.2/dmenu_run
diff --git a/wm/dmenu-5.1/drw.c b/wm/dmenu-5.2/drw.c
index 7a5bc0d..a58a2b4 100644
--- a/wm/dmenu-5.1/drw.c
+++ b/wm/dmenu-5.2/drw.c
@@ -238,12 +238,10 @@ drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int
int
drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert)
{
- char buf[1024];
- int ty;
- unsigned int ew;
+ int i, ty, ellipsis_x = 0;
+ unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len;
XftDraw *d = NULL;
Fnt *usedfont, *curfont, *nextfont;
- size_t i, len;
int utf8strlen, utf8charlen, render = x || y || w || h;
long utf8codepoint = 0;
const char *utf8str;
@@ -251,13 +249,17 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
FcPattern *fcpattern;
FcPattern *match;
XftResult result;
- int charexists = 0;
+ int charexists = 0, overflow = 0;
+ /* keep track of a couple codepoints for which we have no match. */
+ enum { nomatches_len = 64 };
+ static struct { long codepoint[nomatches_len]; unsigned int idx; } nomatches;
+ static unsigned int ellipsis_width = 0;
- if (!drw || (render && !drw->scheme) || !text || !drw->fonts)
+ if (!drw || (render && (!drw->scheme || !w)) || !text || !drw->fonts)
return 0;
if (!render) {
- w = ~w;
+ w = invert ? invert : ~invert;
} else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
@@ -269,8 +271,10 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
}
usedfont = drw->fonts;
+ if (!ellipsis_width && render)
+ ellipsis_width = drw_fontset_getwidth(drw, "...");
while (1) {
- utf8strlen = 0;
+ ew = ellipsis_len = utf8strlen = 0;
utf8str = text;
nextfont = NULL;
while (*text) {
@@ -278,9 +282,27 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
for (curfont = drw->fonts; curfont; curfont = curfont->next) {
charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint);
if (charexists) {
- if (curfont == usedfont) {
+ drw_font_getexts(curfont, text, utf8charlen, &tmpw, NULL);
+ if (ew + ellipsis_width <= w) {
+ /* keep track where the ellipsis still fits */
+ ellipsis_x = x + ew;
+ ellipsis_w = w - ew;
+ ellipsis_len = utf8strlen;
+ }
+
+ if (ew + tmpw > w) {
+ overflow = 1;
+ /* called from drw_fontset_getwidth_clamp():
+ * it wants the width AFTER the overflow
+ */
+ if (!render)
+ x += tmpw;
+ else
+ utf8strlen = ellipsis_len;
+ } else if (curfont == usedfont) {
utf8strlen += utf8charlen;
text += utf8charlen;
+ ew += tmpw;
} else {
nextfont = curfont;
}
@@ -288,36 +310,25 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
}
}
- if (!charexists || nextfont)
+ if (overflow || !charexists || nextfont)
break;
else
charexists = 0;
}
if (utf8strlen) {
- drw_font_getexts(usedfont, utf8str, utf8strlen, &ew, NULL);
- /* shorten text if necessary */
- for (len = MIN(utf8strlen, sizeof(buf) - 1); len && ew > w; len--)
- drw_font_getexts(usedfont, utf8str, len, &ew, NULL);
-
- if (len) {
- memcpy(buf, utf8str, len);
- buf[len] = '\0';
- if (len < utf8strlen)
- for (i = len; i && i > len - 3; buf[--i] = '.')
- ; /* NOP */
-
- if (render) {
- ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
- XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg],
- usedfont->xfont, x, ty, (XftChar8 *)buf, len);
- }
- x += ew;
- w -= ew;
+ if (render) {
+ ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
+ XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg],
+ usedfont->xfont, x, ty, (XftChar8 *)utf8str, utf8strlen);
}
+ x += ew;
+ w -= ew;
}
+ if (render && overflow)
+ drw_text(drw, ellipsis_x, y, ellipsis_w, h, 0, "...", invert);
- if (!*text) {
+ if (!*text || overflow) {
break;
} else if (nextfont) {
charexists = 0;
@@ -327,6 +338,12 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
* character must be drawn. */
charexists = 1;
+ for (i = 0; i < nomatches_len; ++i) {
+ /* avoid calling XftFontMatch if we know we won't find a match */
+ if (utf8codepoint == nomatches.codepoint[i])
+ goto no_match;
+ }
+
fccharset = FcCharSetCreate();
FcCharSetAddChar(fccharset, utf8codepoint);
@@ -354,6 +371,8 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
curfont->next = usedfont;
} else {
xfont_free(usedfont);
+ nomatches.codepoint[++nomatches.idx % nomatches_len] = utf8codepoint;
+no_match:
usedfont = drw->fonts;
}
}
@@ -383,6 +402,15 @@ drw_fontset_getwidth(Drw *drw, const char *text)
return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
}
+unsigned int
+drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n)
+{
+ unsigned int tmp = 0;
+ if (drw && drw->fonts && text && n)
+ tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n);
+ return MIN(n, tmp);
+}
+
void
drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h)
{
diff --git a/wm/dmenu-5.1/drw.h b/wm/dmenu-5.2/drw.h
index 4c67419..fd7631b 100644
--- a/wm/dmenu-5.1/drw.h
+++ b/wm/dmenu-5.2/drw.h
@@ -35,6 +35,7 @@ void drw_free(Drw *drw);
Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount);
void drw_fontset_free(Fnt* set);
unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
+unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n);
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
/* Colorscheme abstraction */
diff --git a/wm/dmenu-5.1/stest.1 b/wm/dmenu-5.2/stest.1
index 2667d8a..2667d8a 100644
--- a/wm/dmenu-5.1/stest.1
+++ b/wm/dmenu-5.2/stest.1
diff --git a/wm/dmenu-5.1/stest.c b/wm/dmenu-5.2/stest.c
index e27d3a5..e27d3a5 100644
--- a/wm/dmenu-5.1/stest.c
+++ b/wm/dmenu-5.2/stest.c
diff --git a/wm/dmenu-5.1/util.c b/wm/dmenu-5.2/util.c
index fe044fc..96b82c9 100644
--- a/wm/dmenu-5.1/util.c
+++ b/wm/dmenu-5.2/util.c
@@ -6,18 +6,9 @@
#include "util.h"
-void *
-ecalloc(size_t nmemb, size_t size)
-{
- void *p;
-
- if (!(p = calloc(nmemb, size)))
- die("calloc:");
- return p;
-}
-
void
-die(const char *fmt, ...) {
+die(const char *fmt, ...)
+{
va_list ap;
va_start(ap, fmt);
@@ -33,3 +24,13 @@ die(const char *fmt, ...) {
exit(1);
}
+
+void *
+ecalloc(size_t nmemb, size_t size)
+{
+ void *p;
+
+ if (!(p = calloc(nmemb, size)))
+ die("calloc:");
+ return p;
+}
diff --git a/wm/dmenu-5.1/util.h b/wm/dmenu-5.2/util.h
index f633b51..f633b51 100644
--- a/wm/dmenu-5.1/util.h
+++ b/wm/dmenu-5.2/util.h
diff --git a/wm/dwm-6.3/config.h b/wm/dwm-6.3/config.h
index 8116730..9032d8b 100644
--- a/wm/dwm-6.3/config.h
+++ b/wm/dwm-6.3/config.h
@@ -100,7 +100,7 @@ static const char *termcmd[] = { "st", NULL };
static Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_d, spawn, {.v = dmenucmd } },
- { MODKEY, XK_Return, spawn, SHCMD("source ~/.config/sarc/sarc.cfg && $sarc_terminal") },
+ { MODKEY, XK_Return, spawn, SHCMD("st") },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
@@ -122,9 +122,9 @@ static Key keys[] = {
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
- { MODKEY, XK_F3, spawn, SHCMD("source ~/.config/sarc/sarc.cfg && $sarc_terminal ranger") },
- { MODKEY, XK_F5, spawn, SHCMD("source ~/.config/sarc/sarc.cfg && $sarc_terminal ncmpcpp-ueberzug") },
- { MODKEY|ShiftMask, XK_f, spawn, SHCMD("source ~/.config/sarc/sarc.cfg && $sarc_browser") },
+ { MODKEY, XK_F3, spawn, SHCMD("st ranger") },
+ { MODKEY, XK_F5, spawn, SHCMD("st ncmpcpp-ueberzug") },
+ { MODKEY|ShiftMask, XK_f, spawn, SHCMD("firefox") },
{ MODKEY, XK_w, spawn, SHCMD("sarc.sh --get_weather") },
{ MODKEY, XK_F11, spawn, SHCMD("pamixer --allow-boost -i 5; kill -44 $(pidof dwmblocks)") },
{ MODKEY, XK_F10, spawn, SHCMD("pamixer --allow-boost -d 5; kill -44 $(pidof dwmblocks)") },
@@ -144,7 +144,7 @@ static Key keys[] = {
{ MODKEY, XK_e, spawn, SHCMD("sarc.sh --unicode") },
{ MODKEY, XK_s, spawn, SHCMD("sarc.sh --search_web") },
{ MODKEY, XK_g, spawn, SHCMD("sarc.sh --goto-website") },
- { MODKEY, XK_t, spawn, SHCMD("source ~/.config/sarc/sarc.cfg && $sarc_terminal vim ~/.cache/todo") },
+ { MODKEY, XK_t, spawn, SHCMD("st vim ~/.cache/todo") },
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
TAGKEYS( XK_3, 2)
diff --git a/wm/dwm-6.4/Makefile b/wm/dwm-6.4/Makefile
index e961e35..64329a9 100644
--- a/wm/dwm-6.4/Makefile
+++ b/wm/dwm-6.4/Makefile
@@ -26,7 +26,7 @@ dwm: ${OBJ}
${CC} -o $@ ${OBJ} ${LDFLAGS}
clean:
- rm -f config.h dwm ${OBJ} dwm-${VERSION}.tar.gz
+ rm -rf dwm ${OBJ} dwm-${VERSION}.tar.gz
dist: clean
mkdir -p dwm-${VERSION}
@@ -36,7 +36,7 @@ dist: clean
gzip dwm-${VERSION}.tar
rm -rf dwm-${VERSION}
-install: all
+install:
mkdir -p ${DESTDIR}${PREFIX}/bin
cp -f dwm ${DESTDIR}${PREFIX}/bin
chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
diff --git a/wm/dwm-6.4/config.def.h b/wm/dwm-6.4/config.def.h
index 1434ca4..233cde0 100644
--- a/wm/dwm-6.4/config.def.h
+++ b/wm/dwm-6.4/config.def.h
@@ -102,7 +102,7 @@ static const Key keys[] = {
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
- { MODKEY|ShiftMask, XK_f, spawn, SHCMD("SARC_BROWSER") },
+ { MODKEY|ShiftMask, XK_F, spawn, SHCMD("SARC_BROWSER") },
{ MODKEY, XK_F3, spawn, SHCMD("SARC_FM") },
{ MODKEY, XK_F11, spawn, SHCMD("pamixer --allow-boost -i 5; kill -44 $(pidof dwmblocks)") },
{ MODKEY, XK_F10, spawn, SHCMD("pamixer --allow-boost -d 5; kill -44 $(pidof dwmblocks)") },
@@ -112,7 +112,7 @@ static const Key keys[] = {
{ MODKEY, XK_F8, spawn, BASHCMD("mpc prev") },
{ MODKEY, XK_F6, spawn, BASHCMD("mpc next") },
{ MODKEY, XK_F9, spawn, BASHCMD("pamixer -t; kill -44 $(pidof dwmblocks)") },
- { MODKEY|ShiftMask, XK_l, spawn, SHCMD("slock") },
+ { MODKEY|ShiftMask, XK_L, spawn, SHCMD("slock") },
{ MODKEY|ShiftMask, XK_F9, spawn, SHCMD("amixer set Capture toggle") },
{ MODKEY, XK_F1, spawn, SHCMD("xbacklight -dec 1; kill -44 $(pidof dwmblocks)") },
{ MODKEY, XK_F2, spawn, SHCMD("xbacklight -inc 1; kill -44 $(pidof dwmblocks)") },
diff --git a/wm/dwm-6.4/config.h b/wm/dwm-6.4/config.h
new file mode 100644
index 0000000..a3486a5
--- /dev/null
+++ b/wm/dwm-6.4/config.h
@@ -0,0 +1,153 @@
+/* See LICENSE file for copyright and license details. */
+
+/* appearance */
+static const unsigned int borderpx = 1; /* border pixel of windows */
+static const unsigned int gappx = 6; /* gaps between windows */
+static const unsigned int snap = 32; /* snap pixel */
+static const int swallowfloating = 0; /* 1 means swallow floating windows by default */
+static const int showbar = 1; /* 0 means no bar */
+static const int topbar = 1; /* 0 means bottom bar */
+static const char *fonts[] = { "Source Code Pro:size=9" };
+static const char dmenufont[] = "Source Code Pro:size=9";
+static const unsigned int baralpha = 0xd0;
+static const unsigned int borderalpha = OPAQUE;
+
+#include "../../colors.h"
+static const char *colors[][3] = {
+ /* fg bg border */
+ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
+ [SchemeSel] = { col_gray4, col_cyan, col_cyan },
+};
+static const unsigned int alphas[][3] = {
+ /* fg bg border */
+ [SchemeNorm] = { OPAQUE, baralpha, borderalpha },
+ [SchemeSel] = { OPAQUE, baralpha, borderalpha },
+};
+
+static const char *const autostart[] = {
+ "fehbg", NULL,
+ "xsetroot", "-name", "Loading dwmblocks...", NULL,
+ "dwmblocks", NULL,
+ "picom", "--experimental-backends", NULL,
+ "dunst", NULL,
+ "mpdas", NULL,
+ NULL /* terminate */
+};
+
+/* tagging */
+static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
+
+static const Rule rules[] = {
+ /* xprop(1):
+ * WM_CLASS(STRING) = instance, class
+ * WM_NAME(STRING) = title
+ */
+ /* class instance title tags mask isfloating isterminal noswallow monitor */
+ { "Gimp", NULL, NULL, 0, 1, 0, 0, -1 },
+ { "Firefox", NULL, NULL, 1 << 8, 0, 0, -1, -1 },
+ { "st", NULL, NULL, 0, 0, 1, 0, -1 },
+ { NULL, NULL, "Event Tester", 0, 0, 0, 1, -1 }, /* xev */
+};
+
+/* layout(s) */
+static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
+static const int nmaster = 1; /* number of clients in master area */
+static const int resizehints = 0; /* 1 means respect size hints in tiled resizals */
+static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
+
+static const Layout layouts[] = {
+ /* symbol arrange function */
+ { "[]=", tile }, /* first entry is default */
+ { "><>", NULL }, /* no layout function means floating behavior */
+ { "[M]", monocle },
+};
+
+/* key definitions */
+#define MODKEY Mod1Mask
+#define TAGKEYS(KEY,TAG) \
+ { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
+ { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
+
+/* helper for spawning shell commands in the pre dwm-5.0 fashion */
+#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
+#define BASHCMD(cmd) { .v = (const char*[]){ "/bin/bash", "-c", cmd, NULL } }
+/* commands */
+static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
+static const char *termcmd[] = { "st", NULL };
+
+static const Key keys[] = {
+ /* modifier key function argument */
+ { MODKEY, XK_d, spawn, {.v = dmenucmd } },
+ { MODKEY, XK_Return, spawn, {.v = termcmd } },
+ { MODKEY, XK_b, togglebar, {0} },
+ { MODKEY, XK_j, focusstack, {.i = +1 } },
+ { MODKEY, XK_k, focusstack, {.i = -1 } },
+ { MODKEY, XK_i, incnmaster, {.i = +1 } },
+ { MODKEY, XK_u, incnmaster, {.i = -1 } },
+ { MODKEY, XK_h, setmfact, {.f = -0.05} },
+ { MODKEY, XK_l, setmfact, {.f = +0.05} },
+ { MODKEY|ShiftMask, XK_Return, zoom, {0} },
+ { MODKEY, XK_Tab, view, {0} },
+ { MODKEY, XK_x, killclient, {0} },
+ { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
+ { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
+ { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
+ { MODKEY, XK_space, setlayout, {0} },
+ { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
+ { MODKEY, XK_0, view, {.ui = ~0 } },
+ { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
+ { MODKEY, XK_comma, focusmon, {.i = -1 } },
+ { MODKEY, XK_period, focusmon, {.i = +1 } },
+ { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
+ { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
+ { MODKEY|ShiftMask, XK_F, spawn, SHCMD("firefox") },
+ { MODKEY, XK_F3, spawn, SHCMD("st ranger") },
+ { MODKEY, XK_F11, spawn, SHCMD("pamixer --allow-boost -i 5; kill -44 $(pidof dwmblocks)") },
+ { MODKEY, XK_F10, spawn, SHCMD("pamixer --allow-boost -d 5; kill -44 $(pidof dwmblocks)") },
+ { MODKEY|ShiftMask, XK_F10, spawn, SHCMD("pavucontrol") },
+ { MODKEY|ShiftMask, XK_F11, spawn, SHCMD("pavucontrol") },
+ { MODKEY, XK_F7, spawn, BASHCMD("mpc toggle") },
+ { MODKEY, XK_F8, spawn, BASHCMD("mpc prev") },
+ { MODKEY, XK_F6, spawn, BASHCMD("mpc next") },
+ { MODKEY, XK_F9, spawn, BASHCMD("pamixer -t; kill -44 $(pidof dwmblocks)") },
+ { MODKEY|ShiftMask, XK_L, spawn, SHCMD("slock") },
+ { MODKEY|ShiftMask, XK_F9, spawn, SHCMD("amixer set Capture toggle") },
+ { MODKEY, XK_F1, spawn, SHCMD("xbacklight -dec 1; kill -44 $(pidof dwmblocks)") },
+ { MODKEY, XK_F2, spawn, SHCMD("xbacklight -inc 1; kill -44 $(pidof dwmblocks)") },
+ { MODKEY, XK_p, spawn, SHCMD("nsxiv -t ~/Pictures") },
+ { MODKEY, XK_F12, spawn, SHCMD("sarc.sh --power") },
+ { MODKEY, XK_F4, spawn, SHCMD("galculator") },
+ { MODKEY, XK_e, spawn, SHCMD("sarc.sh --unicode") },
+ { MODKEY, XK_s, spawn, SHCMD("sarc.sh --search_web") },
+ { MODKEY, XK_g, spawn, SHCMD("sarc.sh --goto-website") },
+ TAGKEYS( XK_1, 0)
+ TAGKEYS( XK_2, 1)
+ TAGKEYS( XK_3, 2)
+ TAGKEYS( XK_4, 3)
+ TAGKEYS( XK_5, 4)
+ TAGKEYS( XK_6, 5)
+ TAGKEYS( XK_7, 6)
+ TAGKEYS( XK_8, 7)
+ TAGKEYS( XK_9, 8)
+ { MODKEY|ShiftMask, XK_q, quit, {0} },
+};
+
+/* button definitions */
+/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
+static const Button buttons[] = {
+ /* click event mask button function argument */
+ { ClkLtSymbol, 0, Button1, setlayout, {0} },
+ { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
+ { ClkWinTitle, 0, Button2, zoom, {0} },
+ { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
+ { ClkClientWin, MODKEY, Button1, movemouse, {0} },
+ { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
+ { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
+ { ClkTagBar, 0, Button1, view, {0} },
+ { ClkTagBar, 0, Button3, toggleview, {0} },
+ { ClkTagBar, MODKEY, Button1, tag, {0} },
+ { ClkTagBar, MODKEY, Button3, toggletag, {0} },
+};
+
diff --git a/wm/dwm-6.4/dwm b/wm/dwm-6.4/dwm
new file mode 100755
index 0000000..3098400
--- /dev/null
+++ b/wm/dwm-6.4/dwm
Binary files differ