Ensure that any keystrokes that are queued at picker launch are processed only
after the picker's mode (`insert` or `normal`) has been chosen, preserving
their intended meaning.
Previously the picker's mode was set by simulating keystrokes via `feedkeys()`.
In the absence of queued keystrokes, this works fine; but if the user is able
to queue keystrokes before the call to `feedkeys()`, those queued keystrokes
are processed before the simulated keystrokes that change the picker's mode.
Because of this unexpected ordering, the user's queued keystrokes may appear to
be ignored or may cause the picker to start in the wrong mode.
For example, consider the below normal-mode mapping:
```vim
:nnoremap <space>ff :Telescope find_files<CR>
```
Upon launching the picker via `<space>ff`, Neovim is already in normal mode.
To switch to insert mode in the picker, Telescope previously used a call to
`feedkeys("A")`, simulating a keypress of `A` to enter insert mode at the end
of the current line. This `A` will not be processed until all previously
queued user keystrokes have been processed, causing issues.
In real-world use, problems occur when the user types `<space>ff` followed
quickly by characters intended as fuzzy match text. This can be demonstrated
using `feedkeys()` as shown below.
```vim
:call feedkeys("\<space>ff" . "apple")
```
The user intended to search for `apple`, but the `a` is mis-interpreted as a
request to enter insert mode at end of line, after which `pple` is inserted;
subsequently, Telescope's simulated `A` is then appended, resulting in a search
string of `ppleA`.
Using `:startinsert!` (to enter insert mode as if by `A`) or `:normal! $` (to
enter normal mode and move to end-of-line) avoids interfering with the user's
queued keys.
Fixes#2274.
* Starting to make some progress on extmarks for prefixes
* Finished up extmarks for multi-icons
* Cleaned up update_prefix calls, added display highlights
* remove highlight_one_row
* Remove TODOs
* stylua fixes
* fixes for luacheck
* Fixed whitespace to appease the stylua gods
* fixed a couple nits from pr
* Got tests passing with new highlighting functionality
* Apply suggestions from code review
Co-authored-by: Fabian David Schmidt <39233597+fdschmidt93@users.noreply.github.com>
Co-authored-by: Fabian David Schmidt <39233597+fdschmidt93@users.noreply.github.com>
currently enabled for some builtins. You can manually enable it by adding `push_cursor_on_edit = true` to the builtin options. But feel free to open a PR if you find a builtin that needs this option enabled.
* Number type should be allowed for option keys
Some extension (e.g. `dap`) use integer numbers for their selector
options instead of strings. Before this commit, the interface for these
plugins breaks when using `ui-select` with a stack trace like the
following:
Error detected while processing function StartDebugger:
line 33:
E5108: Error executing lua .../telescope.nvim/lua/telescope/pickers.lua:1359: Should be string, found: number
stack traceback:
[C]: in function 'assert'
.../.vim/bundle/telescope.nvim/lua/telescope/pickers.lua:1359: in function 'new'
...e-ui-select.nvim/lua/telescope/_extensions/ui-select.lua:22: in function 'pick_one'
.../nvim-dap/lua/dap/ui.lua:32: in function 'pick_if_many'
.../nvim-dap/lua/dap.lua:225: in function 'select_config_and_run'
.../nvim-dap/lua/dap.lua:551: in function 'continue'
[string ":lua"]:1: in main chunk
* style
Co-authored-by: Simon Hauser <Simon-Hauser@outlook.de>