aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
...
* | | feat(api): broadcast events to ALL channels #28487Justin M. Keyes2024-05-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: `vim.rpcnotify(0)` and `rpcnotify(0)` are documented as follows: If {channel} is 0, the event is broadcast to all channels. But that's not actually true. Channels must call `nvim_subscribe` to receive "broadcast" events, so it's actually "multicast". - Assuming there is a use-case for "broadcast", the current model adds an extra step for broadcasting: all channels need to "subscribe". - The presence of `nvim_subscribe` is a source of confusion for users, because its name implies something more generally useful than what it does. Presumably the use-case of `nvim_subscribe` is to avoid "noise" on RPC channels not expected a broadcast notification, and potentially an error if the channel client reports an unknown event. Solution: - Deprecate `nvim_subscribe`/`nvim_unsubscribe`. - If applications want to multicast, they can keep their own multicast list. Or they can use `nvim_list_chans()` and `nvim_get_chan_info()` to enumerate and filter the clients they want to target. - Always send "broadcast" events to ALL channels. Don't require channels to "subscribe" to receive broadcasts. This matches the documented behavior of `rpcnotify()`.
* | | fix(path): avoid chdir() when resolving path (#28799)zeertzjq2024-05-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use uv_fs_realpath() instead. It seems that uv_fs_realpath() has some problems on non-Linux platforms: - macOS and other BSDs: this function will fail with UV_ELOOP if more than 32 symlinks are found while resolving the given path. This limit is hardcoded and cannot be sidestepped. - Windows: while this function works in the common case, there are a number of corner cases where it doesn't: - Paths in ramdisk volumes created by tools which sidestep the Volume Manager (such as ImDisk) cannot be resolved. - Inconsistent casing when using drive letters. - Resolved path bypasses subst'd drives. Ref: https://docs.libuv.org/en/v1.x/fs.html#c.uv_fs_realpath I don't know if the old implementation that uses uv_chdir() and uv_cwd() also suffers from the same problems. - For the ELOOP case, chdir() seems to have the same limitations. - On Windows, Vim doesn't use anything like chdir() either. It uses _wfullpath(), while libuv uses GetFinalPathNameByHandleW().
* | | fix(version): fix vim.version().prereleasebfredl2024-05-16
|/ / | | | | | | fixes #28782 (when backported)
* | perf(treesitter): use child_containing_descendant() in has-ancestor? (#28512)vanaigr2024-05-16
| | | | | | | | | | | | | | | | | | Problem: `has-ancestor?` is O(n²) for the depth of the tree since it iterates over each of the node's ancestors (bottom-up), and each ancestor takes O(n) time. This happens because tree-sitter's nodes don't store their parent nodes, and the tree is searched (top-down) each time a new parent is requested. Solution: Make use of new `ts_node_child_containing_descendant()` in tree-sitter v0.22.6 (which is now the minimum required version) to rewrite the `has-ancestor?` predicate in C to become O(n). For a sample file, decreases the time taken by `has-ancestor?` from 360ms to 6ms.
* | vim-patch:5faeb60480c6 (#28768)zeertzjq2024-05-16
| | | | | | | | | | | | | | | | | | | | | | | | runtime(doc): clarify {special} argument for shellescape() closes: vim/vim#14770 https://github.com/vim/vim/commit/5faeb60480c6efba5c0468c01275120b6ace5a09 N/A patch: vim-patch:c0e038b59f84 Co-authored-by: Enno <Konfekt@users.noreply.github.com>
* | vim-patch:9.1.0413: smoothscroll may cause infinite loop (#28763)zeertzjq2024-05-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: smoothscroll may cause infinite loop, with very narrow windows (Jaehwang Jung, after v9.1.0280) Solution: Check for width1 being negative, verify that win_linetabsize does not overflow fixes: vim/vim#14750 closes: vim/vim#14772 https://github.com/vim/vim/commit/eff20eb35d2dba413c6d115291dd9ddea705e802 Co-authored-by: Christian Brabandt <cb@256bit.org>
* | fix(messages): avoid passing negative length to strnlen() (#28753)zeertzjq2024-05-15
| | | | | | | | | | | | | | | | | | | | | | Problem: Compiler warning when building Nvim in Release mode: In function ‘msg_puts_display’, inlined from ‘disp_sb_line’ at **/src/nvim/message.c:2647:5: **/src/nvim/message.c:2165:18: warning: ‘strnlen’ specified bound 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Wstringop-overread] 2165 | size_t len = strnlen(str, (size_t)maxlen); | ^ Solution: Use strlen() when maxlen is negative.
* | build: bump uncrustify to version 0.79.0 (#28756)Christian Clason2024-05-15
| | | | | | new non-default option `sp_string_string = force`
* | docs: misc (#28609)dundargoc2024-05-15
| | | | | | | | | | | | | | | | | | | | | | | | Closes https://github.com/neovim/neovim/issues/28484. Closes https://github.com/neovim/neovim/issues/28719. Co-authored-by: Chris <crwebb85@gmail.com> Co-authored-by: Gregory Anders <greg@gpanders.com> Co-authored-by: Jake B <16889000+jakethedev@users.noreply.github.com> Co-authored-by: Jonathan Raines <jonathan.s.raines@gmail.com> Co-authored-by: Yi Ming <ofseed@foxmail.com> Co-authored-by: Zane Dufour <zane@znd4.me> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
* | refactor(api): nvim_win_xx_ns are EXPERIMENTALJustin M. Keyes2024-05-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: The nvim_win_xx_ns function family introduced in ba0370b1d718d473d0ef51c35d88b98ba220082b needs more bake-time. Currently it's narrowly defined for windows, but other scopes ("buffer") and features are likely in the future. Solution: - Rename the API with double-underscore to mark it as EXPERIMENTAL. TODO/FUTURE: - Rename and change the signature to support more than just "window" scope, and for other flexibility. - Open question: we could choose either: - "store scopes on namespaces", or - "store namespaces on scopes (w:/b:/…)"
* | refactor(api): rename nvim_win_remove_nsJustin M. Keyes2024-05-12
| | | | | | | | | | | | | | | | Problem: nvim_win_remove_ns does not follow `help dev-naming` API naming conventions. Solution: Rename it.
* | Merge pull request #28717 from bfredl/rpcmsgbfredl2024-05-12
|\ \ | |/ |/| fix(ui): data corruption in remote_ui_raw_line
| * fix(ui): data corruption in remote_ui_raw_linebfredl2024-05-12
| | | | | | | | | | | | This particular repro is quite niche but there could be other cases, whenever the the second last cell plus the "fill" cell togheter are too complex
* | fix(api): make getting explicit empty hl in virtual text work (#28697)zeertzjq2024-05-12
|/
* vim-patch:9.1.0407: Stuck with long line and half-page scrolling (#28704)luukvbaal2024-05-11
| | | | | | | | | | Problem: No scrolling happens with half-page scrolling with line filling entire window when 'smoothscroll' is disabled. (Mathias Rav, after v9.1.0285) Solution: Adjust amount to move cursor by so that it is moved the same number of lines as was scrolled, even when scrolling different number of lines than requested with 'nosmoothscroll'. https://github.com/vim/vim/commit/58448e09be497a8abb595ae309b6edfbc8e0e05a
* vim-patch:9.1.0406: Divide by zero with getmousepos() and 'smoothscroll' ↵zeertzjq2024-05-11
| | | | | | | | | | | (#28701) Problem: Divide by zero with getmousepos() and 'smoothscroll'. Solution: Don't compute skip_lines when width1 is zero. (zeertzjq) closes: vim/vim#14747 https://github.com/vim/vim/commit/031a745608d615d56f9d79bb0f76e2a74b2eaf14
* fix: transposed xcalloc arguments (#28695)zeertzjq2024-05-11
|
* Merge pull request #28676 from luukvbaal/tuiflushbfredl2024-05-10
|\ | | | | fix(tui): initialize clear attrs with current terminal background
| * fix(tui): initialize clear attrs with current terminal backgroundLuuk van Baal2024-05-10
| | | | | | | | | | | | | | Problem: Invalidated regions that are flushed during startup are cleared with unitialized "clear_attrs", which is perceived as flickering. Solution: Initialize "clear_attrs" with current terminal background color.
* | vim-patch:9.1.0397: Wrong display with 'smoothscroll' when changing quickfix ↵zeertzjq2024-05-09
|/ | | | | | | | | | list (#28674) Problem: Wrong display with 'smoothscroll' when changing quickfix list. Solution: Reset w_skipcol when replacing quickfix list (zeertzjq). closes: vim/vim#14730 https://github.com/vim/vim/commit/c7a8eb5ff2ddd919e6f39faec93d81c52874695a
* refactor(change): check all tabpages in changed_lines_invalidate_buf() (#28666)zeertzjq2024-05-08
| | | | | This most likely doesn't matter as all windows are redrawn when switching tabpages and w_valid is reset is entering window, but still check all tabpages for consistency with changed_common().
* refactor(fold): avoid coverity false-positiveJaehwang Jung2024-05-07
| | | | Also add some more argument checks.
* docs: fix lua type warnings (#28633)Maria José Solano2024-05-05
|
* vim-patch:ad4881cb3c04 (#28636)zeertzjq2024-05-04
| | | | | | | runtime(doc): correct getscriptinfo() example (vim/vim#14718) When "sid" is specified, it returns a List with a single item. https://github.com/vim/vim/commit/ad4881cb3c04048242f69dc77af2dde889c9beea
* fix(vim.json): properly treat luanil options as booleans (#28622)zeertzjq2024-05-03
| | | Note: Upstream doesn't have this. It's an Nvim addition.
* perf(extmarks): better track whether namespace has extmarks (#28615)zeertzjq2024-05-03
| | | | | | This avoids redraw when adding/removing an empty namespace for a window. This also avoids marktree traversal when clearing a namespace that has already been cleared, which is added as a benchmark.
* fix(api): use correct buffer for "range" in nvim__redraw (#28614)luukvbaal2024-05-03
|
* feat(api): add nvim__redraw for more granular redrawingLuuk van Baal2024-05-02
| | | | | | | | | | | Experimental and subject to future changes. Add a way to redraw certain elements that are not redrawn while Nvim is waiting for input, or currently have no API to do so. This API covers all that can be done with the :redraw* commands, in addition to the following new features: - Immediately move the cursor to a (non-current) window. - Target a specific window or buffer to mark for redraw. - Mark a buffer range for redraw (replaces nvim__buf_redraw_range()). - Redraw the 'statuscolumn'.
* refactor: add win_T argument to setcursor_mayforce()Luuk van Baal2024-05-02
|
* vim-patch:9.1.0388: cursor() and getregion() don't handle v:maxcol well (#28602)zeertzjq2024-05-02
| | | | | | | | | Problem: cursor() and getregion() don't handle v:maxcol well. Solution: Add special handling for v:maxcol like setpos() does. (zeertzjq) closes: vim/vim#14698 https://github.com/vim/vim/commit/2ffdae79487cb7e323383eda9ae96c2e9d1625bd
* fix(colorscheme): add missing LSP groupsEvgeni Chasnovski2024-05-02
|
* fix(ui): avoid recursiveness and invalid memory access #28578luukvbaal2024-05-01
| | | | | | | | Problem: Calling :redraw from vim.ui_attach() callback results in recursive cmdline/message events. Solution: Avoid recursiveness where possible and replace global "call_buf" with separate, temporary buffers for each event so that when a Lua callback for one event fires another event, that does not result in invalid memory access.
* revert: "feat(extmarks): subpriorities (relative to declaration order) ↵Gregory Anders2024-05-01
| | | | | | | | | | | | (#27131)" (#28585) This reverts commit 15e77a56b711102fdc123e15b3f37d49bc0b1df1. Subpriorities were added in https://github.com/neovim/neovim/pull/27131 as a mechanism for enforcing query order when using iter_matches in the Tree-sitter highlighter. However, iter_matches proved to have too many complications to use in the highlighter so we eventually reverted back to using iter_captures (https://github.com/neovim/neovim/pull/27901). Thus, subpriorities are no longer needed and can be removed.
* docs(api): sort unreleased nvim__ functions last #28580Justin M. Keyes2024-04-30
|
* fix(api): mark nvim__complete_set as experimental #28579Justin M. Keyes2024-04-30
| | | | | | | | Problem: nvim_complete_set was added in 5ed55ff14c8b7e346811cb6228bf63fb5106bae9 but needs more bake time. Solution: Rename it, mark it as experimental.
* docs: misc #24163Justin M. Keyes2024-04-30
| | | | | | | | | | - Also delete old perl scripts which are not used since 8+ years ago. fix #23251 fix #27367 ref https://github.com/neovim/neovim/issues/2252#issuecomment-1902662577 Helped-by: Daniel Kongsgaard <dakongsgaard@gmail.com> Co-authored-by: Kevin Pham <keevan.pham@gmail.com>
* docs: various fixes (#28208)dundargoc2024-04-30
| | | | | | | | | | Co-authored-by: Evgeni Chasnovski <evgeni.chasnovski@gmail.com> Co-authored-by: Famiu Haque <famiuhaque@proton.me> Co-authored-by: Gregory Anders <greg@gpanders.com> Co-authored-by: Guilherme Soares <guilhermesoares1970@gmail.com> Co-authored-by: Jannik Buhr <jannik.m.buhr@gmail.com> Co-authored-by: thomaswuhoileong <72001875+thomaswuhoileong@users.noreply.github.com> Co-authored-by: tom-anders <13141438+tom-anders@users.noreply.github.com> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
* vim-patch:9.1.0381: cbuffer and similar commands don't accept a range (#28571)zeertzjq2024-04-30
| | | | | | | | | | | | | Problem: cbuffer and similar quickfix and locationlist commands don't accept a range, even so it is documented they should (ilan-schemoul, after 8.1.1241) Solution: Define ex commands with ADDR_LINES instead of ADDR_OTHER fixes: vim/vim#14638 closes: vim/vim#14657 https://github.com/vim/vim/commit/652c821366691a8bd5474766581090df0c742fa1 Co-authored-by: Christian Brabandt <cb@256bit.org>
* fix(treesitter): make tests for memoize more robustbfredl2024-04-29
| | | | | | | | | | | | Instead of painfully messing with timing to determine if queries were reparsed, we can simply keep a counter next to the call to ts_query_new Also memoization had a hidden dependency on the garbage collection of the the key, a hash value which never is kept around in memory. this was done intentionally as the hash does not capture all relevant state for the query (external included files) even if actual query objects still would be reachable in memory. To make the test fully deterministic in CI, we explicitly control GC.
* perf(ui_client): skip some initialization not necessary for ui clientbfredl2024-04-29
| | | | | In particular, TUI manages its own screen buffers and highlight table, so we don't need to run init_highlight() and default_grid_alloc() in the ui client process.
* fix(ui): activating all ext capabilities without remote UI #28555luukvbaal2024-04-28
|
* vim-patch:9.1.0380: Calculating line height for unnecessary amount of lines ↵luukvbaal2024-04-29
| | | | | | | | | | | (#28553) Problem: Calculating line height for unnecessary amount of lines with half-page scrolling (zhscn, after 9.1.0280) Solution: Replace "limit_winheight" argument with higher resolution "max" argument to which to limit the calculated line height in plines_m_win() to (Luuk van Baal) https://github.com/vim/vim/commit/32d701f51b1ed2834071a2c5031a300936beda13
* feat(defaults): improve :grep defaults #28545Luna Saphie Mittelbach2024-04-28
| | | | | | Based on feedback from #28324, pass -H and -I to regular grep (available on all platforms officially supported by Neovim), and only pass -uu to ripgrep. This makes :grep ignore binary files by default in both cases.
* Merge pull request #28532 from bfredl/regularizationbfredl2024-04-28
|\ | | | | refactor(build): make all generated c files headers
| * refactor(build): make all generated c files headersbfredl2024-04-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's no "rule" or bad practice or whatever that says we cannot generate c files. it is is just that we have ~20 generated headers and ~2 generated sources and there is nothing in these two generated source files which sets them aparts. Lua bindings are not different from rpc bindings, and pathdef is not different from versiondef. So to simplify build logic and ease the future port to build.zig, streamline the build to only have generated headers, no direct generated .c files. Also "nlua_add_api_functions" had its prototype duplicated twice which defeated the point of having mandatory prototypes (one source of truth).
* | Merge #28522 handle ui_attach side effectsJustin M. Keyes2024-04-27
|\ \ | |/ |/|
| * fix(ui): set 'cmdheight' to zero for all open tabpagesLuuk van Baal2024-04-27
| | | | | | | | | | | | Problem: Enabling ext_messages claims to set 'cmdheight' to zero, but only does so for the current tabpage. Solution: Set stored 'cmdheight' value to zero for all tabpages.
| * fix(ui): update ext_ui widgets when attaching non-remote UILuuk van Baal2024-04-26
| | | | | | | | | | | | Problem: Updating internalized UI capabilities is postponed until a remote UI attaches. Solution: Always update active UI widgets in ui_refresh().
* | vim-patch:9.1.0374: wrong botline in BufEnter (#28530)zeertzjq2024-04-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: When :edit an existing buffer, line('w$') may return a wrong result. Solution: Reset w_valid in curwin_init() (Jaehwang Jung) `do_ecmd()` reinitializes the current window (`curwin_init()`) whose `w_valid` field may have `VALID_BOTLINE` set. Resetting `w_botline` without marking it as invalid makes subsequent `validate_botline()` calls a no-op, thus resulting in wrong `line('w$')` value. closes: vim/vim#14642 https://github.com/vim/vim/commit/eb80b8304efb6dfeaa8d01dd41fe281df4894240 Co-authored-by: Jaehwang Jung <tomtomjhj@gmail.com>
* | vim-patch:fe1e2b5e2d65zeertzjq2024-04-27
| | | | | | | | | | | | | | | | | | | | runtime(doc): clarify syntax vs matching mechanism fixes: vim/vim#14643 https://github.com/vim/vim/commit/fe1e2b5e2d65f05d820f17db935b15454a63be06 Co-authored-by: Christian Brabandt <cb@256bit.org>