Commit Graph

9442 Commits

Author SHA1 Message Date
zeertzjq
69bddc089f fix(tui): don't call tinput_init() twice (#36386) 2025-10-30 03:06:30 +00:00
zeertzjq
c75f547839 vim-patch:9.1.1888: Wrong display with cpo+=$, matchparen and wrapped line (#36385)
Problem:  Wrong display with cpo+=$, matchparen and wrapped line.
Solution: Use old cursor line height when scrolling with cpo+=$. Also
          fix wrong redraw in non-current window. (zeertzjq)

fixes: vim/vim#18647
closes: vim/vim#18662

5c3e762631
2025-10-30 07:29:21 +08:00
bfredl
4b678a499c refactor(termkey): make termkey use internal terminfo properly
problem: termkey/driver-ti.c had its internal dependency upon unibilium
which would completely skip builtin terminfo defs.
solution: add termkey info to TerminfoEntry struct

NOTE: this disables a lot of named function keys which are present as
terminfo "keys" both are mostly unset in terminfo entries for modern
terminals, and also  not recognized by nvim as mappable keys
anyway, except a few ones like `<undo>` which this still will keep.

We probably don't want to encode up to F63 keys forever. While only 12
physical keys are available on modern keybords, instead Chords using
F-keys are usually encoded as high key numbers, like <C-S-F3>
becoming <F39> . But reconsideirg that has implications for configuration
that is best done as a separate (breaking) change.
2025-10-29 09:43:36 +01:00
zeertzjq
4ef7aa83c4 fix(terminal): keep last cursor if it's on the last row 2025-10-29 10:18:01 +08:00
zeertzjq
3fb56ff8af vim-patch:9.1.1885: Wrong restored cursor pos when re-entering buffer after changes
Problem:  Wrong restored cursor position when re-entering a buffer
          previously viewed in a window after making changes to the same
          buffer in another window.
Solution: Adjust per-window "last cursor" positions on buffer changes.
          (zeertzjq)

closes: vim/vim#18655

b2e6b328da
2025-10-29 10:18:01 +08:00
Jonny Kong
e2cb675705 fix(filetype): move fallback logic to vim.filetype.match() #30141
Problem:
Previously, the fallback logic to ".conf" was located outside of
`vim.filetype.match()` and directly within the AutoCmd definition. As a
result, `vim.filetype.match()` would return nil instead of ".conf" for
fallback cases (#30100).

Solution:
Added a boolean return value to `vim.filetype.match()` that indicates
whether the match was the result of fallback. If true, the filetype will
be set using `setf FALLBACK <ft>` instead of `setf <ft>`.
2025-10-28 18:45:50 -07:00
zeertzjq
3c14646896 vim-patch:9.1.1886: filetype: Android aconfig files are not recognized (#36374)
Problem:  filetype: Android aconfig files are not recognized
Solution: Detect *.aconfig files as pbtxt filetype (Bruno Belanyi)

Reference:
https://source.android.com/docs/setup/build/feature-flagging/declare-flag

closes: vim/vim#18656

7adeb09bb2

Co-authored-by: Bruno Belanyi <bruno@belanyi.fr>
2025-10-29 00:16:15 +00:00
zeertzjq
c2781d3db3 vim-patch:9.1.1883: Wrong display with 'smoothscroll' with -diff (#36372)
Problem:  Wrong display with 'smoothscroll' when FEAT_DIFF is disabled.
Solution: Use plines_correct_topline() (zeertzjq).

closes: vim/vim#18649

e06e70f7b1
2025-10-28 23:49:53 +00:00
zeertzjq
21ea0537e0 vim-patch:9.1.1880: Allocation error with complete_info() (#36360)
Problem:  Allocation error with complete_info()
          (after v9.1.1876)
Solution: Make sure length is positive (kuuote)

closes: vim/vim#18640

7d3b647f88

Co-authored-by: kuuote <znmxodq1@gmail.com>
2025-10-28 07:13:58 +08:00
Eduardo Cruz Guedes
5e039c8e97 fix(tutor): remove hyperlinks, simplify non-interactive examples #36307
1. Every hyperlink-like element was replaced by `"$1"` (where $1 is the original string showed in the hyperlink);
2. Arrows `--->` were used in lines containing practice examples when no editing text is involved;
3. Context on interactivity was minimally adapted when strictly needed, not to disrupt the original tutor's intent;
4. Tests regarding the tutor file refactored to ensure the new syntax is not flagged as an error.
2025-10-27 10:24:00 -07:00
yilisharcs
b9451dfd4c fix(ui2): emit FileType event after setting default pager options #36315
Problem: Setting a filetype before configuring default options for ui2
buffers (pager, cmd, ...) prevents users from setting their own options.

Solution: Call nvim_set_option_value after defaults are set.

Closes #36314

Co-authored-by: Luuk van Baal <luukvbaal@gmail.com>
2025-10-27 10:19:16 -07:00
tao
a768d0a95b fix(lsp): stop repeatedly resuming dead coroutine #35743
Problem:
Error extracting content-length causes all future coroutine resumes to
fail.

Solution:
Replace coroutine.wrap with coroutine.create in create_read_loop
so that we can check its status and catch any errors, allowing us to
stop the lsp client and avoid repeatedly resuming the dead coroutine.
2025-10-27 10:03:45 -07:00
zeertzjq
070f4d3da0 vim-patch:9.1.1875: username parsing bug in netrw plugin (#36348)
Problem:  username parsing bug in netrw plugin when using remote adding
          feature
Solution: Allow any characters except for "@" (Václav Kobera), add a
          test for the netrw plugin

closes: vim/vim#18611

f17f78c557

Co-authored-by: Václav Kobera <vasekobera@gmail.com>
2025-10-27 03:20:34 +00:00
zeertzjq
db35dd6734 test(ex_terminal_spec): fix flakiness (#36347) 2025-10-27 02:54:14 +00:00
zeertzjq
35d04394aa vim-patch:9.1.1878: filetype: Soy files are not recognized (#36346)
Problem:  filetype: Soy files are not recognized
Solution: Detect *.soy files as soy filetype,
          include a soy filetype plugin (Riley Bruins)

closes: vim/vim#18640

9fff99c3c2

Co-authored-by: Riley Bruins <ribru17@hotmail.com>
2025-10-27 02:52:56 +00:00
zeertzjq
155efabb15 vim-patch:9.1.1876: pre-inserted text not exposed in complete_info() (#36342)
Problem:  pre-inserted text not exposed in complete_info()
Solution: Add the pre-inserted text to the complete_info() Vim script
          function (Girish Palya)

closes: vim/vim#18571

Feat: expose preinserted text in complete_info()

ef5bf58d8c

Co-authored-by: Girish Palya <girishji@gmail.com>
2025-10-27 01:34:52 +00:00
zeertzjq
fb6fd17f26 vim-patch:9.1.1870: :Tutor may not work as expected (#36343)
Problem:  :Tutor may not work as expected
Solution: set buftype=nowrite instead of nofile
          (Phạm Bình An)

closes: vim/vim#18613

9978bb77c6

Co-authored-by: Phạm Bình An <phambinhanctb2004@gmail.com>
2025-10-27 01:21:52 +00:00
zeertzjq
f0cf488698 vim-patch:9.1.1877: cindent: wrong indentation after an array declaration (#36340)
Problem:  cindent: wrong indentation after an array declaration
Solution: check if the filetype if javascript before matching the syntax
          (Anttoni Erkkilä)

cindent matches a javascript syntax for C files causing wrong
indentation in the following case:
```
void foo() {
float a[5],
b;
}
```

closes: vim/vim#18631

61ef8a3db9

Co-authored-by: Anttoni Erkkilä <anttoni.erkkila@protonmail.com>
2025-10-27 00:06:25 +00:00
zeertzjq
d707ccf988 fix(api): inconsistent scrolling when deleting before topline (#36301)
Problem:  Inconsistent scrolling when deleting before topline with API.
Solution: Only special-case inserting just before topline, not deleting.
2025-10-27 07:53:15 +08:00
zeertzjq
2407833ba1 vim-patch:9.1.1872: Cmdline history not updated when mapping <Up> and <CR> (#36334)
Problem:  Cmdline history not updated when mapping both <Up> and <CR>.
Solution: Consider the command typed when in Cmdline mode and there is
          no pending input (zeertzjq).

Although the existing behavior technically does match documentation, the
"completely come from mappings" part is a bit ambiguous, because one may
argue that the command doesn't completely come from mappings as long as
the user has typed a key in Cmdline mode.  I'm not entirely sure if this
change will cause problems, but it seems unlikely.

fixes: vim/vim#2771
related: neovim/neovim#36256
closes: vim/vim#18607

97b6e8b424
2025-10-26 22:19:32 +08:00
Justin M. Keyes
07461bac27 Merge #34940 refactor(spell): migrate to Lua, drop netrw dep 2025-10-25 20:08:02 -04:00
Justin M. Keyes
4d501c93bb refactor(spell): cleanup
- prefer `stdpath(data)/site/spell` instead of looking for random dirs in 'runtimepath'.
- drop unused functions `choose_directory`, `setup`, etc.
2025-10-26 01:28:37 +02:00
Tom Ampuero
7c5ff99e8a refactor(spell): migrate to Lua, drop netrw dependency
Problem:
Spell file downloads relied on Vimscript and netrw (:Nread). If netrw is
disabled, downloads fail.

Solution:
Port the logic to Lua as `nvim.spellfile` and wire it via a Lua plugin that
handles `SpellFileMissing`. Use `vim.net.request()` with a timeout for HTTP,
prompt via `vim.fn.input` and report via `vim.notify`.

Closes #7189
2025-10-26 00:33:41 +02:00
zeertzjq
df23952ce9 fix(tui): don't treat remote TUI as GUI (#36319)
Set "stdin_tty" and "stdout_tty" UI options, so that a remote TUI is not
treated as a GUI.
2025-10-26 06:18:13 +08:00
zeertzjq
5db3544991 vim-patch:9.1.1871: Wrong 'showcmd' in the cmdwin (#36320)
Problem:  Wrong 'showcmd' in the command-line window.
Solution: Clear 'showcmd' when entering cmdwin (zeertzjq).

related: neovim/neovim#36271
closes: vim/vim#18616

826326f13b
2025-10-25 22:16:05 +08:00
Justin M. Keyes
fe4faaf81a docs: dev-quickstart, dev-test #36304 2025-10-24 17:24:51 -07:00
zeertzjq
737dd83d1f vim-patch:9.1.1869: tests: test failures with Python 3.14 and test_python3 (#36310)
Problem:  tests: test failures with Python 3.14 and test_python3
Solution: Adjust the expected error message (Yee Cheng Chin)

Python 3.14 changed the error message from "argument must be 2-item
sequence" to "argument must be 2-item tuple". Fix test to account for
that. Otherwise the error message for the `vim.current.window.cursor =
True` line would not match.

closes: vim/vim#18629

6cb995970e

Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
2025-10-25 08:02:41 +08:00
zeertzjq
520568f40f fix(terminal): adjust marks when deleting scrollback lines (#36294)
This also fixes inconsistent scrolling behavior on terminal output when
cursor is in the middle of the buffer and the scrollback is full.
2025-10-25 06:48:04 +08:00
luukvbaal
d909de2dc2 fix(ui): ignore textlock for vim.ui_attach() callbacks #36278
Problem:  vim.ui_attach() callbacks may run into E565 textlock errors.
Solution: Changing text in UI buffers must be safe; assume it is.
2025-10-24 14:40:21 -07:00
xvzc
095b9f98f3 fix(filetype): handle invalid bufnr in _getlines(), _getline() #36272
**Problem:**
`vim.filetype.match({ filename = 'a.sh' })` returns `nil` because
an invalid buffer ID is passed to `vim.api.nvim_buf_get_lines()`.
For filetypes like `csh`, `txt`, or any other extensions that call
`_getlines()` or `_getline()` to detect their filetypes, the same
issue occurs.

When only the `filename` argument is passed, an error is raised
inside a `pcall()` that wraps the filetype detection function,
causing it to return no value without showing any error message.

**Solution:**
Validate the `bufnr` value in `_getlines()` and `_getline()`.
2025-10-23 17:34:12 -07:00
Justin M. Keyes
7838c242e9 docs: types, news, lua-plugin
- mention "lua_ls", not "luals". https://github.com/neovim/neovim/discussions/36182

Co-authored-by: Maria Solano <majosolano99@gmail.com>
2025-10-24 02:07:37 +02:00
glepnir
07d0da64ed feat(ui): overlay scrollbar on 'pumborder' #36273
Problem: When pumborder is set, the scrollbar still occupies
a column on the screen, wasting a 1 column of space.

Solution: Render the scrollbar on the right/left (rl mode) side
of the border when pumborder is set.
2025-10-23 15:44:02 -07:00
Justin M. Keyes
4129fa5bac Merge #36299 improve PackChanged event 2025-10-23 18:29:24 -04:00
zeertzjq
67832710a5 fix(terminal): wrong row in TermRequest with full scrollback (#36298)
Problem:  Wrong row in TermRequest with full scrollback.
Solution: Subtract by the number of lines deleted from scrollback.
2025-10-24 06:01:13 +08:00
Evgeni Chasnovski
16a6559ec6 fix(pack)!: do not trigger PackChanged[Pre] kind=update during install
Problem: `PackChanged[Pre]` events with `kind=update` are triggered both
  during plugin's initial installation and after already installed
  plugin was updated.

  It was a deliberate decision to allow writing only a single update
  hook to act as a dedicated "build" entry point (like execute `make` or
  `cargo build —release`). This mimics how other plugin managers have a
  single "build" command.

  This was a result of 'mini.deps' experience with the different
  approach: "update" hooks are not run during install. This proved to be
  confusing as it requires to write two hooks. But also the reason might
  be that 'mini.deps' names it "checkout" hook instead of "update".

  However, the `vim.pack` event approach makes it lower cost to handle
  separate "update" and "install" events. Something like
  `if ev.data.kind == 'install' or ev.data.kind == 'update' then`
  instead of two autocommands.
  Plus this makes clearer separation of events.

Solution: do not trigger `PackChanged[Pre] kind=update` event during
  install.
2025-10-23 20:28:09 +03:00
Evgeni Chasnovski
a9db6ec6fa feat(pack): add active field to PackChanged event data
Problem: Inside `PackChanged[Pre]` callbacks it might be useful to tell
  if the affected plugin is active or not. It is already possible via
    extra `vim.pack.get({ 'plug-name' })[1].active`, but it is not quite
    user-friendly for something that might be needed frequently in real
    world use cases.

Solution: Supply extra `active` event data field.
2025-10-23 17:50:03 +03:00
Evgeni Chasnovski
c732133efe test(pack): refactor 'pack_spec.lua' with better code
Problem: 'pack_spec.lua' test file's code can be improved.

Solution: Refactor some aspects. In particular:
  - Rewrite `find_in_log` for finding event data in event log into a
    generator function that from log list returns a finder function.
    This allows it to take less arguments and be more concise.

  - Consistently use `local function f()` instead of
    `local f = function()`.

  - Prefer to use `fn.readblob()` instead of `fn.readfile()` to assert
    text from a file.

  - Use `([[...]]):format()` approach to testing file content (instead
    of array of strings). Should improve readability.

  - Universally prefer using "assert" to mean "check if certain
    expectation about the process holds up" (instead of occasional
    "validate").
2025-10-23 17:38:35 +03:00
zeertzjq
af0f7b59b1 fix(statusline): redraw if Visual selection other end changes (#36281) 2025-10-23 11:27:23 +08:00
luukvbaal
c94b7b93c0 fix(ui2): start treesitter after deleting cmdline buffer (#36274)
Problem:  Treesitter is not started in new cmdline buffer after deletion.
Solution: Start treesitter when highlighter buffer no longer matches.
2025-10-22 16:16:36 +02:00
Matthieu Coudron
e42050f4ae feat(vimscript): log function name in "fast" message #32616 2025-10-21 07:46:03 -07:00
Jan Edmund Lazo
2a28149efc vim-patch:9.1.0359: MS-Windows: relative import in a script sourced from a buffer doesn't work
Problem:  MS-Windows: Relative import in a script sourced from a buffer
          doesn't work (Ernie Rael)
Solution: Set a filename, so that we are not trying to use
          script-relative filename (Yegappan Lakshmanan)

When a script is sourced from a buffer, the file name is set to ":source
buffer=". In MS-Windows, the ":" is a path separator character (used
after a drive letter). This results in the code trying to use the ":"
prefix to import the script on MS-Windows. To fix this, when importing a
script from a script sourced from a buffer with nofile, don't use
a script relative path name.

fixes vim/vim#14588
closes: vim/vim#14603

f135fa28e4

Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
2025-10-20 22:21:09 -04:00
Jan Edmund Lazo
96a514ed46 vim-patch:9.0.0106: illegal byte regexp test doesn't fail when fix is reversed
Problem:    Illegal byte regexp test doesn't fail when fix is reversed.
Solution:   Make sure illegal bytes end up in sourced script file.

cb36c2a3cd

Co-authored-by: Bram Moolenaar <Bram@vim.org>
2025-10-20 22:21:09 -04:00
Jan Edmund Lazo
c5dbee7910 vim-patch:9.1.0918: tiny Vim crashes with fuzzy buffer completion
Problem:  tiny Vim crashes with fuzzy buffer completion
Solution: Adjust #ifdefs in ExpandBufnames() (826814741_6)

closes: vim/vim#16200

dff3c9c1a7

Co-authored-by: 826814741_6 <44406129+826814741-6@users.noreply.github.com>
2025-10-20 22:21:09 -04:00
Till Bungert
b67eff38fe fix(lsp): deduplicate completion items #36166
The current implementation has a race condition where items are appended
to the completion list twice when a second completion runs while the
first is still going. This hotfix just deduplicates the entire list.

Co-authored-by: Tomasz N <przepompownia@users.noreply.github.com>
2025-10-20 15:45:37 -07:00
glepnir
c80bb5b63e fix(pumborder): wrong layout with pumborder=none #36208
Problem:
Border width calculations were scattered with repeated
`*p_pumborder != NUL ? 2 : 0` patterns. The "none" value was not
consistently checked, causing borders to appear when pumborder="none".
When "shadow" the info floating window have an extra cell of spacing.

Solution:
Add `pum_border_width()` helper that returns 0 when pumborder is unset
or "none" (opt_winborder_values[7]), returns 1 when pumborder is shadow,
otherwise return 2.
2025-10-20 15:26:23 -07:00
zeertzjq
68a54bfda6 vim-patch:9.1.1868: v:register is wrong in v_: command (#36238)
Problem:  v:register is wrong in v_: command (after 9.1.1858).
Solution: Don't reset v:register for OP_COLON (zeertzjq)

related: https://github.com/vim/vim/pull/18583#issuecomment-3418030021

closes: vim/vim#18597

0124320c97

While at it, also fix using stale set_prevcount value. That only matters
when readbuf1 ends with an operator or a register, which never happens,
but it's still good to avoid using a stale value.
2025-10-18 15:14:20 +00:00
bfredl
e656d7be2e perf(tui): faster implementation of terminfo
The processing of terminfo can be separated into two steps:

1. The initialization of terminfo, which includes trying to find $TERM
   in a terminfo database file. As a fallback, common terminfo
   definitions are compiled in. After this, we apply a lot of ad-hoc
   patching to cover over limitations of terminfo.

2. While processing updates from nvim, actually using terminfo strings
   and formatting them with runtime values. for this part, terminfo
   essentially is a hyper-enhanced version of snprintf(), including
   a sm0l stack based virtual machine which can manipulate the runtime
   parameters.

This PR completely replaces libuniblium for step 2, with code
vendored from NetBSD's libtermkey which has been adapted to use typesafe
input parameters and to write into an output buffer in place.

The most immedatiate effects is a performance enhancement of
update_attrs() which is a very hot function when profiling the
TUI-process part of screen updates. In a stupid microbenchmark
(essentially calling nvim__screenshot over and over in a loop) this
leads to a speedup of ca 1.5x for redrawing the screen on the TUI-side.
What this means in practise when using nvim as a text editor is probably
no noticible effect at all, and when reabusing nvim as idk a full screen
RGB ASCII art rendrer maybe an increase from 72 to 75 FPS LMAO.

As nice side-effect, reduce the usage of unibilium to initialization only..
which will make it easier to remove, replace or make unibilium optional,
adressing #31989. Specifically, the builtin fallback doesn't use
unibilium at all, so a unibilium-free build is in principle possible
if the builtin definitions are good enough.

As a caveat, this PR doesn't touch libtermkey at all, which still has a
conditional dependency on unibilium. This will be investigated in a
follow-up PR

Note: the check of $TERMCOLOR was moved from tui/tui.c to
_defaults.lua in d7651b27d5 as we want to
skip the logic in _defaults.lua if the env var was set, but there
is no harm in TUI getting the right value when the TUI is trying to
initialize its terminfo shenanigans. Also this check is needed when
a TUI connects to a `--headless` server later, which will observe
a different $TERMCOLOR value than the nvim core process itself.
2025-10-18 11:36:16 +02:00
zeertzjq
a08aa77e40 vim-patch:9.1.1859: completion: whitespace not cleared with 'ai' (#36218)
Problem:  completion: whitespace not cleared with 'ai'
Solution: Remove spaces added by 'autoindent' when autocomplete is set
          and restore did_ai in ins_compl_start() (Maxim Kim)

fixes vim/vim#18560
closes: vim/vim#18582

6180d65751

Co-authored-by: Maxim Kim <habamax@gmail.com>
2025-10-17 02:51:49 +00:00
zeertzjq
aeeadddac4 vim-patch:9.1.1858: v:register not reset after Visual mode command (#36215)
Problem:  v:register not reset after Visual mode command.
          (laktak)
Solution: Reset v:register if Visual mode was active before
          do_pending_operator() (zeertzjq)

fixes: vim/vim#18579
related: vim/vim#5305
closes: vim/vim#18583

b3b47e540d
2025-10-17 08:36:27 +08:00
phanium
eaa9aca130 fix(jobs): jobstart(term=true) accepts width/height #33904
Problem: when create a hidden terminal job with `nvim_buf_call`+
`jobstart(…,{term=true})`, program like `lazygit` cannot figure out the
correct width and height.

Solution: `jobstart(…,{term=true})` accepts `width`/`height`
2025-10-14 21:42:02 -07:00