Commit Briefs

7be720cc88 Hiltjo Posthuma

bump version to 5.3 (tags/5.3)


8df553e004 Hiltjo Posthuma

Makefile: remove the options target

The Makefile used to suppress output (by using @), so this target made sense at the time. But the Makefile should be simple and make debugging with less abstractions or fancy printing. The Makefile was made verbose and doesn't hide the build output, so remove this target. Prompted by a question on the mailing list about the options target.


7ab0cb5ef0 Hiltjo Posthuma

drw: minor improvement to the nomatches cache

1. use `unsigned int` to store the codepoints, this avoids waste on common case where `long` is 64bits. and POSIX guarantees `int` to be at least 32bits so there's no risk of truncation. 2. since switching to `unsigned int` cuts down the memory requirement by half, double the cache size from 64 to 128. 3. instead of a linear search, use a simple hash-table for O(1) lookups.


0fe460dbd4 Hiltjo Posthuma

fix BadMatch error when embedding on some windows

When embedded into another window, dmenu will fail with the BadMatch error if that window have not the same colormap/depth/visual as the root window. That happens because dmenu inherits the colormap/depth/visual from its parent, but draws on a pixmap created based on the root window using a GC created for the root window (see drw.c). A BadMatch will occur when copying the content of the pixmap into dmenu's window. A solution is to create dmenu's window inside root and then reparent it if embeded. See this mail[1] on ports@openbsd.org mailing list for context. [1]: https://marc.info/?l=openbsd-ports&m=168072150814664&w=2


dfbbf7f6e1 Hiltjo Posthuma

readstdin: reduce memory-usage by duplicating the line from getline()

Improves upon commit 32db2b125190d366be472ccb7cad833248696144 The getline() implementation often uses a more greedy way of allocating memory. Using this buffer directly and forcing an allocation (by setting it to NULL) would waste a bit of extra space, depending on the implementation of course. Tested on musl libc and glibc. The current glibc version allocates a minimum of 120 bytes per line. For smaller lines musl libc seems less wasteful but still wastes a few bytes per line. On a dmenu_path listing on my system the memory usage was about 350kb (old) vs 30kb (new) on Void Linux glibc. Side-note that getline() also reads NUL bytes in lines, while strdup() would read until the NUL byte. Since dmenu reads text lines either is probably fine(tm). Also rename junk to linesiz.


ba1a347dca Hiltjo Posthuma

readstdin: allocate amount of items

Keep track of the amount of items (not a total buffer size), allocate an array of new items. For now change BUFSIZ bytes to 256 * sizeof(struct item)).


bcbc1ef5c4 Hiltjo Posthuma

readstdin: add a comment

Maybe too obvious / redundant, but OK.


689d9bfcf6 Hiltjo Posthuma

fix leak when getline fails

according to the getline(3) documentation, the calling code needs to free the buffer even if getline fails. dmenu currently doesn't do that which results in a small leak in case of failure (e.g when piped /dev/null) $ ./dmenu < /dev/null ==8201==ERROR: LeakSanitizer: detected memory leaks Direct leak of 120 byte(s) in 1 object(s) allocated from: #0 0x7f6bf5785ef7 in malloc #1 0x7f6bf538ec84 in __getdelim #2 0x405d0c in readstdin dmenu.c:557 moving `line = NULL` inside the loop body wasn't strictly necessary, but IMO it makes it more apparent that `line` is getting cleared to NULL after each successful iteration.


e42c036634 Hiltjo Posthuma

dmenu: small XmbLookupString code improvements

* Increase the length of composed strings to the same limit as st (32 to 64 bytes). * Initialize ksym to NoSymbol to be safe: currently this is not an issue though. * Add comments to clarify the return values of XmbLookupString a bit.


1d2b462acf Hiltjo Posthuma

bump version to 5.2 (tags/5.2)


7ec32fe494 Hiltjo Posthuma

dmenu: use die() to print the usage message


fce06f437d Hiltjo Posthuma

remove workaround for a crash with color emojis on some systems, now fixed in libXft 2.3.5

https://gitlab.freedesktop.org/xorg/lib/libxft/-/blob/libXft-2.3.5/NEWS


1e8c5b68f4 Hiltjo Posthuma

fix a regression in the previous commit for tab complete

Reported by Santtu Lakkala <inz@inz.fi>, thanks!


528d39b011 Hiltjo Posthuma

tab-complete: figure out the size before copying

we already need to know the string length since `cursor` needs to be adjusted. so just calculate the length beforehand and use `memcpy` to copy exactly as much as needed (as opposed to `strncpy` which always writes `n` bytes).


32db2b1251 Hiltjo Posthuma

readstdin: use getline(3)

currently readstdin(): - fgets() into a local buffer, - strchr() the buffer to eleminate the newline - stdups() the buffer into items a simpler way is to just use getline(3), which will do the allocation for us; eliminating the need for stdup()-ing. additionally getline returns back the amount of bytes read, which eliminates the need for strchr()-ing to find the newline.


e35976f4a5 Hiltjo Posthuma

sync code-style patch from libsl


28fb3e2812 Hiltjo Posthuma

Makefile: add manual path for OpenBSD


fe5d5c6709 Hiltjo Posthuma

fix incorrect comment, math is hard


e1e1de7b3b Hiltjo Posthuma

inputw: improve correctness and startup performance, by NRK

Always use ~30% of the monitor width for the input in horizontal mode. Patch adapted from NRK patches. This also does not calculate inputw when using vertical mode anymore (because the code is removed).


33685b06e9 Hiltjo Posthuma

drw_text: account for fallback fonts in ellipsis_width

additionally, ellipsis_width (which shouldn't change) is made static to avoid re-calculating it on each drw_text() call.


e4827b0c40 Hiltjo Posthuma

drw_text: don't segfault when called with 0 width

this patch just rejects *any* 0 width draws, which is surely an error by the caller. this also guards against cases where the width is too small for the ellipsis to fit, so ellipsis_w will remain 0. reported by Bakkeby <bakkeby@gmail.com>


e73651f12a Hiltjo Posthuma

fix UB with the function iscntrl()

From commit 6818e07291f3b2913e687c8ec3d3fe4711724050 by NRK, thanks


31fa07b984 Hiltjo Posthuma

Revert "avoid redraw when there's no change"

This reverts commit 6818e07291f3b2913e687c8ec3d3fe4711724050. This broke keys such as ^W to delete-backward-word


6818e07291 Hiltjo Posthuma

avoid redraw when there's no change

while i was timing the performance issue, i noticed that there was lots of random redrawing going on. turns out there were coming from here; if someone presses CTRL/ALT etc without pressing anything else, nothing will be inserted, so nothing will change. but the code will `break`, go down and do a needless redraw. this patch changes it to simply return if the keypress iscntrl() also avoid potential UB by casting *buf into an unsigned char.


b43ec0577f Hiltjo Posthuma

free all allocated items, use %zu for size_t

`items` itself is not checked for NULL as calling free on NULL is defined to be a no-op.