summaryrefslogtreecommitdiffstats
path: root/dmenu.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* tab-complete: figure out the size before copyingGravatar NRK 2022-09-021-2/+2
| | | | | | | | | 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).
* readstdin: use getline(3)Gravatar NRK 2022-09-021-7/+7
| | | | | | | | | | | | | 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.
* fix incorrect comment, math is hardGravatar Hiltjo Posthuma 2022-04-301-1/+1
|
* inputw: improve correctness and startup performance, by NRKGravatar Hiltjo Posthuma 2022-04-291-8/+2
| | | | | | | | 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).
* fix UB with the function iscntrl()Gravatar Hiltjo Posthuma 2022-03-261-1/+1
| | | | From commit 6818e07291f3b2913e687c8ec3d3fe4711724050 by NRK, thanks
* Revert "avoid redraw when there's no change"Gravatar Hiltjo Posthuma 2022-03-261-3/+2
| | | | | | This reverts commit 6818e07291f3b2913e687c8ec3d3fe4711724050. This broke keys such as ^W to delete-backward-word
* avoid redraw when there's no changeGravatar NRK 2022-03-251-2/+3
| | | | | | | | | | | | | 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.
* free all allocated items, use %zu for size_tGravatar NRK 2022-03-251-3/+6
| | | | | `items` itself is not checked for NULL as calling free on NULL is defined to be a no-op.
* inputw: improve correctness and startup performanceGravatar NRK 2022-03-251-10/+9
| | | | | | | | | | | | | | | | 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.
* significantly improve performance on large stringsGravatar NRK 2022-03-251-3/+10
| | | | | | | | | | | | | | | 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.
* remove false-positive warning for int comparison as boolGravatar Hiltjo Posthuma 2022-03-011-1/+1
| | | | | | Reported by Prathu Baronia <prathu.baronia@praton.me>, patch slightly changed. Thanks!
* code-style: rm newline (oops)Gravatar Hiltjo Posthuma 2022-02-081-1/+0
|
* revert using strcasestr and use a more optimized portable versionGravatar Hiltjo Posthuma 2022-02-081-1/+20
| | | | | | ... compared to the old cistrstr(). Thanks for the feedback!
* improve performance of case-insensitive matchingGravatar Hiltjo Posthuma 2022-02-071-12/+1
|
* add support for more keypad keysGravatar Hiltjo Posthuma 2021-08-091-0/+11
| | | | | | 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.
* revert IME supportGravatar Hiltjo Posthuma 2019-03-031-12/+3
| | | | | | | dmenu will not handle IME support (st will, atleast for now). revert parts of commit 377bd37e212b1ec4c03a481245603c6560d0be22 this commit also broke input focus.
* improve xopenim error messageGravatar Hiltjo Posthuma 2019-02-121-1/+1
| | | | die() already prints a newline.
* fix crash when XOpenIM returns NULLGravatar Hiltjo Posthuma 2019-02-121-2/+11
| | | | for example when IME variables are set, but the program is not started (yet).
* Close when the embedding window is destroyedGravatar Quentin Rameau 2019-02-041-1/+6
|
* Use slow path if stdin is a ttyGravatar dok 2019-01-271-3/+1
| | | | | 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.
* code-style for pledge: check the return code -1, not < 0Gravatar Hiltjo Posthuma 2018-05-251-1/+1
| | | | this is the proper idiom
* code-style for pledge(2)Gravatar Hiltjo Posthuma 2018-05-251-6/+5
| | | | feedback from Klemens, thanks
* Pledge on OpenBSDGravatar Hiltjo Posthuma 2018-05-251-0/+9
|
* Fix cursor drawn position with wide glyphsGravatar Quentin Rameau 2018-04-221-1/+1
|
* Handle IME inputGravatar Quentin Rameau 2018-04-221-1/+4
| | | | Thanks to nzl <uruabi@gmail.com> for the patch!
* Fix handling of input stringsGravatar Hiltjo Posthuma 2018-04-221-14/+21
|
* add key bindings for moving to the word start or endGravatar Quentin Rameau 2018-03-131-0/+34
| | | | Mod1+b/^Left and Mod1+f/^Right
* Fix regression in 84a1bc5Gravatar Hiltjo Posthuma 2018-01-041-1/+2
| | | | | | Reported by Jochen Sprickerhof, thanks! Applied patch with minor change (only initialize `i` for XINERAMA).
* Instantiate j var outside #ifdef XINEMARA directive because it is used in ↵Gravatar Vincent Carluer 2018-01-041-3/+2
| | | | loop outside directive
* fix a possible free of a uninitialize variable in paste()Gravatar Hiltjo Posthuma 2017-11-031-4/+6
|
* init colors using SchemeLastGravatar Hiltjo Posthuma 2017-11-031-3/+2
| | | | this makes it slightly easier to add colors to schemes.
* Set class name on menu windowGravatar Omar Sandoval 2017-11-031-0/+2
| | | | | | 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.
* Revert "fix input text matching"Gravatar Andrew Gregory 2016-12-111-1/+1
| | | | | | | This reverts commit 09d0a36e0370f7ca9bdb171bf93c5ac3131c5a92. 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.
* Xinerama: correct variable declarations in preprocessor conditionalGravatar Thomas Gardner 2016-11-251-5/+6
|
* add embedding support with -w optionGravatar Quentin Rameau 2016-10-141-12/+53
|
* dmenu.1: group single optionsGravatar Quentin Rameau 2016-10-141-2/+2
|
* die() consistency: always add newlineGravatar Hiltjo Posthuma 2016-08-121-4/+4
|
* fix crash if negative monitor (< -1) was passedGravatar Hiltjo Posthuma 2016-07-261-2/+2
| | | | for example: dmenu -m '-9001'
* Revert "Print highlighted input text only on single match"Gravatar Hiltjo Posthuma 2016-07-261-13/+3
| | | | | | | This reverts commit a4053bc4e403ae57343f43b7e363a0911bba5a3a. My bad, was working on the wrong branch and accidently pushed it... *facepalm*
* Print highlighted input text only on single matchGravatar Quentin Rameau 2016-07-261-3/+13
| | | | | | 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.
* Partially revert 44c7de3: fix items text width offset calculationGravatar Quentin Rameau 2016-07-251-2/+2
| | | | | Without this, we discard the item if it's longer than assigned width instead of truncating it.
* fix: Do not crash on e.g. dmenu < /dev/nullGravatar S. Gilles 2016-06-281-1/+1
|
* import new drw from libsl and minor fixes.Gravatar Markus Teich 2016-06-031-79/+68
| | | | | | | | | - 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)
* Add config option for word delimitersGravatar Quentin Rameau 2015-12-191-2/+4
| | | | | Let the user configure word boundaries other than ' ', only works with the portable character set.
* unboolify dmenuGravatar Hiltjo Posthuma 2015-11-081-8/+6
|
* fix: multimon: always spawn client on first monitor if specified with -m 0Gravatar Hiltjo Posthuma 2015-11-071-1/+1
| | | | | | | | | | | 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).
* free schemes as arrayGravatar Hiltjo Posthuma 2015-10-181-6/+6
| | | | this makes it slightly easier to add custom schemes aswell
* fix input text matchingGravatar Quentin Rameau 2015-10-041-1/+1
| | | | just compare the size of the input string
* fix incorrect ordering of match resultsGravatar Davide Del Zompo 2015-10-041-2/+3
| | | | look for exact matches comparing the user input against the item text
* fix paste from clipboard (ctrl+shift+y)Gravatar Hiltjo Posthuma 2015-10-041-0/+1
| | | | | | | | 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."