diff options
| author | stkhan <personal@slickd.xyz> | 2022-11-03 20:28:42 -0500 |
|---|---|---|
| committer | stkhan <personal@slickd.xyz> | 2022-11-03 20:28:42 -0500 |
| commit | 1867d262a3098f6e02544c2b58f4fe63798dc0a3 (patch) | |
| tree | bf4acf2cb4218073b5b8fb52243a46b04eaf5ddb /wm | |
| parent | 1c05c8df4b84a54e8f2a9a7b0a222bca280a5e47 (diff) | |
stuff
Diffstat (limited to 'wm')
| -rw-r--r-- | wm/dmenu-5.1/-u | 1 | ||||
| -rw-r--r-- | wm/dmenu-5.1/dmenu-allow-color-font-5.0.diff | 32 | ||||
| -rwxr-xr-x | wm/dmenu-5.1/dmenu_run.old | 2 | ||||
| -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-x | wm/dmenu-5.2/dmenu_path (renamed from wm/dmenu-5.1/dmenu_path) | 0 | ||||
| -rwxr-xr-x | wm/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.h | 10 | ||||
| -rw-r--r-- | wm/dwm-6.4/Makefile | 4 | ||||
| -rw-r--r-- | wm/dwm-6.4/config.def.h | 4 | ||||
| -rw-r--r-- | wm/dwm-6.4/config.h | 153 | ||||
| -rwxr-xr-x | wm/dwm-6.4/dwm | bin | 0 -> 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 Binary files differnew file mode 100755 index 0000000..3098400 --- /dev/null +++ b/wm/dwm-6.4/dwm |