24130 Commits

Author SHA1 Message Date
frapank fb1a2e9d13 runtime(sh): fix Bash/Ksh array highlighting after an escaped paren
fixes:  #18712
closes: #20705

Signed-off-by: frapank <francesco.pankov+github@proton.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-25 17:03:56 +00:00
Foxe Chen 06c0e88b76 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>
v9.2.0856
2026-07-25 16:57:36 +00:00
dependabot[bot] f5882d534a 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)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action
  dependency-version: 4.37.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/labeler
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

closes: #20838

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-25 16:51:19 +00:00
zeertzjq 2e9687647a 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>
v9.2.0855
2026-07-25 16:46:29 +00:00
Foxe Chen 3886a8ffc5 runtime(osc52): don't use osc52 provider if gui is running
closes: #20841

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-25 16:44:20 +00:00
Hirohito Higashi 770eb7db17 runtime(doc): clarify expandcmd() and "~" behaviour
fixes: #20793

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-25 16:40:40 +00:00
Hirohito Higashi ac78f14b92 runtime(doc): Tweak documentation style a bit
closes: #20843

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-25 16:36:52 +00:00
Christian Brabandt e2d3e7818b runtime(doc): remove incorrect note about spellcapcheck and the first word
'spellcapcheck' checks the first word in the file for a capital like any
sentence start: capcol is seeded to 0 for line 1 in spell_check_sblock().

This has been the case since the feature was added in v7.0100, so the note
that it "doesn't work for the first word in the file" is incorrect.

related: f9184a1d31 (code change)
related: 0d9c26dd83 (initial doc patch,
         just a few minutes later)
related: #20715

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-25 16:27:18 +00:00
Shay Hill 02c0a90404 runtime(doc): document &t_8u as &t_8f and &t_8b
fixes:  #20413
closes: #20837

Signed-off-by: Shay Hill <shay_public@hotmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-25 16:13:43 +00:00
Christian Brabandt 5a7ce2733a 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.

closes:  #20836

Supported by AI.

Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0854
2026-07-24 22:51:53 +00:00
Christian Brabandt 0c1a214497 runtime(doc): Fix truncated sentence in :h map()
fixes: #20725

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-24 22:23:34 +00:00
Foxe Chen 2e2747ad5f patch 9.2.0853: popup: popup images do not support scaling
Problem:  popup: popup images do not support scaling
Solution: Add popup scaling support for GTK4 UI
          (Foxe Chen).

closes: #20611

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0853
2026-07-24 21:56:37 +00:00
Foxe Chen e6ea6752b0 patch 9.2.0852: GTK: ligatures not correctly displayed
Problem:  GTK: ligatures not correctly displayed
          (thunderbird-1990)
Solution: Split ligatures at cursor location (Foxe Chen).

fixes:  #12901
closes: #20708

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0852
2026-07-24 20:51:52 +00:00
Christoffer Aasted 729c10990d patch 9.2.0851: Focus autocommands triggered inconsistently
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>
v9.2.0851
2026-07-24 20:31:48 +00:00
qeatzy b0e6baab8e Update .gitignore and .hgignore files
Ignore everything below auto/ except for configure

fixes:  #20814
closes: #20815

Signed-off-by: qeatzy <qeatzy@users.noreply.github.com>
  Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-24 20:28:03 +00:00
Hirohito Higashi bf3547849f 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>
v9.2.0850
2026-07-24 20:20:54 +00:00
Fionn Fitzmaurice ea183ce4e5 patch 9.2.0849: filetype: osquery config files are not recognized
Problem:  filetype: osquery config files are not recognized.
Solution: Detect osquery.conf as jsonc filetype (Fionn Fitzmaurice).

Reference:
https://osquery.readthedocs.io/en/stable/deployment/configuration/#configuration-components

closes: #20826

Signed-off-by: Fionn Fitzmaurice <git@fionn.computer>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0849
2026-07-24 20:11:25 +00:00
Hirohito Higashi 86adef19fc 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>
v9.2.0848
2026-07-24 20:08:22 +00:00
Andrey Starodoubtsev e298a57353 runtime(iar): Add iar compiler plugin
closes: #20830

Signed-off-by: Andrey Starodoubtsev <andrey.starodoubtsev@gehealthcare.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-24 20:00:13 +00:00
Billie Cleek e9234b9b4a runtime(go): update Go syntax file
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>
2026-07-24 19:44:45 +00:00
Christian Brabandt 581a2f3ac9 patch 9.2.0847: [security]: vimball: code execution via .VimballRecord file
Problem:  [security]: vimball: code execution via .VimballRecord file
          (tdjackey)
Solution: Forbid arbitrary commands, fix broken directory deletion code,
          refactor code

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-r22p-fhw4-84p2

Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0847
2026-07-24 19:19:25 +00:00
Yasuhiro Matsumoto 05c41c9223 patch 9.2.0846: [security]: heap buffer overflow in set_sofo()
Problem:  [security]: heap buffer overflow in set_sofo()
          (Yazan Balawneh)
Solution: Reset sl_sal_first (Yasuhiro Matsumoto).

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.

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-9jqx-hgpr-6v64

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0846
2026-07-24 18:50:25 +00:00
Yasuhiro Matsumoto 2f628d8104 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.

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-cx73-phcg-3j5g

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0845
2026-07-24 18:17:41 +00:00
Yasuhiro Matsumoto f8126294a5 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.

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-69ch-22ch-r887

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0844
2026-07-24 18:00:51 +00:00
Hirohito Higashi 975e191dc8 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).

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-pmvp-6rcj-98p4

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0843
2026-07-23 21:05:07 +00:00
Yasuhiro Matsumoto 5598618b2d patch 9.2.0842: [security]: stack buffer overflow in socket server
Problem:  [security]: stack buffer overflow in socket server
          (tdjackey)
Solution: Cap accepted socketserver clients (Yasuhiro Matsumoto)

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-49m8-wwxj-mr69

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0842
2026-07-23 20:54:18 +00:00
Yasuhiro Matsumoto a9336b476f 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).

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-hm4g-pjfx-m27j

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0841
2026-07-23 20:14:13 +00:00
Yasuhiro Matsumoto 29c6fd090d patch 9.2.0840: [security]: code injection in netrw via bookmarks
Problem:  [security]: code injection in netrw via bookmarks and history
          (David Carliez)
Solution: Escape the '|' explicitly (Yasuhiro Matsumoto)

The bookmark and history menu builders interpolate paths into :execute'd
:menu commands using g:netrw_menu_escape, which did not escape the Ex
command separator '|'. A crafted path could break out of the :menu command
and run arbitrary Ex/shell commands when the menu was built or triggered.

Add '|' to g:netrw_menu_escape for the menu names, escape the :e right-hand
side with fnameescape(), and quote the netrw#MakeTgt() argument with
string() instead of raw single-quote interpolation.

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-rcr7-f3wr-22r2

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0840
2026-07-23 19:56:55 +00:00
Yasuhiro Matsumoto c5a82fe013 patch 9.2.0839: [security]: arbitrary code execution via keyword lookup
Problem:  [security]: arbitrary code execution via keyword lookup in
          sh.vim, zsh.vim and ps1.vim filetype plugin
          (manus-use)
Solution: For powershell, quote the commands using single quotes, for
          sh/zsh pass the argument as a separate list item to term_start()/system()
          (Yasuhiro Matsumoto).

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-r5v6-q6j8-8qw2

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0839
2026-07-23 19:33:24 +00:00
Christian Brabandt 27cfd1cf47 runtime(spellfile): xdg: Do not assume $HOME/.vim directory
fixes: #20794

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-22 21:49:18 +00:00
Christian Brabandt bb86a1866b runtime(doc): clarify re-sourcing of Vim9 script behaviour
related: #19205

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-22 21:18:31 +00:00
glepnir 4352dc6ab0 patch 9.2.0838: searchcount() returns wrong cached maxcount
Problem:  Cached searchcount() returns 'maxsearchcount' instead of the
          requested maxcount.
Solution: return the remembered last_maxcount (glepnir)

closes: #20701

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0838
2026-07-22 20:08:06 +00:00
Shad 77eed379cc patch 9.2.0837: Using wrong colors in hl_blend_attr()
Problem:  Using wrong colors in hl_blend_attr()
          (after v9.2.0715)
Solution: Use the correct background color
          (Shad)

related: #20624
closes:  #20704

Signed-off-by: Shad <shadow.walker@free.fr>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0837
2026-07-22 20:01:09 +00:00
Fionn Fitzmaurice a8d5be9284 patch 9.2.0836: filetype: .git-blame-ignore-revs file is not recognized
Problem:  filetype: .git-blame-ignore-revs file is not recognized
Solution: Detect .git-blame-ignore-revs file as gitrevlist filetype,
          include syntax and filetype plugins (Fionn Fitzmaurice)

A Git revision list is

> a list of object names (i.e. one unabbreviated SHA-1 per line)...,
> comments (#), empty lines, and any leading and trailing whitespace are
> ignored.

(from Git's fsck.skipList documentation).

The default output of git rev-list will match this. It is also suitable
as input to git blame --ignore-revs-file.

This adds filetype detection matching .git-blame-ignore-revs files,
syntax highlighting and basic filetype settings.

closes: #20702

Signed-off-by: Fionn Fitzmaurice <fionn@github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0836
2026-07-22 19:52:22 +00:00
Muraoka Taro 34fad27b55 patch 9.2.0835: features in version.c are not sorted
Problem:  features in version.c are not sorted
Solution: Sort features case-insensitively (Taro Muraoka)

closes: #20717

Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0835
2026-07-22 19:18:03 +00:00
Barrett Ruth fbe6397ab0 patch 9.2.0834: cleared last search pattern is restored from viminfo
Problem:  cleared last search pattern is restored from viminfo
Solution: Do not apply the search pattern and 'hlsearch' state read
          from viminfo while writing (Barrett Ruth).

fixes:  #20718
closes: #20720

Signed-off-by: Barrett Ruth <br@barrettruth.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0834
2026-07-22 18:50:39 +00:00
Foxe Chen 3d640468ba patch 9.2.0833: GTK4: menu mnemonics do not work properly
Problem:  GTK4: menu mnemonics do not work properly
Solution: Force "mnemonics-visible" back on via a notify handler and
          set the active item on "mnemonic-activate" (Foxe Chen).

closes: #20722

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0833
2026-07-22 18:29:31 +00:00
erdivartanovich 6e46829991 runtime(netrw): fix E471 in Neovim when g:netrw_chgwin is one past the last window
Problem:  Opening a file from a netrw listing throws
          "E471: Argument required: keepj keepalt 2wincmd 1" when
          g:netrw_chgwin equals winnr('$')+1, e.g. after opening
          :Lexplore (which sets g:netrw_chgwin=2) and closing the
          sidebar, then browsing with :Explore in the remaining window.
          s:NetrwBrowseChgDir builds the window jump as
          "g:netrw_chgwin wincmd curwin", passing the saved window
          NUMBER where wincmd expects its single-letter argument.
Solution: Jump back to the saved window with "curwin wincmd w", as the
          surrounding comment intends; the following statement then
          performs the actual jump to g:netrw_chgwin.

The faulty line dates back to at least Vim 9.0
(runtime/autoload/netrw.vim:4976 at v9.0.0000).

Reported (against the since-archived netrw repo) in
saccarosium/netrw.vim#98 and neovim/neovim#34169.

Note: no test, because the error reproduces only in Neovim.

closes: #20741

Signed-off-by: erdivartanovich <erdivartanovich@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-22 18:22:15 +00:00
Hirohito Higashi ce5ca2e634 patch 9.2.0832: socketserver: remote commands can be processed in reverse order
Problem:  When several clients send a command in quick succession, e.g.
          ":drop" from repeated "--remote-tab", the commands can be
          processed in reverse order, so the files open in the wrong
          order.
Solution: The server inserts a newly accepted client at the head of the
          client list, so pending clients are handled newest-first.
          Append the client to the end of the list instead, so they are
          handled in the order they were accepted (Hirohito Higashi).

closes: #20813

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>
v9.2.0832
2026-07-22 18:15:02 +00:00
Maxim Kim e10bba88c2 patch 9.2.0831: diff highlighting hard to read with syntax enabled
Problem:  diff highlighting hard to read with syntax enabled and
          terminals having 256 or less colors (Andrey Butirsky)
Solution: Set a cterm foreground color (Maxim Kim)

fixes:  #4071
closes: #20711

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0831
2026-07-22 17:22:44 +00:00
Christian Brabandt 2f0178afe0 Update .gitignore and .hgignore files
Ignore everything below auto/ except for configure

fixes: #20814

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-22 17:15:59 +00:00
Hirohito Higashi 52485e0d24 patch 9.2.0830: the completion menu is not used on terminals without colors
Problem:  When the terminal reports no colors ("t_Co" is 0 or 1) the
          insert mode completion popup menu is not shown at all, while
          the command line completion popup menu ('wildoptions' contains
          "pum") is shown.  In 'wildmenu' completion the current match
          cannot be told apart from the other matches (Maxim Kim)
Solution: Show the insert mode completion popup menu regardless of the
          number of colors and add "term" attributes to the default
          highlighting of Pmenu, PmenuSel and PmenuThumb.  The wildmenu
          is drawn with the attributes of the status line, which is
          reversed, and on most terminals the standout mode is the same
          as the reverse mode, thus use the underline mode for the
          default highlighting of WildMenu (Hirohito Higashi).

fixes:  #20800
closes: #20803

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>
v9.2.0830
2026-07-22 10:03:11 +00:00
Maxim Kim c86c70091d runtime(colors): update colorschemes
1. new colorscheme `novum` port of nvim dev_theme
2. minor updates to
    - catppuccin
    - habamax
    - lunaperche
    - retrobox
    - ron
    - shine
    - wildcharm

closes: #20723

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-22 09:54:31 +00:00
Illia Bobyr 4b767b9995 patch 9.2.0829: Sessions do not preserve script version for expression options
Problem:  Sessions do not preserve script version for option holding
          expressions
Solution: Remember script version for string options, and add a
          ":legacy" prefix for ":set"/":setlocal" calls when necessary

Since patch v9.2.0579 (":mksession, :mkview and :mkvimrc emit legacy Vim
script") session files are marked as Vim9 script.  A few options have
Vim expressions as their values.  When inserted their values literally
into a Vim9 script, these expressions are now evaluated as Vim9
expressions.  But the original value might have been set by a legacy
script.

In order to be backward compatible and not break most of the existing
file type plugin scripts, we need to consider the script version of the
option value.  If an option was set in a legacy script, or via "legacy
set"/"legacy setlocal", we need to restore it using the "legacy" prefix
as well.

Options are not marked as expression options, vs string options, vs bool
options.  We only know if an option is a bool, number or a string
option.  It seems safe to set bool and number options using Vim9
semantics.  But for string options we do not know if an option value is
a Vim expression.  And so, if it was set by a legacy script we just
use a conservative approach and prefix the "set" or "setlocal" command
with "legacy" for all string options set in a legacy context.

related: #20152
closes:  #20696

Signed-off-by: Illia Bobyr <illia.bobyr@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0829
2026-07-22 09:48:19 +00:00
Mao-Yining 726ce3094d runtime(doc): improve suggested detection method for WSL
Current method can't work in Windows Terminal as far as I know.

This is a way that already had been adopted in `dist/vim9.vim`.

closes: #20714

Signed-off-by: Mao-Yining <mao.yining@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-22 09:45:47 +00:00
Christoffer Aasted 648d16e4ca runtime(doc): clarify 'icon' and 'title' interaction for screen 5
related: #20553
related: #20604
closes:  #20703

Signed-off-by: Christoffer Aasted <dezzadk@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-22 09:39:02 +00:00
Foxe Chen 79a2e3403c patch 9.2.0828: GTK4: hardware rendering can be improved
Problem:  GTK4: hardware rendering can be improved
Solution: Refactor code (Foxe Chen)

This change does the following:

- Make each cell have its own array of glyphs, that represent it. Before
  glyphs were stored per span of drawn text.
- Background color, invert blend is now stored as a single row pixel
  buffer, that is scaled up to size when rendering. No need to have logic
  for merging visual attributes together.
- Underlines, undercurls, and strikethroughs use a mask outline, and a
  pixel buffer (similar to the above) that is opaque at parts where there
  are under decorations. This means having 100 individual undercurls that
  are all separated by spaces in a row will only result in a single mask
  node.
- Render nodes are cached per row, because creating render nodes are
  cheap. The actual heavy stuff would be shaping text into glyphs, which
  are cached per cell.
- Use PangoAttrFontFeatures to handle guiligatures option, instead of
  manually splitting draw calls, which is buggy and complex (some complex
  unicode characters are not rendered correctly).
- Render block cursor separately, this prevents a full redraw of the text
  for the row the cursor is on (only if glyphs in cell underneath cursor
  did not change).

Complex unicode characters that bleed outside of the cell should look
better, since the background is always rendered before all glyphs,
meaning they are not clipped off.

fixes:  #13435
closes: #20674

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0828
2026-07-22 09:31:53 +00:00
Hirohito Higashi 6ab1976e49 patch 9.2.0827: :startinsert enters Insert mode in a non-modifiable buffer
Problem:  ":startinsert" enters Insert mode in a buffer where
          'modifiable' is off, the error only appears when a character
          is typed.  Typing "i" gives the error right away (Barrett Ruth)
Solution: Give the error when the buffer is not modifiable, like "i"
          does.  Keep ignoring the command in a terminal window, where
          ":startinsert" is documented to be ineffective, and keep
          accepting it when 'insertmode' is set, like "i" does
          (Hirohito Higashi).

fixes:  #20804
closes: #20806

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0827
2026-07-22 09:23:31 +00:00
Maxim Kim 38f27d01b5 patch 9.2.0826: highlighting for broken terminals can be improved
Problem:  highlighting for broken terminals can be improved
          (Maxim Kim)
Solution: Make the highlighting work better when the terminal does not
          support colors (Maxim Kim)

In a colorless or broken terminal emulator current syntax highlighting
is too intense with using bold and underline for various syntax
elements.

In this scenario, when the colors are not available at all, the most
important part of the syntax is the comments, something that is not
executed or compiled.

- Comments are highlighted as bold
- All other syntax elements are set to NONE
- LineNr is not highlighted (was underline)
- SpecialKey is not highlighted (was bold)

fixes:  #20712
closes: #20799

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
v9.2.0826
2026-07-22 09:19:43 +00:00
Hirohito Higashi ade577e4dc patch 9.2.0825: regexp: submatch in a look-behind is empty with the NFA engine
Problem:  With the NFA engine a sub-expression inside a variable width
          look-behind, e.g. "\v(.)@<=", is empty for the first match on
          every line except the first one.  The old engine is correct
          (Mukundan)
Solution: The look-behind is retried from the previous line, because the
          width of "." is over-estimated.  While scanning that line the
          start state is added at the end of the line, where it gets the
          position of the line break as its start position, even though
          the match actually starts on the next line.  Use the position
          of the start of the next line in that case (Hirohito Higashi).

fixes:  #20802
closes: #20805

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>
v9.2.0825
2026-07-22 08:49:26 +00:00