446 Commits
Author SHA1 Message Date
Christian Brabandt 40f3cbc92b Create Code of Conduct, update CONTRIBUTING
While updating the Filelist I noticed some entries were not sorted, so I
resorted it while at it.

closes: #21456

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-10-14 21:41:01 +00:00
Foxe Chen 86cfe56b30 patch 9.2.1161: the image feature can be improved
Problem:  the image feature can be improved
Solution: Refactor the image feature, make use of the pixman library if
          possible, add image_info(), image_add() and image_discard()
          functions and the 'imageprotocol' option (Foxe Chen)

closes: #21234

Assisted-by: Claude
Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-09-30 21:57:39 +00:00
Christian Brabandt 793af86eb4 Filelist: Add pull request template
forgotten from 69180073f2

While at it, also re-sort the entries.

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-09-28 20:25:17 +00:00
Foxe Chen 1b7bd58115 patch 9.2.0931: the GTK4 GUI is still experimental and untested by CI
Problem:  the GTK4 GUI is still experimental and untested by CI
Solution: Stabilize the GTK4 code, Fix a few minor issues, include a
          GTK4 CI job (Foxe Chen).

closes: #20920

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-08-10 20:08:09 +00:00
Hirohito HigashiandClaude Opus 5 a6be0d496a CI: Add Github runner for Cygwin
Vim can be built for Cygwin with the Unix Makefile, but nothing covers it.
The Windows runner builds with MSVC and MinGW only, and the Cirrus CI job
that was removed in 0abffbff ran FreeBSD alone.

Add a GitHub Actions workflow that configures and builds under Cygwin.  It
runs once per day instead of per push, and skips the run when nothing was
committed since the previous one, because the Cygwin runner is slow.  Only
the tiny test suite, the unit tests and the libvterm tests are run: the
script tests need sockets, PowerShell, network access and POSIX file
permissions, which do not behave the same under Cygwin.

closes: #20970

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>
2026-08-07 20:12:39 +00:00
Hirohito HigashiandClaude Opus 5 be85db01f1 patch 9.2.0912: hardcopy: prototypes are hand-written instead of generated
Problem:  The prototypes for the pango and PostScript hardcopy functions
          are written by hand in hardcopy_pango.h and
          hardcopy_postscript.h, instead of being generated into proto/
          like for every other source file.
Solution: Generate proto/hardcopy_pango.pro and
          proto/hardcopy_postscript.pro, include them from proto.h and
          drop the hand-written declarations.  hardcopy_pango.h only held
          prototypes and is removed; hardcopy_postscript.h keeps its
          defines and the mbfont_opts declaration.

closes: #20946

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>
2026-08-05 18:52:06 +00:00
Foxe Chen f141c19dca 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>
2026-08-02 18:33:37 +00:00
Christoffer Aasted 2262053f32 patch 9.2.0824: Makefile: Make tags depends on configure
Problem:  Makefile: Make tags depends on configure
Solution: Separate the make tags into a separate makefile
          (Christoffer Aasted)

closes: #20707

Signed-off-by: Christoffer Aasted <dezzadk@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-22 08:42:59 +00:00
Mao-Yiningandyianwillis 7f6fd6be89 translation(zh_CN): Add Chinese man pages
Problem:  No Simplified Chinese man pages.
Solution: Add Simplified Chinese translations of man pages.

closes: #19464

Co-Authored-By: yianwillis <yianwillis@gmail.com>
Signed-off-by: Mao-Yining <mao.yining@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-07-02 19:24:19 +00:00
Foxe Chen 037a19e1c1 patch 9.2.0719: GTK4: default menu is lacking
Problem:  GTK4: default menu is lacking: accelerator
          text is not shown, mnemonics and 'winaltkeys' do not work
Solution: Replace the GMenuModel-based menus with a custom widget set
          (VimMenuBar, VimMenuBarItem, VimMenu, VimMenuItem) in a new
          gui_gtk4_menu.c, modelled on the GTK3 menu bar: show accelerator
          text, support mnemonics and 'winaltkeys', add keyboard
          navigation, instant tooltips, and the popup and F10 menus, and
          implement the previously stubbed menu functions (Foxe Chen).

closes: #20593

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-24 18:19:53 +00:00
Christian Brabandt ccdc817014 CI: Restore daily Coverity Scan
I finally got a note that Coverity is online back again.

This partially reverts commit 0abffbff23.
("CI: Remove Cirrus CI and Coverity Scan")

related: #20431

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-23 17:49:27 +00:00
K.Takata e31ec2ef06 nsis: Remove NSIS Installer Code
Move the NSIS code to the vim/vim-win32-installer repository.
When we update the NSIS code, we sometimes need to update the
vim/vim-win32-installer scripts also. Managing them in the same repository
should be better for maintenance.

This PR should be merged after https://github.com/vim/vim-win32-installer/pull/457

closes: #20521

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-21 20:34:45 +00:00
Foxe Chen 028314a8de patch 9.2.0669: GTK4: toolbar can be improved
Problem:  GTK4: toolbar can be improved
Solution: Implement gui_mch_menu_set_tip(), make the UI respect the
          'toolbar' option (Foxe Chen).

closes: #20541

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-17 19:57:26 +00:00
Foxe Chen c1e0c8edf2 patch 9.2.0632: GTK4: no support for hardware-accelerated rendering
Problem:  The GTK4 GUI renders via a Cairo backing surface, which may be
          slow for large windows and high-resolution displays.
Solution: Add the --enable-gtk4-hwaccel configure option, which
          switches the GTK4 GUI to GtkSnapshot-based rendering.  Popup
          images use the new GDK image backend which uploads textures to
          the GPU (Foxe Chen).

closes: #20437

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-13 17:59:38 +00:00
Yasuhiro Matsumoto 0abffbff23 CI: Remove Cirrus CI and Coverity Scan
Cirrus CI shut down on 2026-06-01, so its badge and .cirrus.yml no longer
work. The Coverity Scan project for Vim is also gone (the badge and project
page return 404). Remove both badges and their related configuration.

closes: #20431

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-10 21:30:09 +00:00
Yasuhiro Matsumoto 9d9bad24ad patch 9.2.0612: Cannot render images in popup windows
Problem:  Cannot render images in popup windows
Solution: Add support for rendering images using the kitty, sixel, cairo
          and GDI backend (Yasuhiro Matsumoto).

Add an "image" attribute to popup_create()/popup_setoptions() that
renders a raw RGB/RGBA pixel buffer inside a popup window. Terminal
backends emit the buffer as DEC sixel or kitty graphics sequences; the
MS-Windows GUI uses GDI and the GTK GUI uses Cairo. The popup auto-sizes
its cell box from the image dimensions. getbgcolor() returns the current
background colour so scripts can pre-composite RGBA pixels.

closes: #20136

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-09 20:16:27 +00:00
Foxe Chen 7daab2ad98 patch 9.2.0606: GTK4: does not support all clipboard formats
Problem:  GTK4: GUI does not support Vim's internal specific
          formats that preserve motion type and encoding. It also
          doesn't support the 'html' option in 'clipboard'.
Solution: Refactor code and support for all clipboard formats
          (Foxe Chen).

closes: #20445

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-06-09 18:49:31 +00:00
Muraoka Taro 3b8ac8f8a4 CI: Split platform specific CI configurations into separated files
- ci-linux.yml for Linux
- ci-linux_asan.yml for Linux ASan
- ci-macos.yml for macOS
- ci-windows.yml for Windows

closes: #20325

Signed-off-by: Muraoka Taro <koron.kaoriya@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-25 15:23:47 +00:00
Foxe Chen e9c793bebc patch 9.2.0512: clientserver uses binary protocol
Problem:  clientserver feature uses binary protocol and is hard
          to understand
Solution: Rewrite the code based on channels and JSON messages
          (Foxe Chen).

closes: #19782

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-22 20:12:01 +00:00
Yasuhiro MatsumotoandClaude da5ebe71cb patch 9.2.0501: GTK4: there is no GTK4 UI available
Problem:  GTK4: there is no GTK4 UI available
Solution: Implement GTK4 UI (Yasuhiro Matsumoto).

To enable, use the --enable-gui=gtk4 configure switch. Configure
currently favors GTK3 over GTK4 if no explicit --enable-gui switch has
been given and both libraries are present

closes: #19815

Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-19 18:20:19 +00:00
K.Takata 9b1d657bca CI: Stop using AppVeyor
We started the Windows CI with AppVeyor (v7.4.872), but nowadays, GitHub Actions
supports Windows, and the performance is better than AppVeyor.
Especially, AppVeyor doesn't allow running multiple jobs in parallel.

Before 9.0.0529, we used VC 2010 on AppVeyor to ensure that C99 syntax
was not used.
Now we use some C99 syntax. Also, MSVC's C99 support level remains
almost the same since VS 2015. So, using VS 2015 isn't very useful.

closes: #20251

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-05-18 21:19:27 +00:00
Yasuhiro Matsumoto 036e40e6d8 patch 9.2.0398: MS-Windows: missing strptime() support
Problem:  MS-Windows: missing strptime() support
Solution: Port NetBSD's strptime fallback to Vim
          (Yasuhiro Matsumoto).

The MSVC and MinGW C runtimes do not provide strptime(), so the
strptime() builtin was unavailable on Windows.  Port NetBSD's
lib/libc/time/strptime.c (rev 1.67) and compile it into the Windows
builds.  The BSD 2-clause notice from the original is preserved in the
file.  Windows-specific adjustments: English-only locale tables, the
fromzone()/tzalloc() path is stubbed out (no IANA tzfile loader on
Windows), and tm_gmtoff / tm_zone stores are elided.

Also call tzset() before mktime() in f_strptime() so changes to \$TZ
are honored.

Skip the POSIX DST TZ assertion in Test_strptime() on MS-Windows since
the CRT tzset() does not parse POSIX TZ strings with DST rules.

closes: #20054

Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 17:31:41 +00:00
Christian Brabandt 1de887681d No guidance for AI coding agents
Problem:  No guidance for AI coding agents working in the Vim
          repository.
Solution: Add AGENTS.md to the repository documenting build
          and test commands, repository layout, commit format,
          C and Vim9-script conventions, test conventions, help
          file style, and release policy, so that AI agents can
          produce patches that match project expectations.

closes: #20039

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-26 08:11:59 +00:00
Ozaki Kiichi f9cb0d14dc CI: Separate out ASan tests
closes: #19962

Signed-off-by: Ozaki Kiichi <gclient.gaap@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-14 18:13:32 +00:00
CimbaliandPaul LeoNerd Evans e29f33ef51 patch 9.2.0336: libvterm: no terminal reflow support
Problem:  libvterm: no terminal reflow support
Solution: Support for reflowing, sync libvterm to revision 843
          (Cimbali)

fixes:  #2865
closes: #8365
closes: #19863

Co-authored-by: Paul "LeoNerd" Evans <leonerd@leonerd.org.uk>
Signed-off-by: Cimbali <me@cimba.li>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-10 22:15:36 +00:00
Duncan Bowring b7205b6426 patch 9.2.0290: Amiga: no support for AmigaOS 3.x
Problem:  Amiga: no support for AmigaOS 3.x
Solution: Add support for building Vim on classic AmigaOS 3.x with the
          bebbo cross-compiler and libnix (-noixemul) runtime
          (Duncan Bowring).

The existing Make_ami.mak targets AmigaOS 4 (clib2), AROS, and MorphOS.
This patch adds a fourth target for classic 68k AmigaOS 3.x systems
(A1200, A4000, accelerated A500/A2000) using:
```
  make -f Make_ami.mak UNM=AmigaOS3 BUILD=normal
```

Changes:

os_amiga.c:
- Add 256 KiB __stack cookie for OS3 (conservative for limited RAM)
- Add safe_Lock() wrapper to suppress "Please insert volume" system
  requesters during path probing (benefits all Amiga targets)
- Suppress system requesters globally in mch_init() via pr_WindowPtr=-1
  (Vim probes many paths at startup; Lock()/Open() on non-existent
  volume names triggers blocking system requesters)
- Fix mch_get_host_name() for OS3 (libnix has no gethostname)
- Fix Delay() prototype for non-LATTICE compilers
- Fix nilfh file handle leak on error exit in mch_check_win()

os_amiga.h:
- Add fchown/fchmod/ftruncate no-op stubs for OS3/libnix

os_amiga_stubs.c (new):
- IM function stubs (referenced by optiondefs.h, no X11 on Amiga)
- mch_rmdir() via AmigaDOS DeleteFile()
- getpwuid()/getgrgid()/getuid() stubs (single-user system)

Make_ami.mak:
- Add AmigaOS3 target with -noixemul, -std=gnu99, -DWORDS_BIGENDIAN

blowfish.c:
- Accept WORDS_BIGENDIAN or AMIGA without requiring HAVE_CONFIG_H

xdiff/xmacros.h:
- Make SIZE_MAX fallback unconditional (not just hpux/VMS)

All OS3-specific changes are guarded by:
  #if defined(__GNUC__) && defined(AMIGA) && !defined(__amigaos4__)

Tested on FS-UAE with Workbench 3.1: 23 automated tests passing.
Binary size: 2.2 MiB with -Os -m68020 -DFEAT_NORMAL.

This is the first modern Vim build for classic 68k AmigaOS since
Vim 5.8 circa 1998.  Vim was originally released on the Amiga
(Fred Fish Disk 591, 1991).

closes: #19840

Signed-off-by: Duncan Bowring <duncan@bowring.us>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-04-03 14:50:07 +00:00
Christian BrabandtandClaude Opus 4.6 6c0321fb9d patch 9.2.0123: GTK: using deprecated gdk_pixbuf_new_from_xpm_data()
Problem:  GTK: gdk_pixbuf_new_from_xpm_data() is deprecated since
          2.44.5, causing build warnings
Solution: Replace XPM icon loading with PNG byte arrays loaded via
          g_memory_input_stream_new_from_data() and
          gdk_pixbuf_new_from_stream(). These APIs are available since
          GLib 2.12 and gdk-pixbuf 2.14 (around 2008) so should be safe
          to use today.

fixes:  #19446
closes: #19583

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-03-08 20:10:03 +00:00
Christian Brabandt 65c1a143c3 patch 9.2.0077: [security]: Crash when recovering a corrupted swap file
Problem:  memline: a crafted swap files with bogus pe_page_count/pe_bnum
          values could cause a multi-GB allocation via mf_get(), and
          invalid pe_old_lnum/pe_line_count values could cause a SEGV
          when passed to readfile() (ehdgks0627, un3xploitable)
Solution: Add bounds checks on pe_page_count and pe_bnum against
          mf_blocknr_max before descending into the block tree, and
          validate pe_old_lnum >= 1 and pe_line_count > 0 before calling
          readfile().

Github Advisory:
https://github.com/vim/vim/security/advisories/GHSA-r2gw-2x48-jj5p

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-02-27 21:04:55 +00:00
Foxe Chen f622af0270 patch 9.2.0043: crypt: Crash when reading an encrypted UTF-8 file
Problem:  crypt: Crash when reading an encrypted  UTF-8 file.
          This happens because readfile() does not account for leftover
          conversion bytes (conv_restlen) when reallocating and moving
          the buffer after decryption (smss2022).
Solution: Include conv_restlen in the offset calculations and memmove
          operations within readfile() (Foxe Chen).

fixes:  #19425
closes: #19453

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-02-21 17:56:48 +00:00
Hirohito Higashi 70a9273dcc Filelist: Fix CI error caused by xdg.vim missing in Filelist
closes: #19466

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-02-18 22:15:13 +00:00
Christian Brabandt e7e21018fc patch 9.2.0: Need a new Vim release
Problem:  Need a new Vim release
Solution: Release Vim 9.2 🎉

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-02-14 15:19:10 +00:00
Daniel Nylander b8c1ef5a64 translation(sv): Add Swedish translation
closes: #18849

Signed-off-by: Daniel Nylander <po@danielnylander.se>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-01-26 19:40:37 +00:00
Mao-Yining a1895b67b7 runtime(tutor): Add Chinese translation for chapter 1
closes: #19189

Signed-off-by: Mao-Yining <mao.yining@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-01-16 18:20:52 +00:00
Foxe Chen a378c722a2 patch 9.1.2072: Socket server has a few minor issues
Problem:  Socket server has some small issues
Solution: Fix issues (see below)

- don't poll current vim instance when using serverlist()
- list the current vim instance in serverlist() (to match X11
  behaviour)
- don't make X11 feature disable socketserver feature
- refactor CheckSocketServer logic and update tests with remote server
  dependency

closes: #19118

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-01-09 17:30:50 +00:00
Foxe Chen 02b8ec7da5 patch 9.1.1984: terminal OSC52 support can be improved
Problem:  terminal OSC52 support to access the clipboard can be improved
Solution: Include and package the optional osc52 package, note: this
          requires a Vim with clipboard provider feature (Foxe Chen).

related: #14995
closes: #18575

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-12-15 21:52:32 +01:00
Peter Kenny c0f2d2f140 patch 9.1.1946: Cannot open the help in the current window
Problem:  Cannot open the help in the current window
Solution: Promote the example from tips.txt to a proper package and
          include the helpcurwin package, add tests for it
          (Peter Kenny)

closes: #18840

Signed-off-by: Peter Kenny <github.com@k1w1.cyou>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-12-02 20:42:53 +00:00
Hirohito Higashi e7c765fe59 patch 9.1.1840: Generating prototype files does not work on all platforms
Problem:  Generating prototype files does not work on all platforms
Solution: Rework prototypes generation using python instead of cproto,
          enable it in CI to test it for each PR (Hirohito Higashi).

closes: #18045

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-10-08 18:31:13 +00:00
Hirohito Higashi 723f34f3de patch 9.1.1832: if_perl: contains references to legacy if_perlsfio
Problem:  if_perl: contains references to legacy if_perlsfio.{c,pro} and
          USE_SFIO
Solution: Remove those references (Hirohito Higashi)

fixes: #18496
closes: #18500

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-10-06 17:59:10 +00:00
RestorerZ fabe9a4c88 nsis: Getting the Vim version number via makensis
closes: #18470

Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-10-03 14:14:19 +00:00
RestorerZ 5178376ebf nsis: delete README.txt from the icons directory
related: #18469

Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-10-03 14:04:57 +00:00
Christian Brabandt fdeb721251 Filelist: include nsis/icons/README.txt again
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-10-03 08:52:25 +00:00
RestorerZ 327683908e nsis: added a note about installer icons in README.txt
This fixes a few issues introduced in commit 3495936:

-  Deleted the icons directory
-  Duplicate files in the icons.zip archive have been removed
-  Added a note about installer icons in README.txt

closes: #18469

Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-10-03 08:00:11 +00:00
Christian Brabandt 34959362b6 Filelist: include nsis/icons/README.txt
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-10-01 21:24:41 +00:00
RestorerZ c55efbb148 nsis: Split gvim.nsi and factor out auxiliary code into auxiliary.nsh
Improves maintainability by separating helper functions and macros from
the main installer script.

related: #18440

Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-09-29 19:55:13 +00:00
Foxe Chen 368710abcf patch 9.1.1784: Wayland code can be improved
Problem:  Wayland code can be improved
Solution: Refactor Wayland Clipboard code (Foxe Chen).

This the second attempt to refactor the Wayland code base:
- Move clipboard code from wayland.c to clipboard.c
- Use C99 bool type
- Properly poll the Wayland display file descriptor
- Instead of checking if the data source is not NULL in order to
  determine if a selection event comes from us, use a special mime type
  to identify selection events coming from ourselves. The problem with
  the previous approach is that race conditions may occur.
- Put the focus stealing code under a new feature "wayland_focus_steal"
- Use ELAPSED_* macros instead of gettimeofday()
- Pass tests
- Reimplement commented out code
- Update docs
- Make Wayland clipboard behaviour more in line with X11 when connection
  is lost
- add missing malloc checks and possible memory leaks + refactored some
  tests.

closes: #18324

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-09-22 19:09:52 +00:00
Christian Brabandt 8429a44a9e patch 9.1.1726: Patch v9.1.1725 causes problems
Problem:  Patch v9.1.1725 causes problems
Solution: Revert the patch for now

fixes: #18187

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-09-02 19:13:31 +02:00
Foxe Chen f50504a87b patch 9.1.1725: Wayland code can be improved
Problem:  Wayland code can be improved
Solution: Refactor Wayland Clipboard code (Foxe Chen)

This refactor makes the Wayland codebase less convoluted:
- Move clipboard code in wayland.c to clipboard.c
- Use C99 bool type
- Properly poll the Wayland display file descriptor
- Instead of checking if the data source is not NULL in order to
  determine if a selection event comes from us, use a special mime type to
  identify selection events coming from ourselves. The problem with the
  previous approach is that race conditions may occur.
- Put the focus stealing code under a new feature "wayland_focus_steal"
- Use ELAPSED_* macros instead of gettimeofday()
- Pass tests
- Reimplement commented out code
- Update docs
- Make Wayland clipboard behaviour more in line with X11 when connection is lost
- add missing malloc checks and possible memory leaks + refactored some
  tests.

closes: #18139

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-09-01 20:52:44 +02:00
RestorerZ e34bdb844f patch 9.1.1675: MS-Windows: Makefiles can be refactored
Problem:  MS-Windows: Makefiles can be refactored
Solution: Refactor using a common tools.mak, make some style changes
          (RestorerZ).

closes: #18060

Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-08-23 17:00:17 +02:00
Girish Palya 7e0df5eee9 patch 9.1.1627: fuzzy matching can be improved
Problem:  fuzzy-matching can be improved
Solution: Implement a better fuzzy matching algorithm
          (Girish Palya)

Replace fuzzy matching algorithm with improved fzy-based implementation

The
[current](https://www.forrestthewoods.com/blog/reverse_engineering_sublime_texts_fuzzy_match/)
fuzzy matching algorithm has several accuracy issues:

* It struggles with CamelCase
* It fails to prioritize matches at the beginning of strings, often
  ranking middle matches higher.

After evaluating alternatives (see my comments
[here](https://github.com/vim/vim/issues/17531#issuecomment-3112046897)
and
[here](https://github.com/vim/vim/issues/17531#issuecomment-3121593900)),
I chose to adopt the [fzy](https://github.com/jhawthorn/fzy) algorithm,
which:

* Resolves the aforementioned issues.
* Performs better.

Implementation details

This version is based on the original fzy
[algorithm](https://github.com/jhawthorn/fzy/blob/master/src/match.c),
with one key enhancement: **multibyte character support**.

* The original implementation supports only ASCII.
* This patch replaces ascii lookup tables with function calls, making it
  compatible with multibyte character sets.
* Core logic (`match_row()` and `match_positions()`) remains faithful to
  the original, but now operates on codepoints rather than single-byte
  characters.

Performance

Tested against a dataset of **90,000 Linux kernel filenames**. Results
(in milliseconds) show a **\~2x performance improvement** over the
current fuzzy matching algorithm.

```
Search String            Current Algo    FZY Algo
-------------------------------------------------
init                          131.759    66.916
main                          83.688     40.861
sig                           98.348     39.699
index                         109.222    30.738
ab                            72.222     44.357
cd                            83.036     54.739
a                             58.94      62.242
b                             43.612     43.442
c                             64.39      67.442
k                             40.585     36.371
z                             34.708     22.781
w                             38.033     30.109
cpa                           82.596     38.116
arz                           84.251     23.964
zzzz                          35.823     22.75
dimag                         110.686    29.646
xa                            43.188     29.199
nha                           73.953     31.001
nedax                         94.775     29.568
dbue                          79.846     25.902
fp                            46.826     31.641
tr                            90.951     55.883
kw                            38.875     23.194
rp                            101.575    55.775
kkkkkkkkkkkkkkkkkkkkkkkkkkkkk 48.519     30.921
```

```vim
vim9script

var haystack = readfile('/Users/gp/linux.files')

var needles = ['init', 'main', 'sig', 'index', 'ab', 'cd', 'a', 'b',
'c', 'k',
    'z', 'w', 'cpa', 'arz', 'zzzz', 'dimag', 'xa', 'nha', 'nedax',
'dbue',
    'fp', 'tr', 'kw', 'rp', 'kkkkkkkkkkkkkkkkkkkkkkkkkkkkk']
for needle in needles
    var start = reltime()
    var tmp = matchfuzzy(haystack, needle)
    echom $'{needle}' (start->reltime()->reltimefloat() * 1000)
endfor
```

Additional changes

* Removed the "camelcase" option from both matchfuzzy() and
  matchfuzzypos(), as it's now obsolete with the improved algorithm.

related: neovim/neovim#34101
fixes #17531
closes: #17900

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-08-12 22:22:52 +02:00
Damien Lejay e32465190c CI: Add Lychee CI test to check for broken links
closes: #17879

Signed-off-by: Damien Lejay <damien@lejay.be>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-08-10 10:28:58 +02:00