aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
* fix(lua): don't override script ID from :source (#32626)zeertzjq2025-02-25
| | | | | | | | Problem: When setting an option, mapping etc. from Lua without -V1, the script ID is set to SID_LUA even if there already is a script ID assigned by :source. Solution: Don't set script ID to SID_LUA if it is already a Lua script. Also add _editor.lua to ignorelist to make script context more useful when using vim.cmd().
* fix(move): wrong cursor row on concealed line (#32629)luukvbaal2025-02-25
| | | | Problem: Cursor row calculation does not take into account concealed lines. Solution: Break the loop when the next calculated line is concealed.
* feat(treesitter): vertical conceal support for highlighterLuuk van Baal2025-02-25
| | | | | | | | TSHighlighter now places marks for conceal_lines metadata. A new internal decor provider callback _on_conceal_line was added that instructs the highlighter to place conceal_lines marks whenever the editor needs to know whether a line is concealed. The bundled markdown queries use conceal_lines metadata to conceal code block fence lines.
* feat(marks): add conceal_lines to nvim_buf_set_extmark()Luuk van Baal2025-02-25
| | | | Implement an extmark property that conceals lines vertically.
* vim-patch:9.1.1145: multi-line completion has wrong indentation for last ↵glepnir2025-02-25
| | | | | | | | | | | | line (#32625) Problem: When expanding omni completion items with newlines (e.g. `then\n\t\nend`), the end statement gets wrong indentation. Solution: Add OPENLINE_FORCE_INDENT flag to make open_line() use second_line_indent directly (glepnir) closes: vim/vim#16614 https://github.com/vim/vim/commit/5090a1fecb86c44be83d55e139ed79b7785fa090
* fix(api): don't override Vimscript SID (#32610)zeertzjq2025-02-25
| | | | | | | | | | Problem: When calling an API from Vimscript to set an option, mapping, etc., :verbose shows that it's set from an API client. Solution: Don't override current_sctx.sc_sid when calling an API from Vimscript. Also fix the inverse case where API channel id is not set when calling an API from RPC. Move channel id into sctx_T to make saving and restoring easier. Related #8329
* fix(lua): SIGSEGV in luv callback with error(nil) #32595phanium2025-02-24
| | | | | | | | | Problem: luv callback `vim.uv.new_timer():start(0, 0, function() error() end)` causes SIGSEGV, since `xstrdup` gets NULL from `lua_tostring`. Similar to: https://github.com/neovim/neovim/commit/a5b1b83a2693ffa7a5a0a22b3693d36ea60051be Solution: Check NULL before `xstrdup`.
* vim-patch:9.1.1143: illegal memory access when putting a register (#32604)zeertzjq2025-02-24
| | | | | | | | Problem: illegal memory access when putting a register Solution: make sure cursor column doesn't become negative https://github.com/vim/vim/commit/e0029daa3599529d9d438cc51c7ada8580297a39 Co-authored-by: Christian Brabandt <cb@256bit.org>
* feat(complete): CompleteDone reason "cancel", "discard" #32600Evgeni Chasnovski2025-02-23
| | | | | | | Problem: there is no way to distinguish between user's explicit completion stop/cancel and other automated reasons. Solution: update "cancel" reason to be set only on explicit CTRL-e, and set intentionally vague "discard" otherwise.
* fix(float): can set title/footer without setting border #32594Evgeni Chasnovski2025-02-23
| | | | | | | | | Problem: setting title and/or footer without explicitly setting border shows "title/footer/ requires border to be set" error. At the same time, explicitly setting `border = "none"` (which is default) shows expected no-border-no-title-no-footer window without error. Solution: allow setting title/footer without explicitly setting border.
* vim-patch:9.1.1141: Misplaced comment in readfile()zeertzjq2025-02-23
| | | | | | | | | | | Problem: Misplaced comment in readfile(). (after v9.1.1139) Solution: Move the comment above S_ISDIR(). (zeertzjq) closes: vim/vim#16714 https://github.com/vim/vim/commit/b8989fb860808bbcb0e90b2ba597f66a092277d8
* vim-patch:9.1.1139: [fifo] is not displayed when editing a fifozeertzjq2025-02-23
| | | | | | | | | | | | | Problem: [fifo] is not displayed when editing a fifo (after v7.4.2189) Solution: stat the filename and detect the type correctly fixes: vim/vim#16702 closes: vim/vim#16705 https://github.com/vim/vim/commit/f1c3134ee1f263e537212a3072e8aa4cb7e8d953 Co-authored-by: Christian Brabandt <cb@256bit.org>
* vim-patch:9.1.1137: ins_str() is inefficient by calling STRLEN() (#32591)zeertzjq2025-02-23
| | | | | | | | | | | | Problem: ins_str() is inefficient by calling STRLLEN() Solution: refactor ins_str() to take a length argument and let all callers provide the correct length when calling ins_str() (John Marriott) closes: vim/vim#16711 https://github.com/vim/vim/commit/f4b36417e893ff40296f1a5a264a4ecc6965f1d5 Co-authored-by: John Marriott <basilisk@internode.on.net>
* vim-patch:9.1.1136: Match highlighting marks a buffer region as changed (#32561)luukvbaal2025-02-23
| | | | | | | | Problem: Match highlighting marks a buffer region to be redrawn as if its buffer text was changed, unnecessarily invoking syntax code. Solution: Set the `w_redraw_top/bot` variables instead of the b_mod_* ones (Luuk van Baal) https://github.com/vim/vim/commit/7bbb0f357e9f9d3a737dac75e4b5ba7dfbf3ecc1
* vim-patch:9.1.1135: 'suffixesadd' doesn't work with multiple items (#32573)zeertzjq2025-02-22
| | | | | | | | | | | Problem: 'suffixesadd' doesn't work with multiple items (after 9.1.1122). Solution: Don't concat multiple suffixes together. (zeertzjq) fixes: vim/vim#16694 closes: vim/vim#16699 https://github.com/vim/vim/commit/bf595ae4ac9ecc1e0620664177072926ed3679ff
* vim-patch:9.1.1132: Mark positions wrong after triggering multiline ↵zeertzjq2025-02-21
| | | | | | | | | | | | | completion (#32564) Problem: Mark positions wrong after triggering multiline completion. Solution: Call deleted_lines_mark() after deleting lines. (zeertzjq) closes: vim/vim#16687 https://github.com/vim/vim/commit/060e6556e2cd97512cee1f46bc7915768c0f9e21 Co-authored-by: Sean Dewar <6256228+seandewar@users.noreply.github.com>
* vim-patch:partial:9.1.1131: potential out-of-memory issue in search.c (#32565)zeertzjq2025-02-21
| | | | | | | | | | | | | | | | | | | | | | Problem: potential out-of-memory issue in search.c Solution: improve situation and refactor search.c slightly (John Marriott) - In function update_search_stat(): add a check for a theoretical null pointer reference, set and remember the length of lastpat, remove the three calls to STRLEN() and use the various string's associated lengths instead, add a check for an out-of-memory condition. - In function search_for_fuzz_match(): remove a call to strnsave() and thus avoid having to add a check for an out-of-memory condition, also replace the call to STRLEN() by ml_get_buf_len(). closes: vim/vim#16689 https://github.com/vim/vim/commit/b79fa3d9c8a08f15267797511d779e33bd33e68e Co-authored-by: John Marriott <basilisk@internode.on.net>
* fix(marks): truncate double-width inline virt_text consistently (#32560)zeertzjq2025-02-21
| | | | - Fix wrong cursor position with 'listchars' "precedes". - Always show the '<' truncation character.
* vim-patch:9.1.1130: 'listchars' "precedes" is not drawn on Tabs. (#32563)zeertzjq2025-02-21
| | | | | | | | | | Problem: 'listchars' "precedes" is not drawn on Tabs. Solution: Only draw 'listchars' "precedes" when not skipping over cells. (zeertzjq) fixes: vim/vim#5927 closes: vim/vim#16691 https://github.com/vim/vim/commit/13f100e9328b1344fec79806791eb3f5234d4ccc
* fix(treesitter): `TSNode:field()` returns all children with the given fieldRiley Bruins2025-02-21
|
* fix(messages): list_cmd kind for :registers, :au[g] #32531luukvbaal2025-02-20
| | | | | | | | Problem: No kind for `:registers/autocmd/augroup` messages. `:registers` chunks are emitted as separate `msg_show` events. Solution: Add the `list_cmd` kind to the message. Introduce a new `msg_ext_skip_flush` variable to set to true around a group of to be paired message chunks.
* vim-patch:9.1.1127: preinsert text is not cleaned up correctly (#32544)zeertzjq2025-02-21
| | | | | | | | | | | | Problem: when 'completeopt' is set to preinsert the preinserted text is not cleared when adding new leader (Yee Cheng Chin) Solution: add a condition to delete preinsert text in edit function (glepnir) closes: vim/vim#16672 https://github.com/vim/vim/commit/52fd867f5e8a371653ee4fb6664593c82030f855 Co-authored-by: glepnir <glephunter@gmail.com>
* vim-patch:9.1.1125: cannot loop through pum menu with multiline items (#32543)zeertzjq2025-02-21
| | | | | | | | | | | | Problem: cannot loop through pum menu with multiline items with fuzzy and noselect in 'completeopt' (Tomasz N) Solution: remove unnecessary compl_no_select condition (glepnir) fixes: vim/vim#16641 closes: vim/vim#16674 https://github.com/vim/vim/commit/3af0a8d8f5b090a6a4b085e7b6ee0f5f87eda399 Co-authored-by: glepnir <glephunter@gmail.com>
* vim-patch:9.1.1126: patch 9.1.1121 used a wrong way to handle enterzeertzjq2025-02-21
| | | | | | | | | | | | Problem: patch 9.1.1121 used a wrong way to handle enter Solution: compl_enter_selects also needs to consider the selected item in ins_compl_new_leader() (glepnir) closes: vim/vim#16673 https://github.com/vim/vim/commit/44180416981000ad0bc5db4686889892e7a05cdd Co-authored-by: glepnir <glephunter@gmail.com>
* vim-patch:9.1.1121: Enter does not insert newline with "noselect"glepnir2025-02-21
| | | | | | | | | | | | | | | Problem: Enter does not insert newline with "noselect" when the pum is visible (lifepillar) Solution: When Enter is pressed and no complete-item is selected, ins_compl_prep returns false, and the edit function continues processing Enter to insert a new line. (glepnir) fixes: vim/vim#1653 closes: vim/vim#16653 https://github.com/vim/vim/commit/07f0dbe3aa326fdf4d0f1b1cf7d79df89e91fc6e Co-authored-by: glepnir <glephunter@gmail.com>
* vim-patch:9.1.1124: No test for 'listchars' "precedes" with double-width ↵zeertzjq2025-02-21
| | | | | | | | | | | | | | char (#32541) Problem: No test for 'listchars' "precedes" with double-width char. Solution: Add a test and fix a typo in code (zeertzjq). closes: vim/vim#16675 https://github.com/vim/vim/commit/08a83a033a32c0f5bc42eaa63162c21c369cb4ae Cherry-pick test_listchars.vim changes from patch 9.0.0625. Fix a regression from #30014 by moving the mb_schar assignment after the double-width check.
* feat(messages): confirm kind for z=, :tselect, inputlist() #32521luukvbaal2025-02-20
| | | | | | | | | | | Problem: Messages preceding a `cmdline_show->prompt` event can not be distinguished as such when receiving the event. (But since `msg_show` handlers should be scheduled, one can already check whether a prompt is active when displaying the message.) Solution: Rather than add a new kind again, use the `confirm` kind. Could be seen as slightly misleading where it is more of a choice rather than a confirmation, but that already applies to `confirm()` as well...
* feat(marks): virtual lines support horizontal scrolling (#32497)zeertzjq2025-02-20
| | | | Add a new field `virt_lines_overflow` that enables horizontal scrolling for virtual lines when set to "scroll".
* fix(keycodes): recognize <Find>, <Select> #28431Mantas Mikulėnas2025-02-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PuTTY sets TERM=xterm, but sends ESC[1~ and ESC[4~ for Home/End keys, which does not match what the 'xterm' terminfo has for khome/kend, so libtermkeys instead reports them as the original DEC VT220 names. The VT220 came with a DEC LK201 keyboard which had the following keys in the area above arrow keys (where PCs now have Ins/Del/Home/End/etc): ┌────────┬────────┬────────┐ │ Find │ Insert │ Re- │ │ │ Here │ move │ ├────────┼────────┼────────┤ │ Select │ Prev │ Next │ │ │ Screen │ Screen │ └────────┴────────┴────────┘ These would send ESC[x~ sequences in the expected order: ┌────────┬────────┬────────┐ │ ESC[1~ │ ESC[2~ │ ESC[3~ │ ├────────┼────────┼────────┤ │ ESC[4~ │ ESC[5~ │ ESC[6~ │ └────────┴────────┴────────┘ Modern terminals continue to use the same sequences for Ins/Del as well as PageUp/PageDn. But the VT220 keyboard apparently had no Home/End, and PuTTY apparently chose to re-purpose the Find/Select key sequences for Home/End (even though it claims to emulate Xterm and this doesn't match what actual Xterm does). So when Home/End are used in Neovim through PuTTY with TERM=xterm (the default setting), libtermkey finds no match for the received sequences in the terminfo database and defaults to reporting them as <Find> and <Select> respectively. PuTTY is not unique here -- tmux *also* sends ESC[1~ and ESC[4~ after its internal translation -- but the difference is that 'tmux' terminfo correctly maps them to Home/End so Neovim recognizes them as such, while PuTTY defaults to using 'xterm' which uses a different mapping. This initial patch only allows Neovim to recognize <Find> and <Select> key codes as themselves, so that the user could manually map them e.g. using ":imap <Find> <Home>". Alternatives: - Using TERM=putty(-256color) would of course be the most correct solution, but in practice it leads to other minor issues, e.g. the need to have different PuTTY config profiles for older or non-Linux systems that lack that terminfo, or tmux's insistence on rendering italics as reverse. - Using Neovim through tmux avoids the problem (as tmux recognizes ESC[1~ on input), but is something that needs to be manually run every time. The keycodes.h constants are slightly misnamed because K_SELECT was already taken for a different purpose.
* fix(api): remove invalid assertionsLuuk van Baal2025-02-19
| | | | | Problem: `try_leave()` assertions moved in #31600 no longer hold. Solution: Remove the assertions.
* fix(terminal): avoid more `busy_start` lacking `busy_stop` (#32509)Sean Dewar2025-02-19
| | | | | | | | | | | Problem: after #32458, it may still be possible for `busy_start` UI events to be emitted without matching `busy_stop`s in the terminal. Solution: do `terminal_enter`'s cursor visibility check immediately after setting/restoring State so it occurs before events. This ensures that if pending escape sequences are processed while in `terminal_enter`, the cursor's initial visibility is set before `is_focused` is checked by `term_settermprop`. As a result, we can move the call to `showmode` back to where it was originally.
* vim-patch:9.1.1122: too many strlen() calls in findfile.c (#32516)zeertzjq2025-02-19
| | | | | | | | | | | Problem: too many strlen() calls in findfile.c Solution: refactor findfile.c and remove calls to strlen() (John Marriott) closes: vim/vim#16595 https://github.com/vim/vim/commit/d6e3c9048dfb7e8f08f8fadc820c7e2208c3f030 Co-authored-by: John Marriott <basilisk@internode.on.net>
* vim-patch:5647c91: runtime(doc): add reference to extendnew() at extend() ↵zeertzjq2025-02-17
| | | | | | | | | (#32500) related: vim/vim#16607 https://github.com/vim/vim/commit/5647c91355f1ff3a1030c737bf5133bb7da5bb76 Co-authored-by: Christian Brabandt <cb@256bit.org>
* refactor(channel): eliminate special case in on_proc_exit() #32485Justin M. Keyes2025-02-17
| | | | | | | | | | | Problem: on_proc_exit() has a special-case that assumes that the UI client will never spawn more than 1 child process. Solution: If the Nvim server exits, the stream EOF will trigger `rpc_close()` in the UI client, so we don't need the special case in `on_proc_exit`. Pass `Channel.exit_status` from `rpc_close()` so that the correct exit code is reflected.
* docs: misc (#32258)dundargoc2025-02-17
| | | | | Co-authored-by: Evgeni Chasnovski <evgeni.chasnovski@gmail.com> Co-authored-by: Julian Visser <12615757+justmejulian@users.noreply.github.com> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
* docs: stdpath() type #32480phanium2025-02-16
|
* fix(marks): handle composing in inline virt_text with 'nowrap' (#32477)zeertzjq2025-02-16
|
* fix(marks): handle double-with inline virt_text with 'nowrap' (#32476)zeertzjq2025-02-16
|
* fix(terminal): avoid mismatched `busy_start` without `busy_stop` (#32458)Sean Dewar2025-02-15
| | | | | | | | | | | | | | | | Problem: `showmode` in `terminal_enter` may cause `vpeekc` to process events, which may handle pending escape sequences. If `CSI ? 25 l` is handled to hide the cursor, it may remain hidden even after leaving terminal mode if both `terminal_enter` and (indirectly) `showmode` call `ui_busy_start`, as there is only one matching call to `ui_busy_stop` after leaving terminal mode. Solution: let `terminal_enter` handle setting the initial visibility of the cursor before calling `showmode`. Closes #32456. This simple solution assumes it isn't possible for e.g. `os_breakcheck` to be called indirectly by something else before `terminal_enter` initially handles cursor visibility and after it restores it, which I think is true.
* vim-patch:9.1.1112: Inconsistencies in get_next_or_prev_match() (#32447)zeertzjq2025-02-14
| | | | | | | | | Problem: Inconsistencies in get_next_or_prev_match() (after 9.1.1109). Solution: Change "file" to "entry" or "match" in comments. Use the same order of branches for PAGEUP and PAGEDOWN (zeertzjq). closes: vim/vim#16633 https://github.com/vim/vim/commit/b6c900be9ce49f688d3a03c2767dedb48e4f23ae
* fix(float): "Not enough room" error for 1-line float #25192glepnir2025-02-14
| | | | | | | | | Problem: set winbar on a floating window which only have one row will cause crash. Solution: when new floating window only have one room don't copy winbar from target window" Fix #19464
* build(windows)!: drop cat and tee executables from windowsdundargoc2025-02-14
| | | | | | | | The legitimacy of the binaries can't be guaranteed and poses a security risk. A replacement version of these may be introduced in the future in a more secure manner. Closes https://github.com/neovim/neovim/issues/32431.
* vim-patch:9.1.1107: cannot loop through completion menu with fuzzy (#32438)zeertzjq2025-02-14
| | | | | | | | | | | | | | | Problem: cannot loop through completion menu with fuzzy and nosort in 'completeopt' (Tomasz N) Solution: Reset cur to zero and update compl_shown_match when 'completeopt' contains "nosort" but not "noselect" (glepnir) fixes: vim/vim#16624 closes: vim/vim#16629 https://github.com/vim/vim/commit/c0b7ca406ba18640c56e2746d6f6d03549d53072 Co-authored-by: glepnir <glephunter@gmail.com>
* vim-patch:9.1.1109: cmdexpand.c hard to read (#32437)zeertzjq2025-02-14
| | | | | | | | | | Problem: cmdexpand.c hard to read Solution: refactor the file slightly (glepnir) closes: vim/vim#16621 https://github.com/vim/vim/commit/977561a7198b5d31a17b852e332704025c2dbdc8 Co-authored-by: glepnir <glephunter@gmail.com>
* vim-patch:9.1.1108: 'smoothscroll' gets stuck with 'listchars' "eol" (#32434)zeertzjq2025-02-13
| | | | | | | | | | Problem: 'smoothscroll' gets stuck with 'listchars' "eol". Solution: Count size of 'listchars' "eol" in line size when scrolling. (zeertzjq) related: neovim/neovim#32405 closes: vim/vim#16627 https://github.com/vim/vim/commit/2c47ab8fcd7188fa87053c757ea86b0d846c06c1
* feat(term): trigger TermRequest for APC (#32407)Till Bungert2025-02-13
| | | | Co-authored-by: Gregory Anders <greg@gpanders.com> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
* fix(memline): don't check line count for closed memline #32403luukvbaal2025-02-12
| | | | | | Problem: Error thrown when for invalid line number which may be accessed in an `on_detach` callback at which point line count is intentionally set to 0. Solution: Move empty memline check to before line number check.
* feat(column): apply appropriate numhl highlight to virt_lines (#32400)luukvbaal2025-02-12
| | | | | | | Problem: Number and statuscolumn highlighting for virtual lines does not take always take on numhl highlights. Solution: Apply the appropriate numhl highlight to the number/statuscolumn of virtual lines, fetching the numhl highlight of the line above for `virt_line_above == false` lines.
* feat(options): add 'eventignorewin' (#32152)luukvbaal2025-02-12
| | | | | | | | | | | | | | | | | | | | | | | | | vim-patch:partial:9.1.1084: Unable to persistently ignore events in a window and its buffers Problem: Unable to persistently ignore events in a window and its buffers. Solution: Add 'eventignorewin' option to ignore events in a window and buffer (Luuk van Baal) Add the window-local 'eventignorewin' option that is analogous to 'eventignore', but applies to a certain window and its buffers. Identify events that should be allowed in 'eventignorewin', adapt "auto_event" and "event_tab" to encode this information. Window context is not passed onto apply_autocmds_group(), and when to ignore an event is a bit ambiguous when "buf" is not "curbuf", rather than a large refactor, only ignore an event when all windows into "buf" are ignoring the event. https://github.com/vim/vim/commit/b7147f8236c962cd74d1ce028d9106f1c449ea6c vim-patch:9.1.1102: tests: Test_WinScrolled_Resized_eiw() uses wrong filename Problem: tests: Test_WinScrolled_Resized_eiw() uses wrong filename (Luuk van Baal, after v9.1.1084) Solution: Rename the filename to something more unique https://github.com/vim/vim/commit/bfc7719e48ffc365ee0a1bd1888120d26b6365f0
* refactor(insexpand.c): remove duplicate assignment (#32410)zeertzjq2025-02-12
|