patch 9.2.0907: popup: virtual text is not redrawn when a text property changes
Problem: Adding or removing a text property in the buffer of a popup
window does not update the popup on the screen. The old
virtual text stays visible until something else causes a
redraw.
Solution: Also mark popup windows displaying the buffer for redrawing in
redraw_buf_later() (Hirohito Higashi).
fixes: #19297
closes: #20931
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Problem: transstr() appends with STRCAT()/STRLEN() from the start of
the result on every iteration, making it quadratic to the
length of the string.
Solution: Keep a tail pointer and append at it. (Samuel Schlesinger).
closes: #20925
Signed-off-by: Samuel Schlesinger <sgschlesinger@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Foxe Chen [Mon, 3 Aug 2026 20:13:17 +0000 (20:13 +0000)]
patch 9.2.0905: MS-Windows: ghost cursor with ligatures
Problem: With ligatures enabled, a ghost cursor can be left on screen
because the cursor is marked valid before the ligature
cleanup, which redraws the cell with gui_screenchar() and
invalidates the cursor again (ubaldot)
Solution: Set gui.cursor_is_valid only after the ligature redraw is
done, so it isn't cleared afterwards (Foxe Chen).
fixes: #20916
closes: #20924
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
zeertzjq [Mon, 3 Aug 2026 20:08:04 +0000 (20:08 +0000)]
patch 9.2.0904: "zb" scrolls incorrectly with cursor just above fold
Problem: "zb" scrolls incorrectly with cursor just above fold.
Solution: Handle boff.lnum being set to the last line of a fold
(zeertzjq).
With the cursor just above fold, botline_forw() moves boff.lnum to the
last line of the fold, but curwin->w_botline is at the first line of the
fold, so the boff.lnum == curwin->w_botline condition never holds.
Instead, check that boff.lnum has just moved to or past w_botline by
comparing its previous value with w_botline.
Also make a similar change to the loff.lnum check above for symmetry.
That one doesn't change behavior, as topline_back() sets loff.lnum to
the first line of a fold.
related: neovim/neovim#41122
closes: #20923
Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0903: Vim9: cannot use an exported function of an autoload import
Problem: Using an exported function of a script imported with "import
autoload" as a value gives E121, unless the script is under an
"autoload" directory.
Solution: When the name is not a script variable also look for an exported
function and push a funcref for it (Hirohito Hirohito).
fixes: #20911
closes: #20922
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0902: Vim9: iterating over a tuple leaks memory
Problem: Looping over a tuple with ":for" copies each item with
copy_tv() but never clears the copy, leaking the value on
every iteration (26MB over 100k iterations of a two-string
tuple). Container items keep an extra reference forever,
also defeating garbage collection.
Solution: Clear the copied typval on both return paths, like the
string branch of next_for_item() already does
(Samuel Schlesinger).
closes: #20914
Supported by AI.
Signed-off-by: Samuel Schlesinger <sgschlesinger@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
The 'smoothscroll' scroll position is kept when a window is squeezed since
patch 9.2.0885, and the Tab size in a line with virtual text above it is
correct since patch 9.2.0896.
closes: #20921
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0901: textprop: wrong cursor line with truncated virtual text
Problem: The cursor is displayed in the wrong line when virtual text below
an empty line is truncated.
Solution: Do not count an extra column for an empty line that has virtual
text below it, its width already includes filling up the line.
(Hirohito Higashi).
fixes: #12493
closes: #20917
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0900: FocusGained still triggered when closing dialog
Problem: FocusGained still triggered when closing dialog
(after v9.2.0851)
Solution: Track that dialog is active and suppress the FocusGained
autocommand (Christoffer Aasted)
related: #20780
closes: #20894
Signed-off-by: Christoffer Aasted <dezzadk@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Sam Roeca [Sun, 2 Aug 2026 18:41:16 +0000 (18:41 +0000)]
patch 9.2.0899: command output temporary files may collide
Problem: On MS-Windows, get_cmd_output() removes its reserved temporary
file before the shell opens it, allowing another Vim process to
reuse the same name.
Solution: Keep the temporary file reserved until command output handling is
complete (Sam Roeca).
closes: #20915
Signed-off-by: Sam Roeca <samuel.roeca@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Foxe Chen [Sun, 2 Aug 2026 18:27:01 +0000 (18:27 +0000)]
patch 9.2.0898: printing support is lacking
Problem: printing support is lacking
Solution: Improve printing support by making use of pango and cairo
libraries, use a graphical dialog for :hardcopy in the GTK4 ui
(Foxe Chen).
fixes: #8935
closes: #20648
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0896: scroll: 'smoothscroll' position is lost when splitting a window
Problem: With 'smoothscroll' the position in a long line is lost when a
window is split and closed again.
Solution: With 'splitkeep' "screen" keep the skipped columns, they are part
of keeping the same screen lines. Otherwise put the cursor in the
row that keeps its relative position, instead of the last row.
closes: #20912
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0896: textprop: wrong Tab size in a line with virtual text above it
Problem: In a line with virtual text above it a Tab does not have the right
size, depending on the width of the window.
Solution: Do not count the columns of the virtual text for the size of the
Tab, neither when drawing nor when computing the column.
fixes: #12232
closes: #20901
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0895: test: Test_aucmd_win_scroll_multibyte() is flaky in the GUI
Problem: The test comparing the top line before and after using the
autocommand window is flaky in the GUI.
Solution: Run the test in a window with a fixed size. In the GUI a
pending resize of the shell is applied at the end of a screen
update, thus the size may change between the two measurements.
related: #20884
closes: #20913
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Doug Kearns [Sat, 1 Aug 2026 13:57:32 +0000 (13:57 +0000)]
patch 9.2.0894: filetype: ed script files not recognised
Problem: filetype: ed script files not recognised.
Solution: Add filetype detection for *.ed files and shebang lines,
include syntax script and syntax tests.
Features of the ed syntax file:
- BSD and GNU extensions are supported
- Andrew L. Moore's ed extensions are not supported
- Rebuild synmenu.vim
closes: #19602
Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0893: MS-Windows: "*.vim" also matches files with a longer extension
Problem: On MS-Windows a pattern like "path/*.vim" also matches files such
as "foo.vim9", because the 8.3 short name "FOO~1.VIM" is used for
matching as well. These files are then sourced.
Solution: Only match against the short name when the pattern contains a '~'
(Hirohito Higashi).
closes: #20899
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime(doc): remove todo entry for test_codestyle errors
The two reported problems are gone: keycode_check.vim has no space before a
tab and setup.vim, now util/setup.vim, has no trailing white space. Since
patch 9.2.0195 the check is not part of the test suite but a separate
"make codestyle" target.
closes: #20900
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0892: highlight: wrong column highlighted with 'cursorcolumn'
Problem: With 'virtualedit' set to "all" and 'cursorcolumn' set, the wrong
column may be highlighted after a command that moved the cursor
into virtual space and back (van-de-bugger).
Solution: Make sure the virtual column is up to date before drawing the
window (Hirohito Higashi).
fixes: #2576
closes: #20902
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Problem: On MS-Windows using ":8" with ":t", ":e" or ":r" in one
fnamemodify() gives a wrong result or an out of memory error.
Solution: Recompute the tail after ":8" replaced the name
(Hirohito Higashi).
related: #20899
closes: #20903
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0890: test: test for patch v9.2.0888 can be clarified
Problem: test for patch v9.2.0888 can be clarified
(zeertzjq)
Solution: use <NL> instead of CTRL-J for a NL
The comment says "A NL", using <NL> makes the intent clearer.
related: #20898
closes: #20906
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Scott Klein [Sat, 1 Aug 2026 10:44:01 +0000 (10:44 +0000)]
patch 9.2.0889: VMS: spurious "INVALID DECC FEATURE VALUE" message at every startup
Problem: On OpenVMS, Vim prints "INVALID DECC FEATURE VALUE" once per
DECC feature at every startup whenever that feature is already
set to the value Vim wants -- e.g. when DECC$ARGV_PARSE_STYLE,
DECC$EFS_CASE_PRESERVE or DECC$EFS_CHARSET are defined as
logical names. Conversely, a genuinely out-of-range value is
silently ignored, so the diagnostic fires exactly when it
should not and never when it should (after v9.1.1591)
Solution: Add braces so that the "else" binds to the range check rather
than to the inner "if", matching the existing indentation and
the evident intent (Scott Klein).
related: #17810
closes: #20904
Supported by AI.
Signed-off-by: Scott Klein <kleinmatic@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0888: mapping: modifier is not recognized after a partial mapping
Problem: With the key protocol enabled, a mapping for a key with a modifier
is not used when it follows a partial match of another mapping.
Solution: When the modifier was merged into the key in the typeahead, mark
the key, so that the mapping for the simplified key can be used.
fixes: #12002
closes: #20898
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0887: scroll: jump-scrolling when moving the cursor onto a wrapping line
Problem: With 'smoothscroll' and "lastline" in 'display', moving the cursor
to a wrapping line scrolls much more than needed.
Solution: Only require the screen lines up to the cursor to be visible, the
rest of the line can be cut off at the bottom.
closes: #20895
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0886: :set completion works for an invalid sub-option name
Problem: Completing the value after a sub-option name also works when the
name merely ends in a valid one, e.g. "invalid_close:".
Solution: Require the name to start the option value or to follow a comma.
Compute the length of the name at compile time.
closes: #20893
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0885: scroll: 'smoothscroll' position is lost when the window is squeezed
Problem: With 'smoothscroll' the scroll position in a long line is lost when
a window is temporarily squeezed to a couple of lines, for example
when opening and closing a help window.
Solution: When the cursor ends up in the skipped columns, skip up to the
screen line the cursor is in instead of showing the start of the
line.
closes: #20892
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0884: scroll: unreachable 'smoothscroll' code in cursor_correct()
Problem: cursor_correct() checks for 'smoothscroll' with 'wrap' off, a
combination where 'smoothscroll' has no effect.
Solution: Remove the check, adjust_skipcol() already handles the case where
the cursor line just fits in the window.
closes: #20891
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0883: scroll: 'smoothscroll' position is lost when using "|"
Problem: With 'smoothscroll' the scroll position in a long line is lost when
moving to a column with "|".
Solution: Adjust the skipped columns for the column the cursor ends up in,
not for column zero.
related: #20885
closes: #20890
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Problem: The zip autoload script aborts loading when the "zip"
command is not available, so even read-only browsing of an
archive fails with E117 (zip#Browse undefined) on systems
that have "unzip" but not "zip" (e.g. the Windows CI
runner). Regressed in b0e0b22.
Solution: Drop the load-time executable gate and check each command
per operation instead, so a missing "zip" only affects
writing. Update the test to match the reworded message.
runtime(doc): update todo for the remaining 'smoothscroll' scroll position
The autocommand window no longer resets the scroll position since patch
9.2.0881. What is left is a window that is temporarily squeezed to a couple
of lines, and 'splitkeep' "screen".
related: #20885
closes: #20887
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0881: 'smoothscroll' position is lost when the window height changes
Problem: With 'smoothscroll' the scroll position of a window is lost when
its height changes.
Solution: Only reset the skipped columns when 'smoothscroll' is off, where
they just serve to keep the cursor visible.
closes: #20885
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0880: scroll: window scrolls when using the autocommand window
Problem: The window scrolls when an autocommand window is used while the
cursor is behind multi-byte characters.
Solution: Use the byte column instead of the character count when computing
how many screen lines the text up to the cursor takes.
fixes: #12085
closes: #20884
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0879: popup: "maxwidth" is not respected when 'wrap' is off
Problem: A popup window can become wider than "maxwidth" when 'wrap' is
off and the popup is near the right edge of the screen.
Solution: Do not shift the popup leftwards beyond "maxwidth", truncate the
text instead, like it is done when 'wrap' is on.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0878: Vim9: cannot use a script variable of an enclosing block in a lambda
Problem: Vim9: E1001 when a lambda inside a :def function uses a script
variable that was declared in an enclosing block, while the :def
function itself can use it (neoharju)
Solution: Copy the block scope IDs to the lambda, like it is done for a
nested function (Hirohito Higashi).
fixes: #20876
closes: #PR
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0877: Vim9: crash when a closure assigns to a variable declared in a loop
Problem: Vim9: crash when a closure assigns to a variable that was
declared in a loop (neoharju)
Solution: Encode the loop depth in the STOREOUTER instruction the same way
as in LOADOUTER, so that the executor decodes it correctly
(Hirohito Higashi)
fixes: #20877
closes: #20881
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0875: GTK4: GUI does not support command-line arguments
Problem: The GTK4 GUI does not support command-line arguments
Solution: Parse the supported GUI arguments in gui_mch_prepare()
and add the GTK4-specific --prg-name argument (Foxe Chen).
closes: #20847
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Igor Mikushkin [Wed, 29 Jul 2026 18:53:08 +0000 (18:53 +0000)]
patch 9.2.0874: fold size is compared against 'foldminlines' of the wrong window
Problem: checkSmall() compares the fold size of window "wp" against
the current window's 'foldminlines'. A fold of another
window, e.g. measured while it is redrawn, is judged by an
unrelated option value.
Solution: Use 'foldminlines' of the window containing the fold
(Igor Mikushkin).
closes: #20864
Co-authored-by: Claude <noreply@anthropic.com> Signed-off-by: Igor Mikushkin <igor.mikushkin@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0873: :redrawstatus does not update the ruler of the last window
Problem: When the last window has no status line the ruler takes its
place in the last screen line, but ":redrawstatus" and
re-setting 'rulerformat' or 'statusline' do not update it
there. An item such as a clock in 'rulerformat' can therefore
not be refreshed from a timer (watael)
Solution: Also mark the ruler for redrawing when the last window has no
status line and 'ruler' is set. Update the documentation,
tests and add a new test (Hirohito Higashi)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0872: popup with opacity does not use the font of the highlight group
Problem: When a popup window has an opacity between 0 and 99 the "font"
item of its highlight group is ignored and the regular font is
used instead. The same applies to "ctermfont", and to the
popup menu when the "opacity:" value of 'pumopt' is used
(Salman Halim).
Solution: Also take the font from the popup highlight when blending the
cell attributes (Hirohito Higashi)
fixes: #20551
closes: #20866
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime(doc): GTK: document that "font" in a highlight group has no effect
Problem: It is not documented that in the GTK GUI the "font" item of a
highlight group only works for the "Normal" group. The example
even uses another group, so it does not work there.
Solution: Mention the restriction and use the "Normal" group in the
example.
closes: #20867
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Problem: The documentation says the width of a popup window is equal to
the longest visible line, while since 9.2.0419 it is the
longest line in the buffer, also when that line is not
displayed.
Solution: Update the documentation and correct a comment that says
otherwise.
patch 9.2.0871: screen line is lost when splitting a 'winfixheight' window
Problem: When the only window has 'winfixheight' set and 'laststatus'
is one, splitting it leaves one screen line unused. This
happens for example when jumping to an item from a maximized
quickfix window (rendcrx)
Solution: Do not subtract the height of the status line twice
(Hirohito Higashi)
fixes: #20495
closes: #20871
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime(doc): Vim9: dictionary in a lambda block is not documented
Problem: It is not documented that inside a lambda block the closing "}"
of a dictionary must not be at the start of a line. The note
is only given for a command block, while the restriction is the
same.
Solution: Mention it at |inline-function| and refer to |command-block|.
closes: #20872
fixes: #20693
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Brian Carbone [Tue, 28 Jul 2026 19:03:49 +0000 (19:03 +0000)]
patch 9.2.0870: filetype: marko files are not recognized
Problem: filetype: marko files are not recognized
Solution: Detect *.marko files as marko filetype, include a syntax
plugin and add syntax tests (Brian Carbone)
patch 9.2.0869: buf_copy_options() can lose the P_INSECURE flag
Problem: An insecurely-set 'indentexpr', 'formatexpr', 'includeexpr'
or 'complete' value can end up evaluated outside the
sandbox after buf_copy_options() and clears the flag.
Solution: Copy the insecure flag alongside the value in
buf_copy_options(), and make 'complete' a per-buffer
insecure-flags field
patch 9.2.0868: GTK: Window Manager hint prevents giving focus to dialog
Problem: GTK: Window Manager hint prevents giving focus to dialog
(Allen Wild, after v9.1.0881)
Solution: Remove Window Manager hint again (Christoffer Aasted)
related: #16100
fixes: #17760
closes: #20727
Signed-off-by: Christoffer Aasted <dezzadk@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0867: MS-Windows: messages are not in the display language
Problem: On MS-Windows the messages use the language of the regional
format, not the language that Windows is displayed in
(Markus Nißl)
Solution: Use the display language for the messages, with the other
preferred languages as fall back. Make ":language messages"
overrule it (Hirohito Higashi).
fixes: #20855
closes: #20860
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0866: MS-Windows: ":language messages" only works once
Problem: On MS-Windows ":language messages" has no effect once messages
have been translated, the previous language keeps being used.
Solution: Make gettext drop the translations it cached.
related: #18622
closes: #20862
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0865: GTK4: non-hardware accelerated UI is too slow
Problem: GTK4: non-hardware accelerated UI is too slow
Solution: Remove the sofware rendering (cairo) backend, make the GTK4
hardware accelerated rendering the default (Foxe Chen).
closes: #20844
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0864: Using some dead code in Wayland feature
Problem: Using some dead code in Wayland feature
Solution: Cleanup configure check and remove HAVE_SHM_OPEN test, remove
mch_open_anon_file(), Show result "no" when disabling Wayland
via configure, regenerate auto/configure (Foxe Chen)
closes: #20859
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0863: MS-Windows GUI: window contents can be missing when VimEnter is slow
Problem: On MS-Windows the text area can stay undrawn while a slow VimEnter
autocommand runs, so the window shows what was on the screen behind
it. Whether this happens depends on when the first paint message
arrives.
Solution: Draw the text area when the window is opened, instead of waiting for
the message loop.
related: #20807
closes: #20858
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0861: GTK4: bleed region updates in jumps
Problem: In the GTK4 GUI (GtkSnapshot) the bleed region is only
repainted when the text grid changes by a whole cell,
so during a resize it updates in jumps of several pixels
instead of following the window edge smoothly.
Solution: Redraw the draw area whenever the bleed values change
(Foxe Chen).
closes: #20851
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Jon Parise [Sun, 26 Jul 2026 15:20:02 +0000 (15:20 +0000)]
runtime(python): highlight the 'lazy' soft keyword
Lazy imports (PEP 810, to be released in Python 3.15) introduces a
`lazy` soft keyword that's recognized when it precedes a `from` or
`import` keyword.
closes: #20342
Signed-off-by: Jon Parise <jon@indelible.org> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0858: MS-Windows GUI: white flash when VimEnter is slow
Problem: In the MS-Windows GUI the window is shown before the screen is
drawn for the first time. Until then it displays undefined
content, which appears as a white flash when a VimEnter
autocommand delays the first redraw.
Solution: Use the background color for the window as long as the screen
contents are not available, and paint it again when the
background color changes while only that color is shown.
fixes: #20757
closes: #20807
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0857: popup: opacity popup over a terminal is not cleared when closed
Problem: A semi-transparent (opacity) popup shown over a terminal window
leaves its old cells on screen when it is closed.
Solution: When a semi-transparent popup is closed, trigger full redraw
of underlying terminal windows.
fixes: #20846
closes: #20848
Signed-off-by: mityu <mityu.mail@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime(python): Fix indenting for brackets within python byte strings
Problem: s:SearchBracket()'s skip-expression matches syntax group
names ending in "Comment", "Todo", or "String" to decide
whether a candidate bracket is inside a string/comment
and should be skipped for indentation purposes. Byte and
raw-byte string literals (b"...", rb"...") are highlighted
via the pythonBytes/pythonRawBytes syntax groups, which
don't end in "String", so brackets inside them (e.g.
b"[") were never skipped and were counted as real,
unmatched brackets, producing incorrect indentation.
Solution: Add "Bytes" to the indent script's existing suffix match,
so pythonBytes/pythonRawBytes are recognized directly, the
same way pythonString/pythonFString/pythonRawString
already are.
This supersedes an earlier version of this fix that
renamed pythonBytes/pythonRawBytes to
pythonBytesString/pythonRawBytesString in
runtime/syntax/python.vim.
fixes: #20812
closes: #20827
Signed-off-by: qwavies <qwavsbusiness@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0856: GTK4: undercurl rendering is inefficient
Problem: In the GTK4 GUI the undercurl is drawn by building a path
across the whole width of each decorated row. With many
undercurls on screen this causes frame drops.
Solution: Render a single cycle of the undercurl and tile it across the
row with a repeating node, so the Vulkan and OpenGL
renderers can repeat directly (Foxe Chen).
closes: #20829
Signed-off-by: Foxe Chen <chen.foxe@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
CI: Bump the github-actions group across 1 directory with 3 updates
Bumps the github-actions group with 3 updates in the / directory: [actions/checkout](https://github.com/actions/checkout), [github/codeql-action](https://github.com/github/codeql-action) and [actions/labeler](https://github.com/actions/labeler).
Updates `actions/checkout` from 7.0.0 to 7.0.1
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v7.0.0...v7.0.1)
Updates `github/codeql-action` from 4.37.0 to 4.37.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.37.0...v4.37.1)
Updates `actions/labeler` from 6.2.0 to 7.0.0
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/v6.2.0...v7.0.0)
patch 9.2.0855: 'showcmd' not redrawn with empty mapping triggered on timeout
Problem: 'showcmd' not redrawn with empty mapping triggered on timeout.
Solution: Don't postpone redraw when inside vgetorpeek(). Also move test
for tabline 'showcmd' to test_tabline.vim.
fixes: #20839
closes: #20840
Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0854: memory leak when reading a spell file with SN_SAL and SN_SOFO
Problem: Memory leak when a spell file has an SN_SAL section before an
SN_SOFO section: set_sofo() reuses sl_sal without freeing the
salitem_T entries left by read_sal_section() (after v9.2.0846).
Solution: Factor the SAL free loop into free_sal_items() and call it
before set_sofo() reuses sl_sal.
Problem: Focus autocommands triggered inconsistently
Solution: Suppress dialog-generated focus events while a dialog is
active and on X11 ignore the restoring focus_in_event()
from closing a dialog (Christoffer Aasted).
closes: #20780
Signed-off-by: Christoffer Aasted <dezzadk@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0850: MS-Windows: commands from a client can be lost
Problem: On MS-Windows commands sent by a client in quick succession,
e.g. repeated "--remote-tab", can be lost: the files are not
all opened (eight)
Solution: In the GUI the client message is handled re-entrantly, e.g.
while a command line is being read during a redraw. Inserting
the received keys into the typeahead buffer then corrupts it.
Postpone inserting the keys until a safe point where the
typeahead buffer is empty (Hirohito Higashi).
fixes: #20810
closes: #20816
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
patch 9.2.0848: tagfunc "cmd" with a generic Ex command corrupts the tag entry
Problem: When a tagfunc returns a "cmd" that is neither a line number nor
a search pattern, the tag entry is corrupted: the "kind" field is
lost and taglist() returns a mangled "cmd".
Solution: Accept any Ex command in "cmd" as in a tags file, terminate a
generic command with a bar so the trailing fields are preserved,
and reject a value that cannot be stored in a tag line with E987
(Hirohito Higashi).
fixes: #20781
related: #20790
closes: #20828
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-Authored-By: Mao-Yining <mao.yining@outlook.com> Signed-off-by: Hirohito Higashi <h.east.727@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
Update the Go syntax file with some recent changes made to vim-go to
correctly highlight the second and later lines of concatenated strings
in var or const blocks.
closes: #20835
Signed-off-by: Billie Cleek <bhcleek@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
A crafted spell file with an empty SN_SAL section before an SN_SOFO
section reaches set_sofo() with sl_sal_first[] already set to -1 by
set_sal_first(). The counting loop then under-counts colliding
multi-byte "from" characters, allocates an undersized list and writes
past its end.
patch 9.2.0845: [security]: arbitrary Ex command execution during C omni-completion
Problem: [security]: arbitrary Ex command execution during C
omni-completion (Threonine)
Solution: Match tags typeref literally to block Ex command injection
(Yasuhiro Matsumoto).
Escaping only "/" and "\" left the typeref able to break out of the
:vimgrep pattern without a "/": an unclosed "[" makes vimgrep's pattern
skipping fail, and the parser then treats a following "|" as a command
separator, so the tag value runs as Ex commands during C omni-completion.
Match the field literally with \V so no regex metacharacter can affect
pattern parsing.
patch 9.2.0844: [security]: use-after-free on json decode error
Problem: [security]: use-after-free on json decode error
(@tdjackey)
Solution: Report the position from the current reader
(Matsumoto Yasuhiro)
json_decode_item() caches "p" into js_buf, but json_decode_string() can
refill via channel_fill(), which frees the old js_buf. When the string
parse then fails (e.g. an invalid \u escape), the shared error path passed
the now-dangling "p" to semsg(), a heap use-after-free read reachable
pre-auth through the socketserver.
patch 9.2.0843: [security]: popup: opacity mask indexed out of bounds
Problem: [security]: A "clipwindow" popup with "opacity" anchored to a
text property can keep a negative window row when the anchor
scrolls above the top of the host window. The opacity mask
loop then indexes the screen array before its start, causing
an out-of-bounds read and a conditional out-of-bounds write
(tdjackey).
Solution: Keep the popup window row at the first visible row and record
the clipped-off top rows only in the top offset, so no
consumer has to clamp the row and the opacity mask loop stays
in bounds (Hirohito Higashi).
patch 9.2.0841: [security]: heap overflow when adding > 65535 text properties
Problem: [security]: heap overflow when adding > 65535 text properties
(Wang1rrr).
Solution: Verify that the number of text properties falls within the
limit (Yasuhiro Matsumoto).