235 Commits (develop)

Author SHA1 Message Date
Hiltjo Posthuma e73651f12a fix UB with the function iscntrl()
From commit 6818e07291 by NRK, thanks
3 years ago
Hiltjo Posthuma 31fa07b984 Revert "avoid redraw when there's no change"
This reverts commit 6818e07291.

This broke keys such as ^W to delete-backward-word
3 years ago
NRK 6818e07291 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.
3 years ago
NRK b43ec0577f 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.
3 years ago
NRK 77526f756e inputw: improve correctness and startup performance
a massive amount of time inside readstdin() is spent trying to get the
max input width and then put it into inputw, only for it to get clamped
down to mw/3 inside setup().

it makes more sense to calculate inputw inside setup() once we have mw
available. similar to the last patch, i see noticeable startup
performance improvement:

before -> after
160ms  -> 60ms

additionally this will take fallback fonts into account compared to the
previous version, so it's not only more performant but also more correct.
3 years ago
NRK 7269c5355d significantly improve performance on large strings
this replaces inefficient pattern of `MIN(TEXTW(..), n)` with
drw_fontset_getwidth_clamp() instead, which is far more efficient when
we only want up to a certain width.

dumping a decently sized (unicode) emoji file into dmenu, I see the
startup time drop significantly with this patch.

before -> after
360ms  -> 160ms

this should also noticeably improve input latency (responsiveness) given
that calcoffsets() and drawmenu() are pretty hot functions.
3 years ago
Hiltjo Posthuma 3a505cebe8 remove false-positive warning for int comparison as bool
Reported by Prathu Baronia <prathu.baronia@praton.me>, patch slightly changed.

Thanks!
3 years ago
Hiltjo Posthuma c4b656e0da code-style: rm newline (oops) 3 years ago
Hiltjo Posthuma 3e39c526d2 revert using strcasestr and use a more optimized portable version
... compared to the old cistrstr().

Thanks for the feedback!
3 years ago
Hiltjo Posthuma eb96af27f4 improve performance of case-insensitive matching 3 years ago
Hiltjo Posthuma cd2133a5f6 add support for more keypad keys
The keypad Enter key was already supported. On some keyboard layouts like my
laptop the page-up and page-down key is more comfortable to use.
This adds a few lines but no complexity.
4 years ago
Hiltjo Posthuma db6093f6ec revert IME support
dmenu will not handle IME support (st will, atleast for now).

revert parts of commit 377bd37e21
this commit also broke input focus.
6 years ago
Hiltjo Posthuma a9b1de384a improve xopenim error message
die() already prints a newline.
6 years ago
Hiltjo Posthuma f5036b90ef fix crash when XOpenIM returns NULL
for example when IME variables are set, but the program is not started (yet).
6 years ago
Quentin Rameau 153aaf88bf Close when the embedding window is destroyed 6 years ago
dok 11a65377da Use slow path if stdin is a tty
If stdin is a tty and dmenu is ran with the fast option then it's
impossible to close stdin because the keyboard is already grabbed.
6 years ago
Hiltjo Posthuma 851b73d178 code-style for pledge: check the return code -1, not < 0
this is the proper idiom
7 years ago
Hiltjo Posthuma 05c138f5b8 code-style for pledge(2)
feedback from Klemens, thanks
7 years ago
Hiltjo Posthuma cd132c8d5b Pledge on OpenBSD 7 years ago
Quentin Rameau 0f76dd2fb8 Fix cursor drawn position with wide glyphs 7 years ago
Quentin Rameau 377bd37e21 Handle IME input
Thanks to nzl <uruabi@gmail.com> for the patch!
7 years ago
Hiltjo Posthuma b6d2cc9aea Fix handling of input strings 7 years ago
Quentin Rameau e2a280541e add key bindings for moving to the word start or end
Mod1+b/^Left and Mod1+f/^Right
7 years ago
Hiltjo Posthuma 889512811d Fix regression in 84a1bc5
Reported by Jochen Sprickerhof, thanks!

Applied patch with minor change (only initialize `i` for XINERAMA).
7 years ago
Vincent Carluer 84a1bc5d0d Instantiate j var outside #ifdef XINEMARA directive because it is used in loop outside directive 7 years ago
Hiltjo Posthuma 1cabeda550 fix a possible free of a uninitialize variable in paste() 7 years ago
Hiltjo Posthuma 41379f7c39 init colors using SchemeLast
this makes it slightly easier to add colors to schemes.
7 years ago
Omar Sandoval 64ab2801fb Set class name on menu window
WM_CLASS is a standard ICCCM property which is used to identify windows.
Window managers and compositors use it to allow per-application
configurable behavior.
7 years ago
Andrew Gregory 5cd66e2c6c Revert "fix input text matching"
This reverts commit 09d0a36e03.

Using strncmp with the length of the user input turns it into a prefix
match rather than an exact match as it's supposed to be.
8 years ago
Thomas Gardner e90b88e12a Xinerama: correct variable declarations in preprocessor conditional 8 years ago
Quentin Rameau a9a5c6cc2d add embedding support with -w option 8 years ago
Quentin Rameau a97f550aa7 dmenu.1: group single options 8 years ago
Hiltjo Posthuma 026827fd65 die() consistency: always add newline 9 years ago
Hiltjo Posthuma d14670b995 fix crash if negative monitor (< -1) was passed
for example: dmenu -m '-9001'
9 years ago
Hiltjo Posthuma aa92cd68bd Revert "Print highlighted input text only on single match"
This reverts commit a4053bc4e4.

My bad, was working on the wrong branch and accidently pushed it...
*facepalm*
9 years ago
Quentin Rameau a4053bc4e4 Print highlighted input text only on single match
When the input text fully matches a single item, do not draw the item
and highlight the input text to show that it matches an item in
opposition to regular input text not matching anything.
9 years ago
Quentin Rameau 657122f781 Partially revert 44c7de3: fix items text width offset calculation
Without this, we discard the item if it's longer than assigned width
instead of truncating it.
9 years ago
S. Gilles 76eb578304 fix: Do not crash on e.g. dmenu < /dev/null 9 years ago
Markus Teich 44c7de3dcf import new drw from libsl and minor fixes.
- extract drawitem function (code deduplication)
- fix bug where inputw was not correctly calculated from the widest item, but
  just from the one with the longest strlen() which is not the same. It's better
  now, but does not account for fallback fonts, since it would be too slow to
  calculate all the correct item widths on startup.
- minor code style fixes (indentation, useless line breaks)
9 years ago
Quentin Rameau 120e840107 Add config option for word delimiters
Let the user configure word boundaries other than ' ', only works with
the portable character set.
9 years ago
Hiltjo Posthuma cc596365ac unboolify dmenu 9 years ago
Hiltjo Posthuma da0b9eb6c9 fix: multimon: always spawn client on first monitor if specified with -m 0
This was always broken.

Reproduce:
	focus client on second monitor, spawn dmenu with -m 0.

Result:
	Old wrong behaviour: dmenu spawns on second monitor (focused client).
	Now: dmenu spawns on specified monitor (first).
9 years ago
Hiltjo Posthuma 164986763a free schemes as array
this makes it slightly easier to add custom schemes aswell
9 years ago
Quentin Rameau 09d0a36e03 fix input text matching
just compare the size of the input string
10 years ago
Davide Del Zompo acbf35a5e3 fix incorrect ordering of match results
look for exact matches comparing the user input against the item text
10 years ago
Hiltjo Posthuma 240a7810e4 fix paste from clipboard (ctrl+shift+y)
from Joshua Lloret on the ML:

"attached is a small patch to enable pasting from clipboard, as well as primary.

It seems like there was already code in there to allow this, but since there was never any case to match the upper case 'Y', that inline if would always evaluate to false."
10 years ago
Hiltjo Posthuma d5ce8df9d9 minor style fix 10 years ago
FRIGN ba75bb30fa Remove function prototypes and reorder functions accordingly 10 years ago
FRIGN 10fd4f275f Untypedef struct item
Adds clarity. Typedefs for structs are definitely a discussion matter,
but there's no reason to hide a simple data-structure behind a
meaningless typedef.
10 years ago
Quentin Rameau b048eacc9d Fix the conversion from microseconds to nanoseconds 10 years ago