0
0
mirror of https://github.com/vim/vim.git synced 2025-10-23 08:44:20 -04:00
Commit Graph

19867 Commits

Author SHA1 Message Date
Zoltan Arpadffy
e9d1259111 patch 9.1.1591: VMS support can be improved
Problem:  VMS support can be improved
Solution: Merge chagnes from Steven M. Schweda
          (Zoltan)

closes: #17810

Co-authored-by: Steven M. Schweda <sms@antinode.info>
Signed-off-by: Zoltan Arpadffy <zoltan.arpadffy@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-25 19:16:09 +02:00
Girish Palya
af9a7a04f1 patch 9.1.1590: cannot perform autocompletion
Problem:  cannot perform autocompletion
Solution: Add the 'autocomplete' option value
          (Girish Palya)

This change introduces the 'autocomplete' ('ac') boolean option to
enable automatic popup menu completion during insert mode. When enabled,
Vim shows a completion menu as you type, similar to pressing |i\_CTRL-N|
manually. The items are collected from sources defined in the
'complete' option.

To ensure responsiveness, this feature uses a time-sliced strategy:

- Sources earlier in the 'complete' list are given more time.
- If a source exceeds its allocated timeout, it is interrupted.
- The next source is then started with a reduced timeout (exponentially
  decayed).
- A small minimum ensures every source still gets a brief chance to
  contribute.

The feature is fully compatible with other |i_CTRL-X| completion modes,
which can temporarily suspend automatic completion when triggered.

See :help 'autocomplete' and :help ins-autocompletion for more details.

To try it out, use :set ac

You should see a popup menu appear automatically with suggestions. This
works seamlessly across:

- Large files (multi-gigabyte size)
- Massive codebases (:argadd thousands of .c or .h files)
- Large dictionaries via the `k` option
- Slow or blocking LSP servers or user-defined 'completefunc'

Despite potential slowness in sources, the menu remains fast,
responsive, and useful.

Compatibility: This mode is fully compatible with existing completion
methods. You can still invoke any CTRL-X based completion (e.g.,
CTRL-X CTRL-F for filenames) at any time (CTRL-X temporarily
suspends 'autocomplete'). To specifically use i_CTRL-N, dismiss the
current popup by pressing CTRL-E first.

---

How it works

To keep completion snappy under all conditions, autocompletion uses a
decaying time-sliced algorithm:

- Starts with an initial timeout (80ms).
- If a source does not complete within the timeout, it's interrupted and
  the timeout is halved for the next source.
- This continues recursively until a minimum timeout (5ms) is reached.
- All sources are given a chance, but slower ones are de-prioritized
  quickly.

Most of the time, matches are computed well within the initial window.

---

Implementation details

- Completion logic is mostly triggered in `edit.c` and handled in
  insexpand.c.

- Uses existing inc_compl_check_keys() mechanism, so no new polling
  hooks are needed.

- The completion system already checks for user input periodically; it
  now also checks for timer expiry.

---

Design notes

- The menu doesn't continuously update after it's shown to prevent
  visual distraction (due to resizing) and ensure the internal list
  stays synchronized with the displayed menu.

- The 'complete' option determines priority—sources listed earlier get
  more time.

- The exponential time-decay mechanism prevents indefinite collection,
  contributing to low CPU usage and a minimal memory footprint.

- Timeout values are intentionally not configurable—this system is
  optimized to "just work" out of the box. If autocompletion feels slow,
  it typically indicates a deeper performance bottleneck (e.g., a slow
  custom function not using `complete_check()`) rather than a
  configuration issue.

---

Performance

Based on testing, the total roundtrip time for completion is generally
under 200ms. For common usage, it often responds in under 50ms on an
average laptop, which falls within the "feels instantaneous" category
(sub-100ms) for perceived user experience.

| Upper Bound (ms) | Perceived UX
|----------------- |-------------
| <100 ms          | Excellent; instantaneous
| <200 ms          | Good; snappy
| >300 ms          | Noticeable lag
| >500 ms          | Sluggish/Broken

---

Why this belongs in core:

- Minimal and focused implementation, tightly integrated with existing
  Insert-mode completion logic.
- Zero reliance on autocommands and external scripting.
- Makes full use of Vim’s highly composable 'complete' infrastructure
  while avoiding the complexity of plugin-based solutions.
- Gives users C native autocompletion with excellent responsiveness and
  no configuration overhead.
- Adds a key UX functionality in a simple, performant, and Vim-like way.

closes: #17812

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-25 18:57:04 +02:00
Christian Brabandt
b124b8d276 patch 9.1.1589: Cannot disable cscope interface using configure
Problem:  Cannot disable cscope interface using configure, because in
          feature.h FEAT_CSCOPE will always be enabled for huge builds
          (chdiza)
Solution: Don't define FEAT_CSCOPE from configure script but set the
          ENABLE_CSCOPE flag and check for the presence of that flag in
          feature.h

fixes: #17825
closes: #17842

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-25 18:27:53 +02:00
Yegappan Lakshmanan
a566a78029 patch 9.1.1588: Vim9: cannot split dict inside command block
Problem:  Vim9: cannot split dict inside command block
          (lacygoill)
Solution: Remove the current restriction (Yegappan Lakshmanan).

fixes: #17841
closes: #17845

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-25 18:23:58 +02:00
Foxe Chen
1a224edb2e patch 9.1.1587: Wayland: timeout not updated before select()
Problem:  Wayland: timeout not updated before select()
Solution: Always set timeval struct before select() (Foxe Chen).

closes: #17836

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-24 19:29:13 +02:00
Yegappan Lakshmanan
9239eadc71 patch 9.1.1586: Vim9: can define an enum/interface in a function
Problem:  Vim9: can define an enum/interface in a function
          (lacygoill)
Solution: Give an error when defining an enum or an interface inside a
          function (Yegappan Lakshmanan)

fixes: #17835
fixes: #17837
closes: #17837

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-24 19:14:51 +02:00
Christoffer Aasted
48a3b146b4 patch 9.1.1585: Wayland: gvim still needs GVIM_ENABLE_WAYLAND
Problem:  Wayland: gvim still needs GVIM_ENABLE_WAYLAND
Solution: Drop the GVIM_ENABLE_WAYLAND code, always enable both X11 and
          Wayland GUI support (Christoffer Aasted)

closes: #17817

Signed-off-by: Christoffer Aasted <chr.aasted@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-23 21:05:51 +02:00
Hirohito Higashi
5608f3dc93 patch 9.1.1584: using ints as boolean type
Problem:  using ints as bool
Solution: Include stdbool.h and start using bool type directly
          (Hirohito Higashi)

This is a test to see if using the boolean types cause any issues.
If this change causes issues on any platform, please reach out.

closes: #17830

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-23 20:41:11 +02:00
Antonio Giovanni Colombo
2566a9f290 check.vim: Improve po message checks
Signed-off-by: Antonio Giovanni Colombo <azc100@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-23 20:37:21 +02:00
Antonio Giovanni Colombo
aa55185100 translation(it): Update Italian translation
Signed-off-by: Antonio Giovanni Colombo <azc100@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-23 19:49:07 +02:00
Olaf Seibert
9d5bb58637 patch 9.1.1583: gvim window lost its icons
Problem:  Since patch 9.1.1199 the gvim window no longer had _NET_WM_ICON
          nor WM_HINTS icon information, for example when not using a
	  Gnome or KDE desktop (after v9.1.1199)
Solution: Check if the icon theme as used in patch 1199 contains a gvim
          icon. If so, set the window's icon from that. Otherwise
	  use the previous method (Olaf Seibert)

fixes: #17703
closes: #17814

Signed-off-by: Olaf Seibert <rhialto@falu.nl>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-23 19:35:59 +02:00
Christian Brabandt
d680d40539 patch 9.1.1582: style issue in vim9type.c and vim9generics.c
Problem:  style issue in vim9type.c and vim9generics.c
          (after v9.1.1581 and v9.1.1580)
Solution: Update Style and place opening brace on a new line.

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-22 19:41:39 +02:00
Christian Brabandt
774fe9d8fc runtime(doc): remove mention of ftp.vim.org
fixes: #17819

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-22 19:39:54 +02:00
Lidong Yan
97194523d5 patch 9.1.1581: possible memory leak in vim9generics.c
Problem:  possible memory leak in vim9generics.c
Solution: Free ret_free if ga_grow() fails and before returning
          (Lidong Yan).

In parse_generic_func_type_args() at vim9generics.c, we allocate memory
in ret_name and should free it by calling vim_free(ret_free). If
ga_grow on gfatab->gfat_args failed, we forget to call vim_free(ret_free)
thus would cause a leak. Add vim_free(ret_free) before return NULL.

closes: #17821

Signed-off-by: Lidong Yan <yldhome2d2@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-22 18:15:57 +02:00
Lidong Yan
13e1af7de9 patch 9.1.1580: possible memory leak in vim9type.c
Problem:  possible memory leak in vim9type.c
Solution: Free tuple_types_ga if there was an error in
          type_type_add_types() (Lidong Yan)

In parse_type_tuple() at src/vim9type.c, we allocate memory
in `tuple_types_ga` by ga_grow(), but forget to free it when
tuple_type_add_types() fails. Replace `return NULL` with `goto on_err`
to fix leak.

closes: #17820

Signed-off-by: Lidong Yan <yldhome2d2@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-22 18:11:11 +02:00
Yegappan Lakshmanan
7cf31ce9c4 patch 9.1.1579: Coverity complains about unchecked return value
Problem:  Coverity complains about unchecked return value in
          common_function() (after v9.1.1577)
Solution: Check the return value of skip_generic_func_type_args()
          and return in case of an error (Yegappan Lakshmanan)

closes: #17818

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-22 18:04:15 +02:00
Yee Cheng Chin
ad5c9b4b11 patch 9.1.1578: configure: comment still mentions autoconf 2.71
Problem:  configure: comment still mentions autoconf 2.71 to generate
          the configure script
Solution: Update the comment to use autoconf 2.72 instead (Yee Chin Cheng).

Vim v9.1.1369 updated the autoconf generation to be done using 2.72.
Update comments to reflect that.

closes: #17815

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-22 17:55:08 +02:00
Yegappan Lakshmanan
3416cee36f patch 9.1.1577: Vim9: no generic support yet
Problem:  Vim9: no generic support yet
Solution: Add support for generic functions, funcrefs and object/class
          methods (Yegappan Lakshmanan).

closes: #17313

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-21 21:36:08 +02:00
Girish Palya
b486ed8266 patch 9.1.1576: cannot easily trigger wildcard expansion
Problem:  cannot easily trigger wildcard expansion
Solution: Introduce wildtrigger() function
          (Girish Palya)

This PR introduces a new `wildtrigger()` function.

See `:h wildtrigger()`

`wildtrigger()` behaves like pressing the `wildchar,` but provides a
more refined and controlled completion experience:

- Suppresses beeps when no matches are found.
- Avoids displaying irrelevant completions (like full command lists)
  when the prefix is insufficient or doesn't match.
- Skips completion if the typeahead buffer has pending input or if a
  wildmenu is already active.
- Does not print "..." before completion.

This is an improvement on the `feedkeys()` based autocompletion script
given in #16759.

closes: #17806

Signed-off-by: Girish Palya <girishji@gmail.com>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-21 21:26:32 +02:00
Hirohito Higashi
e1c507a965 patch 9.1.1575: tabpanel not drawn correctly with wrapped lines
Problem:  tabpanel not drawn correctly with wrapped lines
          (utubo, after v9.1.1534)
Solution: Use Columns as width, not the frame width
          (Hirohito Higashi)

fixes: #17774
closes: #17809

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-21 20:32:08 +02:00
Damien Lejay
b2013396d4 patch 9.1.1574: Dead code in mbyte.c
Problem:  Dead code in mbyte.c
Solution: Delete the dead wcwidth()/iswprint() code
          (Damien Lejay)

These library calls have been disabled since patch 6.2.446 (2002) due to
display issues with Hebrew. They are also non-portable: wcwidth() is a
POSIX function and not available on MSVC or other non-POSIX platforms.
Keeping this code path adds complexity without benefit.

closes: #17811

Signed-off-by: Damien Lejay <damien@lejay.be>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-21 20:25:33 +02:00
zeertzjq
c02bef26fd patch 9.1.1573: Memory leak when pressing Ctrl-D in cmdline mode
Problem:  Memory leak when pressing Ctrl-D in cmdline mode
          (after 9.1.1571).
Solution: Free prev_cmdbuff before assigning to it.
          (zeertzjq).

Existing tests already cover this. This change fixes the CI failure.

closes: #17807

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 16:50:01 +02:00
Christian Brabandt
2844765e90 translation: do not add message location as comments into vim.pot
Let's add the --no-location to the xgettext command line call, so that
the generated vim.pot file does not contain the message location. Those
will get out of date soon and we don't want to update vim.pot just
because the location in a comment changes.

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 16:34:00 +02:00
Miguel Barro
8b004081c4 patch 9.1.1572: expanding $var does not escape whitespace for 'path'
Problem:  expanding $var does not escape whitespace for 'path'
Solution: Escape whitespace when expanding 'path' option.
          (Miguel Barro)

closes: #17801

Signed-off-by: Miguel Barro <miguel.barro@live.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 10:47:14 +02:00
Girish Palya
239c4e4abe patch 9.1.1571: CmdlineChanged triggered to often
Problem:  The CmdlineChanged event was firing unnecessarily, even when
          the command line's content hadn't actually changed.

Solution: I've added a check to compare the command-line buffer's state
          before and after key processing. The `CmdlineChanged` event
          now only triggers if the buffer's contents are genuinely
          different (Girish Palya).

closes: #17803

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 10:41:02 +02:00
John Marriott
88b735973c patch 9.1.1570: Copilot suggested some improvements in cmdexpand.c
Problem:  Copilot suggested some improvements in cmdexpand.c
          (after v9.1.1556)
Solution: Use better variable names and comments
          (John Marriott).

closes: #17795

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 10:28:26 +02:00
Christian Brabandt
5eb9448743 translation(de): Update German translations
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 10:26:02 +02:00
Antonio Giovanni Colombo
d8be37af0f translation(it): Update Italian translations
Signed-off-by: Antonio Giovanni Colombo <azc100@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 10:00:55 +02:00
Yegappan Lakshmanan
ba023e135b patch 9.1.1569: tests: Vim9 tests can be improved
Problem:  tests: Vim9 tests can be improved
Solution: In Test_has_func_shortcircuit(), move the test functions to a
          separate script (Yegappan Lakshmanan)

closes: #17796

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 09:55:07 +02:00
RestorerZ
3c8d32e4fc translation: comment out deletion of *.pot file in Makefiles
This is needed since commit 59bd74e included vim.pot in the repository.

closes: #17800

Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 09:48:52 +02:00
Maxim Kim
16f7098e68 patch 9.1.1568: need a few more default highlight groups
Problem:  need a few more default highlight groups
Solution: Add Bold, Italic and BoldItalic default highlight groups
          (Maxim Kim).

related: https://github.com/vim/vim/pull/17598#issuecomment-3007320523
closes: #17804

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 09:35:35 +02:00
Yee Cheng Chin
c8b99e2d13 patch 9.1.1567: crash when using inline diff mode
Problem:  Crash when using inline diff mode
          (Ilya Grigoriev)
Solution: Set tp_diffbuf to NULL when skipping a diff block
          (Yee Cheng Chin).

Fix an array out of bounds crash when using diffopt+=inline:char when 4
or more buffers are being diff'ed. This happens when one of the blocks
is empty. The inline highlight logic skips using that buffer's block,
but when another buffer is used later and calls diff_read() to merge the
diff blocks together, it could erroneously consider the empty block's
diff info which has not been initialized, leaving to diff numbers that
are invalid. Later on the diff num is used without bounds checking which
leads to the crash.

Fix this by making sure to unset tp_diffbuf to NULL when we skip a
block, so diff_read() will not consider this buffer to be used within
inline diff. Also, add more bounds checking just to be safe.

closes: #17805

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-20 09:19:13 +02:00
Yegappan Lakshmanan
0e40501a9d patch 9.1.1566: self-referenced enum may not get freed
Problem:  self-referenced enum may not get freed
Solution: Test if it can be freed (Yegappan Lakshmanan)

closes: #17743

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-18 21:50:20 +02:00
Christoffer Aasted
f412241fcd patch 9.1.1565: configure: does not consider tiny version for wayland
Problem:  configure: does not consider tiny version for wayland
Solution: Do not try to enable wayland for a tiny vim version
          (Christoffer Aasted).

closes: #17783

Signed-off-by: Christoffer Aasted <chr.aasted@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-18 20:37:41 +02:00
Sean Dewar
2e58b7684f patch 9.1.1564: crash when opening popup to closing buffer
Problem:  Can open a popup window to a closing buffer, leading to the
          buffer remaining open in the window after it's soon unloaded,
          causing crashes.
Solution: Check b_locked_split when opening a popup window to an
          existing buffer (Sean Dewar).

closes: #17790

Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-18 20:09:47 +02:00
Christian Brabandt
be863b2633 translation: mark vim.pot as linguist-generated, ignore msg locations in vim.pot
Update the textconv filter to filter out changes in the comments
pointing to the location of the message.

Also remove the comments in vim.pot that mention the message location.
Since those will be ignored using vims textconv filter, it does not make
sense to keep them, they would get out of sync anyhow.

closes: #17782

Co-authored-by: Illia Bobyr <illia.bobyr@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-18 20:06:02 +02:00
Girish Palya
824286c9a7 patch 9.1.1563: completion: ruler may disappear
Problem:  The ruler disappears after typing the second character during
          insert mode completion, even when completion messages are
          suppressed ('shortmess' includes "c"). This makes the UI
          appear inconsistent.
Solution: Ensure the ruler is restored during screen redraw when popup
          completion is active (Girish Palya).

Notes:
No new tests were added, as existing screen dump tests were updated to
reflect the corrected behavior.

closes: #17770

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-17 22:02:57 +02:00
Girish Palya
fb45809f01 patch 9.1.1562: close button always visible in the 'tabline'
Problem:  close button "X" is visible in the non-GUI 'tabline', even
          when the mouse is disabled
Solution: only show the button when 'mouse' contains any of the flags
          "anvi" (Girish Palya)

The tabline always displays an "X" (close) button, and the info popup
shows both a close button and a resize handle—even when the mouse is
disabled. These UI elements are only actionable with the mouse and serve
no purpose for keyboard users who disable the mouse. Displaying
non-functional, clickable elements in a non-GUI environment is
misleading and adds unnecessary visual clutter.

So remove the close button and resize handle when the mouse is disabled.
They appear again when mouse is enabled.

closes: #17765

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-17 21:56:16 +02:00
Christoffer Aasted
138381bde0 patch 9.1.1561: configure: wayland test can be improved
Problem:  configure: wayland test can be improved
Solution: Define $WAYLAND_CFLAGS, simplify the wayland tests
          (Christoffer Aasted).

closes: #17772

Signed-off-by: Christoffer Aasted <chr.aasted@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-17 21:11:06 +02:00
Christoffer Aasted
861dade4e3 patch 9.1.1560: configure: uses $PKG_CONFIG before it is defined
Problem:  configure: uses $PKG_CONFIG before it is defined
Solution: Define $PKG_CONFIG earlier in the script (Christoffer Aasted).

closes: #17771

Signed-off-by: Christoffer Aasted <chr.aasted@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-17 21:05:59 +02:00
zeertzjq
12d274af44 patch 9.1.1559: tests: Test_popup_complete_info_01() fails when run alone
Problem:  tests: Test_popup_complete_info_01() fails when run alone.
Solution: Set buffer-local competeopt+=noinsert and add missing cleanup
          in Test_popup_complete() (zeertzjq).

closes: #17773

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-17 20:40:04 +02:00
Christian Brabandt
71c794ccc5 translation: regenerate vim.pot, ignore version.c changes
Regenerate vim.pot because of a wording update in optwin.vim for the
diffanchors feature.

While at it, update the textconv filter to ignore all lines
containing version.c because those change just by incrementing
the Vim patch number *grummel*

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-17 20:20:35 +02:00
zeertzjq
2e154d8135 patch 9.1.1558: str2blob() treats NULL string and empty string differently
Problem:  str2blob() treats NULL string and empty string differently
Solution: Treats a NULL string the same as an empty string
          (zeertzjq).

closes: #17778

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-17 20:12:17 +02:00
Yee Cheng Chin
0d9160e11c patch 9.1.1557: not possible to anchor specific lines in difff mode
Problem:  not possible to anchor specific lines in difff mode
Solution: Add support for the anchoring lines in diff mode using the
          'diffanchor' option (Yee Cheng Chin).

Adds support for anchoring specific lines to each other while viewing a
diff. While lines are anchored, they are guaranteed to be aligned to
each other in a diff view, allowing the user to control and inform the
diff algorithm what the desired alignment is. Internally, this is done
by splitting up the buffer at each anchor and run the diff algorithm on
each split section separately, and then merge the results back for a
logically consistent diff result.

To do this, add a new "diffanchors" option that takes a list of
`{address}`, and a new "diffopt" option value "anchor". Each address
specified will be an anchor, and the user can choose to use any type of
address, including marks, line numbers, or pattern search. Anchors are
sorted by line number in each file, and it's possible to have multiple
anchors on the same line (this is useful when doing multi-buffer diff).
Update documentation to provide examples.

This is similar to Git diff's `--anchored` flag. Other diff tools like
Meld/Araxis Merge also have similar features (called "synchronization
points" or "synchronization links"). We are not using Git/Xdiff's
`--anchored` implementation here because it has a very limited API
(it requires usage of the Patience algorithm, and can only anchor
unique lines that are the same across both files).

Because the user could anchor anywhere, diff anchors could result in
adjacent diff blocks (one block is directly touching another without a
gap), if there is a change right above the anchor point. We don't want
to merge these diff blocks because we want to line up the change at the
anchor. Adjacent diff blocks were first allowed when linematch was
added, but the existing code had a lot of branched paths where
line-matched diff blocks were handled differently. As a part of this
change, refactor them to have a more unified code path that is
generalized enough to handle adjacent diff blocks correctly and without
needing to carve in exceptions all over the place.

closes: #17615

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-16 20:40:32 +02:00
John Marriott
393d398247 patch 9.1.1556: string handling in cmdexpand.c can be improved
Problem:  string handling in cmdexpand.c can be improved
Solution: Improve string manipulation in cmdexpand.c (John Marriott).

This PR does the following:

In cmdline_fuzzy_completion_supported():
- replace the series of if tests with a switch

In expand_shellcmd_onedir():
- move the code to concatenate path and pattern to expand_shellcmd().
  This allows us to slightly simplify the argument list to pass the fully
  pathed pattern and the length of the path in the pattern (0 if no path)
- factor out calls to STRMOVE()

In expand_shellcmd():
- factor out calls to STRMOVE() in the first for loop.
- reorganise the second for loop by:
  a) only calling vim_strchr() if s is not at the end of the string
  b) making sure that when the path and pattern are concatenated they fit
     inside buf
  c) concatenating path and pattern and pass to expand_shellcmd_onedir()

In globpath():
- slightly improve logic that determines if the complete path will fit
  inside the buffer

In f_getcompletion():
- replace the series of if tests with a switch
- factor out calls to STRLEN()

In copy_substring_from_pos():
- factor out the call to STRLEN()

closes: #17742

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-16 20:09:13 +02:00
Girish Palya
78b10eab6c patch 9.1.1555: completion: repeated insertion of leader
Problem:  completion: repeated insertion and deletion of complete
          functions
Solution: Remove unnecessary insertion and deletion of leader text
          ('compl_orig_text') during expansion of function present in
          'complete' option (Girish Palya).

closes: #17738

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-16 19:53:56 +02:00
Girish Palya
e4fdb1e4e7 patch 9.1.1554: crash when omni-completion opens command-line window
Problem:  Vim crashes during omnifunc completion inside the command-line
          window ("q:") if the completion item attempts to open an "info"
          preview window. This leads to a failed assert during execution.
Solution: Avoid opening preview windows while inside the command-line
          window to prevent the crash (Girish Palya).

closes: #17764

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-16 18:54:54 +02:00
Yegappan Lakshmanan
7dd8ee2103 patch 9.1.1553: Vim9: crash when accessing a variable in if condition
Problem:  Vim9: crash when accessing a variable in if condition
          (lxhillwind)
Solution: Skip indexing a list/tuple/dict/blob when short-circuiting an
          if condition check (Yegappan Lakshmanan)

fixes: #17756
closes: #17768

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-16 18:34:59 +02:00
Christian Brabandt
87757c6b0a patch 9.1.1552: [security]: path traversal issue in tar.vim
Problem:  [security]: path traversal issue in tar.vim
          (@ax)
Solution: warn the user for such things, drop leading /, don't
          forcefully overwrite files when writing temporary files,
          refactor autoload/tar.vim

tar.vim: drop leading / in path names

A tar archive containing files with leading `/` may cause confusions as
to where the content is extracted.  Let's make sure we drop the leading
`/` and use a relative path instead.

Also while at it, had to refactor it quite a bit and increase the
minimum supported Vim version to v9. Also add a test for some basic tar
functionality

closes: #17733
2025-07-15 21:58:08 +02:00
Christian Brabandt
586294a041 patch 9.1.1551: [security]: path traversal issue in zip.vim
Problem:  [security]: path traversal issue in zip.vim (@ax)
Solution: drop leading ../ on write of zipfiles, don't forcefully
          overwrite existing files

A zip plugin which contains filenames with leading '../'  may cause
confusion as to where the content will be extracted.  Let's drop such
things and make sure we use a relative filename instead and don't
forcefully overwrite temporary files. Also, warn the user of such
things.

related: #17733

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-07-15 21:57:48 +02:00