This is a maintenance release, focusing on bugfixes.
BUG FIXES
- build: Fix exporting symbols on macOS Sonoma
- api: Handle NUL in nvim_err_write() and nvim_out_write()
- autocmd: Api functions accepting garbage after event name
- clang: Null pointer dereference in parse_msgpack
- clipboard: Don't pass --foreground to wl-copy
- exception: Remember whether message is multiline
- float: Update position of anchored windows first
- float: Fix some other crashes with :unhide or :all
- lua: Not using global value in vim.opt_global
- lua: Show error message when failing to set variable
- mouse: Click on 'statuscolumn' with 'rightleft'
- path: Accept special characters on Windows
- provider: Fix python3 provider cannot detect python3.12
- provider/pythonx: Import the correct module
- rpc: Fix race condition
- runtime: Add commentstring for D ftplugin
- statuscolumn: Update number hl for each screen line
- terminal: Check terminal size at end of screen update
- treesitter: Remove more double recursion
- ui: "resize -1" with cmdheight=0
- unhide: Close floating windows first
- unittests: Ignore __s128 and __u128 types in ffi
- tutor: Clarify the meaning of ✗ and ✓
BUILD SYSTEM!
- deps: Bump libmpack-lua to 1.0.11
- ci: fix mac release for Sonoma
This is a maintenance release, focusing on bugfixes.
BUG FIXES
- build: Fix exporting symbols on macOS Sonoma
- api: Handle NUL in nvim_err_write() and nvim_out_write()
- autocmd: Api functions accepting garbage after event name
- clang: Null pointer dereference in parse_msgpack
- clipboard: Don't pass --foreground to wl-copy
- exception: Remember whether message is multiline
- float: Update position of anchored windows first
- float: Fix some other crashes with :unhide or :all
- lua: Not using global value in vim.opt_global
- lua: Show error message when failing to set variable
- mouse: Click on 'statuscolumn' with 'rightleft'
- path: Accept special characters on Windows
- provider: Fix python3 provider cannot detect python3.12
- provider/pythonx: Import the correct module
- rpc: Fix race condition
- runtime: Add commentstring for D ftplugin
- statuscolumn: Update number hl for each screen line
- terminal: Check terminal size at end of screen update
- treesitter: Remove more double recursion
- ui: "resize -1" with cmdheight=0
- unhide: Close floating windows first
- unittests: Ignore __s128 and __u128 types in ffi
- tutor: Clarify the meaning of ✗ and ✓
BUILD SYSTEM!
- deps: Bump libmpack-lua to 1.0.11
"VimEnter foo" was accepted as a valid event name for "VimEnter".
Events delimited with commas, eg. "VimEnter,BufRead", were also
accepted, even though only the first event was actually parsed.
(cherry picked from commit 1397016259)
Problem: Cursor is adjusted in window that did not change in size by
'splitkeep'.
Solution: Only check that cursor position is valid in a window that
has changed in size.
closes: vim/vim#1250916af913eee
Co-authored-by: Luuk van Baal <luukvbaal@gmail.com>
Problem: Cursor not adjusted when near top or bottom of window and
'splitkeep' is not "cursor".
Solution: Move boundary checks to outer cursor move functions, inner
functions should only return valid cursor positions. (Luuk van
Baal, closesvim/vim#12480)
a109f39ef5
Problem: Custom cmdline completion skips original cmdline when pressing
Ctrl-P at first match if completion function invokes glob().
Solution: Move orig_save into struct expand_T.
closes: vim/vim#1321628a23602e8
Problem:
Crash from:
set cmdheight=0 redrawdebug=invalid
resize -1
Solution:
Do not invalidate first `p_ch` `msg_grid` rows in `update_screen` when
scrolling the screen down after displaying a message, because they may
be used later for drawing cmdline.
Fixes#22154
Linux added these types to their userspace headers in [6.5], which
causes unit tests to fail like
```
-------- Running tests from test/unit/api/private_helpers_spec.lua
RUN vim_to_object converts true: 17.00 ms ERR
test/unit/helpers.lua:748: test/unit/helpers.lua:732: (string) '
test/unit/helpers.lua:264: ';' expected near '__s128' at line 194'
exit code: 256
stack traceback:
test/unit/helpers.lua:748: in function 'itp_parent'
test/unit/helpers.lua:784: in function <test/unit/helpers.lua:774>
```
Since we don't use these types, they can be ignored to avoid LuaJIT's C
parser choking on them.
[6.5]: 224d80c584
(cherry picked from commit 0df0e1198b)
Problem: Rename completion specific findex var
Solution: Move "findex" static variable to xp_selected in expand_T
closes: vim/vim#12548e9ef347c13
(cherry picked from commit 69aac643c4)
Problem: CursorHoldI event interferes with "CTRL-G U". (Naohiro Ono)
Solution: Restore the flag for "CTRL-G U" after triggering CursorHoldI.
(closesvim/vim#8937)
5a9357d0bf
Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit a5445f5435)
Problem: No commentstring is set for D buffers after removing the
default C-style commentstring
Same solution than neovim#23039
(cherry picked from commit 222196824f)
PROBLEM: The builtin python3 provider cannot auto-detect python3.12
when g:python3_host_prog is not set. As a result, when python3 on $PATH
is currently python 3.12, neovim will fail to load python3 provider
and result in `has("python3") == 0`, e.g.,
"Failed to load python3 host. You can try to see what happened by ..."
ROOT CAUSE: the `system()` call from `provider#pythonx#DetectByModule`
does not ignore python warnings, and `pkgutil.get_loader` will print
a warning message in the very first line:
```
<string>:1: DeprecationWarning: 'pkgutil.get_loader' is deprecated and
slated for removal in Python 3.14; use importlib.util.find_spec() instead
```
SOLUTION:
- Use `importlib.util.find_spec` instead (python >= 3.4)
- Use `-W ignore` option to prevent any potential warning messages
(cherry picked from commit 3da511f1d0)
Problem: :unhide does not check for failing to close a window.
Solution: When closing a window fails continue with the next one. Do not
try closing the autocmd window. (closesvim/vim#9984)
6f2465d336
Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit 6c4ef7eca6)
Problem: r_CTRL-C works differently in visual mode
Solution: Make r_CTRL-C behave consistent in visual mode
in terminal and Windows GUI
in visual mode, r CTRL-C behaves strange in Unix like environments. It
seems to end visual mode, but still is waiting for few more chars,
however it never seems to replace it by any characters and eventually
just returns back into normal mode.
In contrast in Windows GUI mode, r_CTRL-C replaces in the selected area
all characters by a literal CTRL-C.
Not sure why it behaves like this. It seems in the Windows GUI, got_int
is not set and therefore behaves as if any other normal character has
been pressed.
So remove the special casing of what happens when got_int is set and
make it always behave like in Windows GUI mode. Add a test to verify it
always behaves like replacing in the selected area each selected
character by a literal CTRL-C.
closes: vim/vim#13091closes: vim/vim#13112476733f3d0
Co-authored-by: Christian Brabandt <cb@256bit.org>
(cherry picked from commit d2678c78dc)
fix: invoke changed_bytes when rewriting tabs
When tabstop and shiftwidth are not equal, tabs are inserted as individual
spaces and then rewritten as tab characters in a second pass. That second pass
did not call changed_bytes which resulted in events being omitted.
Fixes#25092
(cherry picked from commit 7476715765)
Co-authored-by: Ilia Choly <ilia.choly@gmail.com>
`LanguageTree:parse` is recursive, and calls
`LanguageTree:for_each_child`, which is also recursive.
That means that, starting from the third level (child of child of root),
nodes will be parsed twice.
Which then means that if the tree is N layers deep, there will be ~2^N
parses even if the branching factor is 1.
Fixes: #25104
This is a maintenance release, focused on bug fixes and improvements.
However, There are included features related to TUI and :terminal.
BRAM
Nvim is a fork of the Vim editor, created and developed by Bram Moolenaar.
On August 3, 2023, he passed away at the age of 62. If Vim or Nvim have
been of use to you in your life, read `:help Bram` and `:help Uganda`
and consider honoring his memory in a way you see fit.
CHANGES SINCE 0.9.1
BREAKING CHANGES
An adjustment was made to the `grid_line` event as part of the exernal
UI protocol the `cells` array might now end with a `[' ', attr, 0]` item
with a repeat count of zero. This is needed by the TUI to disambiguate
final spaces on a line from just clearing the line, which will make a
difference when copying text using the terminal emulators builtin
primary selection support.
External UI:s can safely ignore such an empty item and most UIs already
handle this fine. But it could break some UI:s which has an assert to
validate the cell count to be bigger than zero, or similar checks.
FEATURES
- tui: Support Super and Meta modifiers
- terminal: forward more special keys and modifier-mouse combinations
BUG FIXES
- lua: Always set arg0 to lua scripts
- api: Redundant error when using `nvim_cmd`
- api, lua: Make blank lines in a message work properly
- column: fix bugs related to signs in 'statuscol'
- completion: Don't add backslash in runtime completion
- diff: Filler lines for hunks bigger than linematch limit
- edit: Fix K_EVENT interfering with 'digraph'
- editorconfig: Better validation and error handling
- events: Don't expand non-file as file name
- events: Trigger VimResume on next UI request
- extmarks: Wrong display when changing text with virt_lines
- folds: Update folds in Insert mode with fdm=indent
- helptags: Make multibyte help tags work properly
- highlight: Make CurSearch work properly with 'winhl'
- inccommand: Fix saving of undo info
- keycodes: Recognize <t_xx> as a key
- lsp: Do not assume client capability exists in watchfiles check (#24558)
- mouse: Handle folded lines with virt_lines attached to line above
- remote: Make --remote-expr print to stdout
- remote: Restore previous --remote-expr output formatting
- spell: Splice extmarks on :spellrepall
- startup: Don't truncate when printing with -l
- startup: Run embedded Nvim with real path
- statusline: Redraw when Visual submode changes
- statusline: Fill for double-width char after moving items
- treesitter: updates to queries and injections
- treesitter: Fix TSNode:tree() double free
- ui: Propagate line wrapping state on grid_line events
- ui: Avoid ambiguity about chunk that clears part of line
PERFORMANCE
- extmarks: Avoid unnecessary marktree traversal with folds
- substitute: Don't reallocate new_start every time
BUILD SYSTEM
- deps: Bump libvterm to 0.3.3
- deps: Bump LuaJIT to HEAD - 03c31124c
- deps: Bump libuv to v1.46.0
- deps: Bump Luv to 1.45.0-0
- deps: Bump tree-sitter-c to v0.20.5
- deps: Bump tree-sitter-lua to v0.0.18
Problem: Undo is synced after character find.
Solution: Set no_u_sync when calling gotchars_nop().
closes: vim/vim#13022closes: vim/vim#13024dccc29c228
(cherry picked from commit 311386c09f)
Problem: use-after-free in do_ecmd
Solution: Verify oldwin pointer after reset_VIsual()
e1dc9a6275
N/A patches for version.c:
vim-patch:9.0.1841: style: trailing whitespace in ex_cmds.c
Co-authored-by: Christian Brabandt <cb@256bit.org>
(cherry picked from commit 2ffd8d98fa)
Unfortunately the gc=false objects can refer to a dangling tree if the
gc=true tree was freed first. This reuses the same tree object as the
node itself is keeping alive via the uservalue of the node userdata.
(wrapped in a table due to lua 5.1 restrictions)
Problem: `push_tree`, every time its called for the same TSTree with
`do_copy=false` argument, creates a new userdata for it. Each userdata,
when garbage collected, frees the same TSTree C object.
Solution: Add flag to userdata, which indicates, should C object,
which userdata points to, be freed, when userdata is garbage collected.
Problem:
'endofline' can be used to detect if a file ends of <EOL>, however
editorconfig can break this.
Solution:
Set 'endofline' during BufWritePre
Fixes: #24869
(cherry picked from commit 84376afc72)
Problem: Visual highlight not working with cursor at end of screen line
and 'showbreak'.
Solution: Only update "vcol_prev" when drawing buffer text.
closes: vim/vim#128658fc6a1dae0
(cherry picked from commit 03e7d4fc85)
Problem: A double-width char in a floating window causes an extra
space to be drawn to the left of its boundary.
Solution: Only reset skipstart at the first column.
Fix#24775
(cherry picked from commit 6b283f6e01)
Problem: getcompletion() "cmdline" fails after :autocmd
Solution: Use set_cmd_context() instead of set_one_cmd_context().
closes: vim/vim#12804e4c79d3615
(cherry picked from commit 05927f8058)
Problem: getcompletion() failes for user-defined commands
Solution: set context for completion function
closes: vim/vim#12681closes: vim/vim#126808ef1fbc0c3
Co-authored-by: Christian Brabandt <cb@256bit.org>
(cherry picked from commit 5f546248f9)
Problem: wrong mapping applied when replaying a char search
Solution: Store a NOP after the ESC
closes: vim/vim#12708closes: vim/vim#6350bacc83009b
(cherry picked from commit c3d853cb89)
Problem: mapset() not properly handling script ID
Solution: replace_termcodes() may accept a script ID
closes: vim/vim#12699closes: vim/vim#126977e0bae024d
(cherry picked from commit 526d2d40f6)
When an injection has not set include children, make sure not to add
the injection if no ranges are determined.
This could happen when there is an injection with a child that has the
same range as itself. e.g. consider this Makefile snippet
```make
foo:
$(VAR)
```
Line 2 has an injection for bash and a make variable reference. If
include-children isn't set (default), then there is no range on line 2
to inject since the variable reference needs to be excluded.
This caused the language tree to return an empty range, which the parser
now interprets to mean the full buffer. This caused makefiles to have
completely broken highlighting.
Problem: Cannot break undo by setting 'undolevels' to itself in
'inccommand' preview callback.
Solution: Don't set an invalid 'undolevels' value.
Co-authored-by: Michael Henry <drmikehenry@drmikehenry.com>
(cherry picked from commit 7c5e7d831a)
Backports #24550.
Adjusts test to expect that didChangeWatchedFiles is *not* registered if
client `capabilities` is nil (as it's not enabled by default for v0.9).
Problem: 'inccommand' doesn't restore 'undolevels' properly for a
buffer shown in multiple windows.
Solution: Don't save information of a buffer twice.
Avoid consecutive RPC requests involving :startinsert or :stopinsert,
because consecutive RPC requests may be processed together, before the
:startinsert or :stopinsert takes effect.
Also change some feed_command() to command() to make tests faster.
Problem:
The cmdpreview saved undo nodes on cmdpreview_prepare() from ex_getln.c may
become invalid (free) if the preview function makes undo operations, causing
heap-use-after-free errors.
Solution:
Save the buffer undo list on cmdpreview_prepare)_ and start a new empty one. On
cmdpreview_restore_state(), undo all the entries in the new undo list and
restore the original one. With this approach, the preview function will be
allowed to undo only its own changes.
Fix#20036Fix#20248
Previously, when using foldmethod=indent, inserting an unindented line
would inadvertently open closed folds below it.
As a performance improvement, folds were only updated once, across all
lines, after Insert mode was exited.
Now, the performance improvement is no longer being used when
foldmethod=indent, so folds are updated multiple times during Insert
mode, but only across the lines that are changing, which preserves the
folds (and their open/close states) instead of recreating them.
Problem: screenpos() returns wrong row with diff filler lines.
Solution: Only add filler lines when appropriate. Also don't add the
'smoothscroll' marker when w_skipcol is zero. (closesvim/vim#12485,
closesvim/vim#12484)
55daae3921
Problem: screenpos() does not take w_skipcol into account.
Solution: Subtract w_skipcol from column. (closesvim/vim#12486, closesvim/vim#12476)
f0e68c0e2a
fix(ui): delay win_viewport until screen update #24182
Problem:
Sometimes, when nvim sends the `win_viewport` event, for example when scrolling
with visible folds on the screen, it reports the `scroll_delta` value one batch
into "future". So when the client application is trying to show the new viewport
it's not yet updated, resulting in temporary corruption / screen flickering.
For more details see #23609, and starting from [this comment](
https://github.com/neovide/neovide/pull/1790#issuecomment-1518697747) in
https://github.com/neovide/neovide/pull/1790,, where the issue was first
detected. Note that some of the conclusions in those are not fully accurate, but
the general observations are.
Solution:
When there are pending updates to a Window, delay the `win_viewport` UI event
until the updates are sent. This ensures that there's no flush between sending
the viewport and updating of the lines corresponding to the new viewport.
Document the existing viewport behaviour (for cases where there are no
extra flushes), give a hint about how applications can deal with the slightly
surprising behaviour of the viewport event being sent after the updates.
Fixes https://github.com/neovim/neovim/issues/23609
Problem: Cannot drag a vertical separator to the right of a window
whose 'statuscolumn' is wider than itself.
Solution: Never treat a click on a vertical separator as a click on
'statuscolumn'.
(cherry picked from commit c0007e6300)
Problem: Bashslashes added as regexp in runtime completion may be
treated as path separator with some 'isfname' value.
Solution: Make curly braces work for runtime completion and use it.
(cherry picked from commit 895cb173d2)
Problem: bundled `ftplugin/foo/*.vim` are sourced before user
`ftplugin/foo.vim`.
Solution: call `runtime!` once on all patterns to be sourced.
Followup to #23801. Fixes#24003.
(cherry picked from commit 502a7a0558)
fix(api): nvim_cmd{cmd="win_getid"} parsed as :winsize
Problem:
`:lua vim.cmd.win_getid(30,10)` is interpreted as `:win[size] 30 10`.
User intention was to call `vim.fn.win_getid(30,10)`.
Solution:
Check that the `cmd` actually matches the resolved command.
(cherry picked from commit 629f8d1e46)
Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
Redrawing of 'statusline' and 'winbar' are actually already inhibited by
RedawingDisabled in Ex mode.
In Vim there is a check for `msg_scrolled == 0` (which is false in Ex
mode) since Vim doesn't have msgsep. Add a `!exmode_active` check here
in Nvim instead.
(cherry picked from commit e056777a88)
fix(fs): make `normalize()` work with '/' path
Problem: Current implementation of "remove trailing /" doesn't
account for the case of literal '/' as path.
Solution: Remove trailing / only if it preceded by something else.
(cherry picked from commit 80ff66118a)
Co-authored-by: Evgeni Chasnovski <evgeni.chasnovski@gmail.com>
Problem: Expanding a pattern interferes with command line completion.
Solution: Set the file index only when appropriate. (closesvim/vim#12519)
094dd152fe
(cherry picked from commit a81b2b72c2)
fix(codelens): add buffer and line checks before displaying codelens
(cherry picked from commit 928dc33053)
Co-authored-by: Rohit Sukumaran <rohit.sukumaran@kredx.com>
`nvim_cmd` shows multiple errors when attempting to edit another buffer
through a command when `curbuf->b_ro_locked` is set. This PR fixes that
by removing a redundant error in `execute_cmd`.
(cherry picked from commit 3e6af30888)
This will ensure the cache isn't used when an image upgrade changes the
compiler version, causing the build to fail.
(cherry picked from commit dd6b6f185b)
Problem: Quickfix text field is truncated.
Solution: Fix output of text field after pattern field in quickfix buffer.
(Shane Harper, closesvim/vim#12498)
5bf042810b
Co-authored-by: Shane Harper <shane@shaneharper.net>
(cherry picked from commit 8fe24cc428)
It takes a significant amount of time to install neovim, and doubly so
on Windows, due to the sheer amount of files neovim ships with. On CI
this information may be important though, so we enable it if the
CI_ENABLE option is set to ON.
(cherry picked from commit 85baadd3d5)
Problem: Cursor ends up below the window after a put.
Solution: Mark w_crow and w_botline invalid when changing the cursor line.
(closesvim/vim#12465)
8509014add
Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit 7a0726caee)
ci(response): use pagination for timeline events
GitHub paginates responses with many results, which needs to be taken
into account as the number of events in an issue can be large.
(cherry picked from commit b5a8b6b16d)
Co-authored-by: dundargoc <gocdundar@gmail.com>
ci: replace stale bot with custom implementation
The stale action has a bug where it won't close an issue/PR if it has
comments after the stale label.
(cherry picked from commit 5a97c0b0b9)
Co-authored-by: dundargoc <gocdundar@gmail.com>
This will prevent situations where the linting works on CI but not
locally, at the cost of increased CI time.
Also manually ignore `runtime/vim/lua/re.lua`, as the .styluaignore
isn't respected when specifying a file instead of a directory.
Team reviewers is a nice feature that comes with a severe drawback: it
makes testing the workflows incredibly difficult as they won't work
without a similar token by the tester.
ci: use a set instead of array for team reviewers
Adding the same team multiple times will fails the review job.
(cherry picked from commit 4cb2b747c0)
Co-authored-by: dundargoc <gocdundar@gmail.com>
Having a workflow that creates a PR with the necessary changes on master
is redundant as this check is enforced for each PR anyway.
(cherry picked from commit c84e668242)
This is a maintenance release, consisting of bug fixes.
- checkhealth: Add shims for health functions (#23241)
- Add vim.lsp.buf.formatting_sync() to deprecated.txt
- treesitter: update parsers and queries
- api: Extmark highlight groups not always included in details
- api: Avoid assertion when autocmd group id is 0
- api: Don't change title when setting buffer in a window
- api: Nvim_get_hl should return default flag
- colorscheme: Try .lua files in 'rtp' before .vim files in 'pp'
- statuscolumn: fix issues when used with virt_lines and signs
- drawline: Make cursorlineopt=screenline work with resized grid
- eval: Prevent double-free in garbage collection
- extmarks: Don't show virt lines for end mark
- float: Make bufpos work properly with resized parent grid
- highlight: Add missing g: prefix for colors_name
- highlight: Combine ColorColumn with low-priority CursorLine
- highlight: Apply 'winblend' to NormalNC
- lua: Inspect_pos respect bufnr when get syntax info
- lua: Vim.split may trim inner empty items
- man.lua: Don't continue on command error
- man.lua: Return support of all sections
- mark: Properly init mark views
- messages: Ensure msg_grid is at top at more prompt
- mkspell: Prevent Unicode character overflow
- mouse: Cmdline click registered as statuscolumn
- mouse: Fix popup menu position check with winbar
- normal: Make "g$" work properly with resized grid
- pum: Show right-click menu above cmdline area
- pum: Position properly with multigrid and floats
- pum: Fix issues with with 'rightleft'
- redo: Make redo of Lua mappings in op-pending mode work
- redraw: Multibyte characters are wrapped at the end of a line
- redraw: Overwrite double-width char with virt_text properly
- ruler: Show ruler of curwin with no statusline in cmdline
- spell: Extmark with spell=false should disable spell
- statusline: Also allow right click when 'mousemodel' is "popup*"
- substitute: Properly check if preview is needed
- termdebug: Handle partial lines passed to callback
- tui: Position cursor at bottom-left before stopping
- tui: Redraw on SIGWINCH even if size didn't change
- tui: Grid_clear properly clears the screen
- tui: Fix title restore with title stack or altscreen
- ui: Send title to newly-attached UI
- windows: Set stdout to binary mode for --api-info
- windows: Revert installation context to per-machine
- build: Include all dependency directories when generating headers
fix(ftplugin): source Lua files after Vimscript files per directory
Problem: Lua ftplugins in runtime take precedence over Vimscript
ftplugins in user configs (even in `after/`).
Solution: Source ftplugins separately per directory, first Vimscript
then Lua.
(cherry picked from commit d2e4386991)
Co-authored-by: Christian Clason <c.clason@uni-graz.at>
Problem: :stopinsert may not work in a popup close handler. (Ben Jackson)
Solution: Restore stop_insert_mode when appropriate. (closesvim/vim#12452,
closesvim/vim#12434)
a40c0bcc83
(cherry picked from commit a9d6bc7082)
This ensures that colorschemes in 'rtp' are tried before ones in 'pp',
because some colorschemes in 'pp' may not work if not added to 'rtp'.
This also match the current documentation better.
(cherry picked from commit 237a6ed2ff)
Since title stack is now saved after entering alternate screen, it makes
more sense to restore title before exiting alternate screen.
(cherry picked from commit c5355072ae)
* fix(tui): don't set tty background if &bg was set before VimEnter
(cherry picked from commit 7d1b3c2b46)
* fix(tui): use nvim_get_option_info2 instead of &bg
(cherry picked from commit a60cfebdb9)
---------
Co-authored-by: Null Chilly <nullchilly@gmail.com>
Problem: --api-info output is binary. Not setting the mode may cause
the OS to impose unexpected eof. For Windows, it scatters extra '0d0a'
words in the output.
Solution: On Windows, set stdout to binary mode for --api-info.
Fixes#20977
(cherry picked from commit 4bfc7802f0)
Problem: Crash when using ":mkspell" with an empty .dic file.
Solution: Check for an empty word tree.
6669de1b23
Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit 7ddf235d7e)
Problem: Not enough characters accepted for 'spellfile'.
Solution: Add vim_is_fname_char() and use it for 'spellfile'.
bc49c5f48f
Cherry-pick related doc update from Vim runtime.
Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit 7e70a1e44b)
Problem: Multibyte characters may be wrapped at the end of a line
when 'statuscolumn' and 'spell' are set.
Solution: Update line pointerdiff "v" before fetching the line pointer
after evaluating 'statuscolumn'.
(cherry picked from commit 5fa5fff184)
fix(lsp): don't register didChangeWatchedFiles when capability not set
Some LSP servers (tailwindcss, rome) are known to request registration
for `workspace/didChangeWatchedFiles` even when the corresponding client
capability does not advertise support. This change adds an extra check
in the `client/registerCapability` handler not to start a watch unless
the client capability is set appropriately.
(cherry picked from commit 78510add5b)
Co-authored-by: Jon Huhn <huhnjon@gmail.com>
Problem: setcharsearch() does not clear last searched char properly.
Solution: Do not accept lastc_bytelen smaller than one. (closesvim/vim#12398)
e5d91ba1de
(cherry picked from commit 8a751ca360)
Problem: When setting a shell size smaller than the containing
terminal window through `:winsize` or `:set lines/columns`
the screen is not properly cleared.
Solution: Clear the tui dimensions rather than the grid dimensions.
(cherry picked from commit 197827321a)
fix(lsp): fix relative patterns for `workspace/didChangeWatchedFiles`
(cherry picked from commit 10f102a3a3)
Co-authored-by: Jon Huhn <huhnjon@gmail.com>
Current behaviour of `:Man` is to only work with "number" sections.
This is caused by wrong assumptions about man sections naming.
Also, there was similar assumption about length of section dirs
in `paths` variable.
fixes#23485
Signed-off-by: Vadim Misbakh-Soloviov <git@mva.name>
(cherry picked from commit 209ed16f57)
perf(lsp): load buffer contents once when processing semantic token responses
Using _get_line_byte_from_position() for each token's boundaries was a
pretty huge bottleneck, since that function would load individual buffer
lines via nvim_buf_get_lines() (plus a lot of extra overhead). So each
token caused two calls to nvim_buf_get_lines() (once for the start
position, and once for the end position).
For semantic tokens, we only attach to buffers that have already been
loaded, so we can safely just get all the lines for the entire buffer at
once, and lift the rest of the _get_line_byte_from_position()
implementation directly while bypassing the part that loads the buffer
line.
While I was looking at get_lines (used by _get_line_byte_from_position),
I noticed that we were checking for non-file URIs before we even looked
to see if we already had the buffer loaded. Moving the buffer-loaded
check to be the first thing done in get_lines() more than halved the
average time spent transforming the token list into highlight ranges vs
when it was still using _get_line_byte_from_position. I ended up
improving that loop more by not using get_lines, but figured the
performance improvement it provided was worth leaving in.
(cherry picked from commit dc38eafab5)
Co-authored-by: John Drouhard <john@drouhard.dev>
fix(treesitter): redraw added/removed injections properly
When injections are added or removed make sure to:
- invoke 'changedtree' callbacks for when new trees are added.
- invoke 'changedtree' callbacks for when trees are invalidated
- redraw regions when languagetree children are removed
(cherry picked from commit b68157834a)
Co-authored-by: Lewis Russell <lewis6991@gmail.com>
In the `test_rpc_server` procedure, both `on_setup` and `on_init`
callbacks can run concurrently in some scenarios. This caused some CI
failures in tests for the LSP set_defaults feature.
This commit attempts to fix this by merging those two callbacks in the
impacted tests.
See: https://github.com/neovim/neovim/actions/runs/4553550710/attempts/1
(cherry picked from commit c2f5159987)
fix(treesitter): do not calc folds on unloaded buffers
Fixes#23423
(cherry picked from commit 2e08228a16)
Co-authored-by: Lewis Russell <lewis6991@gmail.com>
Problem: Popup menu position wrong in window with toolbar.
Solution: Take the window toolbar into account when positioning the popup
menu. (closesvim/vim#12308)
4e1ca0d9a6
Fixed in the previous commit. Test only.
(cherry picked from commit aca226d728)
Problem: Lines put in non-current window are not displayed. (Marius
Gedminas)
Solution: Don't increment the topline when inserting just above it.
(closesvim/vim#12212)
e7f05a8780
Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit 60f21d96c6)
docs(lsp): remove vim.lsp.sync
The module is used internally and not intended to be used by plugins or
users.
(cherry picked from commit 02d5a678fb)
Co-authored-by: Mathias Fussenegger <f.mathias@zignar.net>
perf(lsp): process semantic tokens response in a coroutine that yields every 5ms
(cherry picked from commit 46cd1d957c)
Co-authored-by: John Drouhard <john@drouhard.dev>
Problem: Crash when recovering from corrupted swap file.
Solution: Bail out when the line index looks wrong. (closesvim/vim#12276)
bf1b713202
Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit 21136d49dd)
Problem: The ModeChanged event may be triggered too often.
Solution: Only trigger ModeChanged when no operator is pending.
(closesvim/vim#12298)
73916bac5a
(cherry picked from commit e0d6703a6a)
Problem: The 'statusline'-format ui elements do not receive right
click events when "mousemodel" is "popup*"
Solution: Do not draw popupmenu and handle click event instead.
(cherry picked from commit 6b5b6e5e07)
Problem: 'statuscolumn' width may be reset after it has been drawn
when multiple windows contain the same buffer. This results
in an offset for the drawn cursor position.
Solution: Loop over all windows (twice) prior to drawing them to
reset the 'statuscolumn' width and validate the sign
column when necessary.
(cherry picked from commit 89f9921a9e)
This will add all interface include directories property from all
targets to main_lib. This may not be universally wanted, in which case
we can revisit/rework it.
Closes https://github.com/neovim/neovim/issues/23237.
(cherry picked from commit 096e91b988)
add screen:expect() calls after insert() to make sure the screen has
been drawn before we assert the state of the semantic tokens table
(cherry picked from commit e97b6536bb)
Problem:
`vim.split('a:::', ':', {trimempty=true})` trims inner empty items.
Regression from 9c49c10470
Solution:
Set `empty_start=false` when first non-empty item is found.
close#23212
(cherry picked from commit 622b1ae38a)
gsrc/nvim/ui_client.c: In function ‘ui_client_start_server’:
gsrc/nvim/ui_client.c:68:5: warning: ignoring return value of ‘dup’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
68 | dup(stderr_isatty ? STDERR_FILENO : STDOUT_FILENO);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(cherry picked from commit 4d654472e6)
In file included from /usr/include/string.h:535,
from gsrc/nvim/statusline.c:10:
In function ‘strcat’,
inlined from ‘build_stl_str_hl’ at gsrc/nvim/statusline.c:1688:9:
/usr/include/bits/string_fortified.h:130:10: warning: ‘p’ may be used uninitialized [-Wmaybe-uninitialized]
130 | return __builtin___strcat_chk (__dest, __src, __glibc_objsize (__dest));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(cherry picked from commit 54f5602038)
gsrc/nvim/linematch.c: In function ‘try_possible_paths’:
gsrc/nvim/linematch.c:204:35: warning: ‘from_vals’ may be used uninitialized [-Wmaybe-uninitialized]
204 | size_t unwrapped_idx_from = unwrap_indexes(from_vals, diff_len, ndiffs);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(cherry picked from commit f5530bf566)
In function ‘cmdpreview_open_win’,
inlined from ‘cmdpreview_may_show’ at gsrc/nvim/ex_getln.c:2487:28:
gsrc/nvim/ex_getln.c:2251:16: warning: ‘cmdpreview_buf’ may be used uninitialized [-Wmaybe-uninitialized]
2251 | int result = do_buffer(DOBUF_GOTO, DOBUF_FIRST, FORWARD, cmdpreview_buf->handle, 0);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(cherry picked from commit a114a21eff)
In file included from /usr/include/string.h:535,
from gsrc/nvim/eval/userfunc.c:11:
In function ‘strcpy’,
inlined from ‘cat_func_name’ at gsrc/nvim/eval/userfunc.c:662:5,
inlined from ‘get_user_func_name’ at gsrc/nvim/eval/userfunc.c:2854:5:
/usr/include/bits/string_fortified.h:79:10: warning: ‘__builtin___strcpy_chk’ offset 0 from the object at ‘<unknown>’ is out of the bounds of referenced subobject ‘uf_name’ with ty
pe ‘char[]’ at offset 0 [-Warray-bounds=]
79 | return __builtin___strcpy_chk (__dest, __src, __glibc_objsize (__dest));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from gsrc/nvim/eval/typval.h:10,
from gsrc/nvim/buffer_defs.h:20,
from gsrc/nvim/autocmd.h:8,
from gsrc/nvim/eval/userfunc.c:15:
gsrc/nvim/eval/typval_defs.h: In function ‘get_user_func_name’:
gsrc/nvim/eval/typval_defs.h:342:8: note: subobject ‘uf_name’ declared here
342 | char uf_name[]; ///< Name of function (actual size equals name);
| ^~~~~~~
(cherry picked from commit 9802de9334)
src/nvim/drawline.c: In function ‘win_line’:
src/nvim/drawline.c:1418:16: warning: ‘charsize’ may be used uninitialized [-Wmaybe-uninitialized]
1418 | wlv.vcol -= charsize;
| ^~
(cherry picked from commit 2819718873)
src/nvim/drawline.c: In function ‘draw_virt_text’:
src/nvim/drawline.c:298:28: warning: ‘col’ may be used uninitialized [-Wmaybe-uninitialized]
298 | state->eol_col = col + 1;
| ~~~~^~~
(cherry picked from commit e9280a68f7)
gsrc/nvim/api/vim.c: In function ‘nvim_eval_statusline’:
gsrc/nvim/api/vim.c:2268:55: warning: ‘%d’ directive output may be truncated writing between 1 and 10 bytes into a region of size 2 [-Wformat-tru
ncation=]
2268 | snprintf(user_group, sizeof(user_group), "User%d", sp->userhl);
| ^~
gsrc/nvim/api/vim.c:2268:50: note: directive argument in the range [1, 2147483647]
2268 | snprintf(user_group, sizeof(user_group), "User%d", sp->userhl);
| ^~~~~~~~
In file included from /usr/include/stdio.h:906,
from gsrc/nvim/api/vim.c:9:
In function ‘snprintf’,
inlined from ‘nvim_eval_statusline’ at gsrc/nvim/api/vim.c:2268:9:
/usr/include/bits/stdio2.h:54:10: note: ‘__builtin___snprintf_chk’ output between 6 and 15 bytes into a destination of size 6
54 | return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 | __glibc_objsize (__s), __fmt,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56 | __va_arg_pack ());
| ~~~~~~~~~~~~~~~~~
(cherry picked from commit ef7ae66eef)
fix(treesitter playground): wrong range of a node displayed in playground
The call parameters order of the function `get_range_str` is flipped for the last two arguments compared to the declaration.
(cherry picked from commit 8613ba118c)
Co-authored-by: William <50717946+BIKA-C@users.noreply.github.com>
fix(runtime): do not allow breakcheck inside runtime path calculation
problem: breakcheck might run arbitrary lua code, which might require
modules and thus invoke runtime path calculation recursively.
solution: Block the use of breakcheck when expanding glob patterns
inside 'runtimepath'
fixes#23012
(cherry picked from commit aee6f08ce1)
Co-authored-by: bfredl <bjorn.linse@gmail.com>
fix(loader): only keep hashes for the current loop iteration
(cherry picked from commit e12cfa567f)
Co-authored-by: Lewis Russell <lewis6991@gmail.com>
Problem: After neovim/neovim@846a056, only the ruler for current floating or
last window without a statusline is drawn in the cmdline. This means that if the
current window is not one of these, but has no statusline, its ruler will not be
drawn anymore.
Solution: Make `showmode()` draw the ruler of the current window or the last
window in the cmdline if it has no statusline. This also maintains the
previously restored floating window case (`float->w_status_height` should be 0).
This behaviour should again match Vim, but without the overdraw it seems to do
to achieve the same effect; it calls `showmode()` to draw the ruler for the last
window without a statusline, then may draw over it in `showruler()` (which is
now `show_cursor_info_later()` in Nvim) to show the ruler for the current
window..? It's very confusing.
Also update the logic in `win_redr_ruler()` to mirror the check done in
`showmode()`, so that the ruler doesn't potentially draw over the long
ins-completion mode message in some cases.
(cherry picked from commit 65dd3c1180)
Problem: Ruler not drawn correctly when using 'rulerformat'.
Solution: Adjust formatting depending on whether the ruler is drawn in the
statusline or the command line. (Sean Dewar, closesvim/vim#12246)
fc8a601c32
This issue was made apparent after neovim/neovim@0f1e2b6, as `showmode()` calls
`win_redr_ruler()` with `curwin` now if it's floating, rather than the last
window if there's no statusline (which usually already shares its right side
with that of the editor).
Co-authored-by: Sean Dewar <seandewar@users.noreply.github.com>
(cherry picked from commit 7095f8ff9d)
Problem: Insufficient testing for getcmdcompltype().
Solution: Add a few more test cases. (closesvim/vim#12268)
961b2e54bd
(cherry picked from commit 56472e5262)
Problem: find_file_in_path() is not reentrant.
Solution: Instead of global variables pass pointers to the functions.
(closesvim/vim#12093)
5145c9a829
Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit 7b8daa25cd)
Problem: `w_scwidth` may be outdated in `nvim_eval_status()`, causing
`build_stl_str_hl()` to return an empty `%s` sign segment.
Solution: Update `w_scwidth` for `'statuscolumn'` evaluation.
(cherry picked from commit d3ea9a04bc)
Problem: Unnecessary redrawing when 'showcmdloc' is not "last".
Solution: Redraw later when "showcmd_is_clear" is set. (Luuk van Baal,
closesvim/vim#12260)
aa7f25ebf1
(cherry picked from commit 086088ce44)
fix(api): make nvim_get_hl not return non-existing groups
fixes#23063
(cherry picked from commit d05d63a18f)
Co-authored-by: bfredl <bjorn.linse@gmail.com>
Problem: Crash when passing NULL to setcmdline(). (Andreas Louv)
Solution: Use tv_get_string() instead of using v_string directly.
(closesvim/vim#12231, closesvim/vim#12227)
ac6cd31afc
(cherry picked from commit 60549b1352)
Problem: Estimated 'statuscolumn' width estimated is not properly used,
executing the `w_redr_statuscol` path unnecessarily.
Solution: Adjust `w_nrwidth` and 'statuscolumn' width before anything
is actually drawn in a `win_update()`.
(cherry picked from commit 309eeb4109)
fix(runtime): add commentstring for C# ftplugin
Problem: No commentstring is set for C# buffers after removing the
default C-style commentstring
Solution: Add `ftplugin/cs.lua` with C-style commentstring
(cherry picked from commit 15c3f2da30)
Co-authored-by: Christian Clason <c.clason@uni-graz.at>
fix(treesitter): use the correct replacement args for #gsub! directive
(cherry picked from commit 07db1f7432)
Co-authored-by: scottming <therealscottming@gmail.com>
Problem: The 'statuscolumn' is not drawn and the line itself is drawn
at an offset to the rest of the buffer after virt_lines if
'cpoptions' includes "n".
Solution: Make sure 'statuscolumn' is drawn.
(cherry picked from commit 118c1e7685)
Problem: Ending Insert mode when accessing a hidden prompt buffer.
Solution: Don't stop Insert mode when it was active before. (closesvim/vim#12237)
05a627c3d4
Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit 7a64eecff4)
Problem:
Job callbacks in termdebug cannot handle partial lines.
Solution:
Add a wrapper function that handles partial lines and only passes full
lines to the real callback.
Fix#22929.
(cherry picked from commit f5601737ee)
This catches downstream consumers of neovim off-guard when trying to use
neovim in an esoteric environment not tested in our own CI.
Closes https://github.com/neovim/neovim/issues/22932
(cherry picked from commit 0256b67e89)
Returns the range table for the difference between prev and curr lines
Parameters: ~
• {prev_lines} (table) list of lines
• {curr_lines} (table) list of lines
• {firstline} (integer) line to begin search for first difference
• {lastline} (integer) line to begin search in old_lines for
last difference
• {new_lastline} (integer) line to begin search in new_lines for
last difference
• {offset_encoding} (string) encoding requested by language server
Return: ~
(table) TextDocumentContentChangeEvent see https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocumentContentChangeEvent
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.