Include a build option to explicitly disable Lua bytecode compilation.
This is needed in some situations where the existing checks are not
sufficient (e.g. cross compilation).
Apparently some installations of LuaJIT do not have the "jit.bcsave"
module which is required for pre-compilation. Check that this module
exists before using LuaJIT as luac and if it doesn't, skip compiling
bytecode.
The Lua modules that make up vim.lua are embedded as raw source files into the
nvim binary. These sources are loaded by the Lua runtime on startuptime. We can
pre-compile these sources into Lua bytecode before embedding them into the
binary, which minimizes the size of the binary and improves startuptime.
BREAKING CHANGES
* 32-bit windows builds are no longer provided.
* **build deps**: use libuv 1.42.0 upstream for WIN32 (#15889) (f6c0a37), closes#15889
* removes Windows 7 support
* removes support for mouse and alternate buffers in TUI for Windows 8 and 8.1
* **lsp/diagnostic:** highlight groups and signs for LSP diagnostics renamed (e.g. `LspDiagnosticsDefaultWarning` to `DiagnosticWarn`) (a5bbb93)
* **diagnostic:** make DiagnosticChanged a first class autocmd (#16098) (150a592), closes#16098
* `au User LspDiagnosticsChanged` autocommands are not supported. Use the new first-class DiagnosticChanged event instead.
* **lua**: `register_keystroke_callback` => `on_key` (#15460) (69fe427)
* **note**: this breaking change was included in 0.5.1
FEATURES
* **:source, nvim_exec:** defer script item creation until s:var access (da9b0ab)
* **:source, nvim_exec:** support script-local variables (d4ed51e), closes#13143#11507
* **lua:** add trimempty optional parameter to vim.split (5fa26e2)
* **lua:** add vim.str_utf_{start,end} (#16129) (2230b57)
* **lua:** add vim.str_utf_pos function (d752cbc)
* **lsp:** aggregate code actions from all clients (#15121) (c36df20)
* **api:** add lua C bindings for xdiff (#14536) (3d3c0c6)
* **api:** evaluate statusline string #16020 (9086938)
* **api:** named marks set, get, delete #15346 (49fdc62)
* **api:** nvim_get_chan_info: include "argv" for jobs #15537 (0603eba), closes#15440
* **api:** win_viewport also sends line_count #15613 (086631c)
* **api:** support :terminal input callback in lua (9e41e82)
* **ci:** add backport PR action (#14766) (6cc456d)
* **decorations:** allow more than one stacked highlight in a virt_text (1495d36)
* **decorations:** support virtual lines (392c658) (8d7816c)
* **diagnostic:** move vim.lsp.diagnostic to vim.diagostic and support other sources (a5bbb93)
* **diagnostic:** add 'prefix' option to open_float (#16321) (3c74ba4)
* **diagnostic:** add option to include diagnostic source (d43151e)
* **diagnostic:** allow 'prefix' option to return highlight (cc48837)
* **diagnostic:** allow customized diagnostic messages (#15742) (d999c96)
* **diagnostic:** match(), tolist(), fromlist() #15704 (e61ea77)
* **diagnostic:** update jumplist on goto_next/prev (#15942) (b55944e)
* **diagnostic:** use `scope = 'line'` by default for `open_float()` (#16456) (217f9f8), closes#16453
* **diagnostic:** support severity_sort (32c0631)
* **checkhealth:** provide function for command line completion (8b43b07)
* **f_chansend:** support Blob data argument (7e9ea08)
* **job:** add parameter to close stdin (eb7f24b)
* **keywordprg:** use :terminal for external commands #15398 (a90513c), closes#2995#2761
* **lsp:** add 'focus' option to open_floating_preview (#16465) (fff8827)
* **lsp:** add a registry for client side code action commands (6c03601)
* **lsp:** add client command support to codelens (#15820) (19a77cd)
* **lsp:** add codeAction/resolve support (#15818) (ec4731d)
* **lsp:** add exit_timeout flag (#16070) (80456cf)
* **lsp:** add formatexpr (#16186) (52fa1d2)
* **lsp:** add lsp healthcheck (e268026)
* **lsp:** add per-client commands (#16101) (519d8de)
* **lsp:** add tagfunc (#16103) (f940e7a)
* **lsp:** add warning message for large log size (e6777a7)
* **lsp:** allow configuring zindex for floating windows (#15086) (c487a73)
* **lsp:** allow diagnostics to be disabled for a buffer (#15134) (1aeb945)
* **lsp:** allow root_dir to be nil (#15430) (ff0833c)
* **lsp:** highlight active parameter in signature help (#15018) (af26371)
* **lsp:** improve vim.lsp.util.apply_text_edits (#15561) (41cfba6)
* **lsp:** include original request params in handler ctx (187579f)
* **lsp:** jump to diagnostics by position (#14795) (ea39ff5)
* **lsp:** Make line diagnostics display prettier (e43dbfd)
* **lsp:** make list handlers configurable (#15199) (3e00d4f)
* **lsp:** support textDocument/prepareRename (#15514) (c1f573f)
* **lsp:** use uv_spawn to check if server executable (#16430) (1a60580)
* **lsp:** use vim.ui.select() in codelenses (#16004) (e7ea54a)
* **lsp:** utilize textEdit.range for startbyte in omnifunc (#15957) (e9d6f7c)
* **lua:** add lua-cjson as vendored dependency (8decc9f)
* **lua:** add vim.mpack for msgpack support in lua (eaf661d)
* **lua:** allow passing handles to vim.b/w/t (6c5e7bd)
* **lua:** convert binary string with NULs to Blob (de9df82)
* **lua:** document support of packages with v:lua syntax (9dd371b)
* **lua:** enable stack traces in error output (#16228) (03b805a)
* **lua:** expose lua-cjson as vim.json (30fed27)
* **lua:** make vim.mpack support vim.NIL and vim.empty_dict() (0f59666)
* **match:** allow hl group to be defined after :match command (fca52f5)
* **msgpack:** convert Blobs to BIN strings (af6f454)
* **health:** support lua healthchecks (9249dcd), closes#15632
* **shada:** restore Blob globals properly (ef729fb)
* **terminal:** TermClose: set exit code in v:event.status #15406 (50b30de), closes#4713
* **treesitter:** add next, prev sibling method (1400841)
* **treesitter:** allow to set highlight priority for queries (242608e)
* **ui:** add `opt.kind` to `vim.ui.select` (#15838) (7ae86c1)
* **ui:** add vim.ui.input and use in lsp rename (#15959) (16d4af6)
* **ui:** add vim.ui.select and use in code actions (#15771) (63fde08)
* **vim script:** support calling v:lua as a method (b2994e3)
CHANGES
* **defaults:** auto-create backup dir (4600193)
* **defaults:** inccommand=nosplit #15395 (7215d35)
* **defaults:** set undo points in <C-U> and <C-W> (#15400) (2cb8db3)
* **defaults:** limit syntax cost on CmdwinEnter #15401 (622a36b), closes#6289#6399
* **defaults:** map CTRL-L to search highlights, update diffs #15385 (0aa8128)
* **defaults:** map Y to y$ #13268 (5a111c1), closes#416#6289
* **defaults:** remove 'options' from viewoptions #15397 (3954537), closes#6289
* **defaults:** set hidden (f6c72b7)
* **defaults:** set nojoinspaces (d417e67)
* **defaults:** switchbuf=uselast #15394 (4ba7495)
* **runtime:** add packages as `"/pack/*/start/*"` patterns to &rtp (9df7e02)
* **startup:** load builtin plugins with --clean #15893 (c7a63f3), closes#15605
* **terminal:** set cursorlineopt=number in terminal mode (#15493) (c61a386)
* **window:** skip non-focusable floats for :windo (#15378) (e8631cb)
PERFORMANCE IMPROVEMENTS
* **api:** avoid spurious allocations when converting small objects (705e8f1)
* **highlight:** use a hashtable for highlight group names (bb4b4d7)
* **lua:** optimize vim.deep_equal #15236 (4b452d4)
* **lua:** don't use regexes inside lua require'mod' (ea2023f), closes#15147#15497
* **lsp:** improve json deserialization performance (#15854) (912a6e5)
* **map:** reduce double pointer indirection to single pointer indirection (9e651a9)
* **treesitter:** avoid string lookup of highlight name in hot loop (2460f0a)
FIXES
* **:source, nvim_exec:** handle Vimscript line continuations #14809 (6188926), closes#14807
* **:source:** copy curbuf lines to memory before sourcing #15111 (afdc9e6)
* allow str_utfindex second argument to be an explicit nil (#16448) (512ec46)
* **api:** fix crash after set_option_value_for() #15390 (8b0e6cc), closes#14097#13577
* **api:** fix nvim_buf_set_extmark (2338345)
* **autocmd:** fix conditions in block_autocmds, unblock_autocmds #15372 (29712ae), closes#6279
* **buffer_updates:** cleanup test behavior (54b2c68)
* **buffer_updates:** handle :delete of the very last line in buffer (8335e26)
* **buffer_updates:** handle :sort of already sorted buffer (ef687d3)
* **buffer_updates:** make `lockmarks` not affect extmarks and buffer updates. fixes#12861 (7d171b1)
* **bufupdates:** send correct updates for visual paste (1423146)
* **build:** add an env var to re-enable the colors (5087347)
* **build:** call find_package(Threads) before using its variables (f446ab3)
* **build:** export symbols on Windows (aa644b7)
* **build:** fix build failure in MinGW (0503e17)
* **build:** make vendored libmpack and libmpack-lua build properly (2a08aef)
* **channel:** throw error if sending to internal channel w/o terminal (3b89fee)
* **checkhealth:** duplicate checks if module name has "-" #15935 (a36c6e5)
* **checkhealth:** mitigate issues with duplicate healthchecks #15919 (acd5e83), closes#15259
* **ci:** disable broken test on openbsd on all CI due to resource constraints (a3e2636)
* **ci:** re-run GHA for ready_for_review events (#15377) (c6ef956)
* **decorations:** crash when :bdelete (extmark_free_all) after clear_namespace (cd353aa), closes#15212
* **defaults:** "syntax sync maxlines=1" on CmdwinEnter #15552 (5f8518b), closes#15401
* **defaults:** do not map Y in visual-mode #15387 (54726e8), closes#13268
* **diagnostic:** allow floats to be focusable (#16093) (427bac6)
* **diagnostic:** change default severity_sort order (938ed45)
* **diagnostic:** clamp line numbers in setqflist and setloclist (5b0d8f8)
* **diagnostic:** correctly handle folder level diagnostics (f87779a)
* **diagnostic:** deepcopy diagnostics before clamping line numbers (2abc799)
* **diagnostic:** do not focus floats in goto functions (#16433) (b5b025f)
* **diagnostic:** don't clamp line numbers in setqflist (0341c68)
* **diagnostic:** don't return nil when callers expect a table (#15765) (057606e)
* **diagnostic:** don't use nil col if missing from qflist (#16357) (5e46f64)
* **diagnostic:** error on invalid severity value (#15965) (d5dd0aa)
* **diagnostic:** fix navigation with diagnostics placed past end of line (34bb5fa)
* **diagnostic:** fix option resolution in open_float (#16229) (fd34784)
* **diagnostic:** fix wrong data type in setqflist() (3fd1450)
* **diagnostic:** get line count per buffer when clamping (c59f200)
* **diagnostic:** handle an unknown or missing client (#16242) (1fdbd29)
* **diagnostic:** handle diagnostics placed past the end of line (#16095) (a2994c8)
* **diagnostic:** make set() go through cache when calling show() (d93f47d)
* **diagnostic:** only update decorations for loaded buffers (#15715) (924e8e4)
* **diagnostic:** preserve fields from LSP diagnostics via user_data (#15735) (17b7968)
* **diagnostic:** remove useless highlight links (#15683) (c13242c), closes#15585
* disable clipboard when test registers (dd63d93)
* **docgen:** add tagfunc.lua (0746f00)
* **doc:** various fixes#15604 (4eb1ebb)
* **eval:** add the vimscript-1 feature to has() (18b32fc)
* **eval:** checking for a non-empty string is too strict (#15987) (1dbbaf8)
* **eval:** fix has('wsl') #16153 (16d06fa), closes#12642#16143
* **eval:** fixup for empty modifier in fnamemodify (#16368) (a7ad509), closes#16367
* **extmark:** fix missing virt_lines when using id param of set_extmark (995dbd2)
* **extmarks:** splice extmarks on nv_Undo #15920 (e069361)
* **fileio:** replace characters over INT_MAX with U+FFFD (#16354) (a2e5c2f), closes#11877
* **float:** fix potential heap corruption in win_redr_border (de670f3)
* **float:** redraw if w_border_adj changed (7ff1bc1)
* **heath/provider.vim:** using list as string #16007 (5365f24), closes#15988
* **highlight:** remove syncolor.vim, always include syntax colors (9afa0d2), closes#15176#12573#15205
* **inccommand:** ignore trailing commands only for *previewed* command #15638 (1f8c91b), closes#8796#7494
* include ci/ in exported tarball (d6f03aa), closes#15856
* **input:** never reinterpret unmapped ALT- chrods in Terminal mode (#16222) (5ce35ab)
* **input:** resolve isolated (non-ALT/META) mappings #13109 (c4857b6), closes#13042#13086#15869
* **jobwait:** always drain process event queues #15402 (3c081d0), closes#15349
* **lsp_spec:** tests depended on previous session (069d1de)
* **lsp:** accept file URIs without a hostname (a2c2a08)
* **lsp:** add done flag to messages returned in util.get_progress_messages() (#15985) (45fa70a)
* **lsp:** add placeholder cancel function (#16189) (4da0351)
* **lsp:** add textDocument/prepareRename to capability map (#15961) (fcc11d5), closes#15899
* **lsp:** adjust legacy show diagnostic functions to use correct scope (#16106) (dc6c9fe)
* **lsp:** allow diagnostic.clear to accept nil bufnr (#15137) (4ed2d4f)
* **lsp:** avoid duplicates in client attached buffers (#16099) (c5525f2)
* **lsp:** avoid serializing boolean as key (#15810) (96614f8)
* **lsp:** change rpc start notify level to warn (#16467) (04c7b55)
* **lsp:** change signature of buf_highlight_references (#16345) (eb3d591)
* **lsp:** correctly parse LSP snippets #15579 (516775e), closes#15522
* **lsp:** default to UTF-16 in make_position_params (2e3a474)
* **lsp:** do not index nil client in progress (#16262) (8f31b21)
* **lsp:** do not invoke handlers for unsupported methods (#15926) (d288daa)
* **lsp:** don't update active_clients on exit_timeout (#16192) (98f5782)
* **lsp:** enable additional capabilities (#15470) (5d63354)
* **lsp:** ensure buffers are re-attached on rename (#16266) (ee3a58d)
* **lsp:** Ensure users get feedback on references/symbols errors or empty results (256570a)
* **lsp:** expose ContentModified error code to callbacks (#15262) (3f09732)
* **lsp:** fix cursor row after textEdits (#16038) (bd2f61c)
* **lsp:** gracefully handle nil workspaceFolders (#16284) (0ecc58c)
* **lsp:** guard textDocument/codeAction command logic #15769 (433bda4)
* **lsp:** improve symbols_to_items performance (#16197) (5ad15c9)
* **lsp:** Include client name in handler error messages (#15227) (24f2b9e)
* **lsp:** pass bufnr for async formatting (#15084) (c31bc6e)
* **lsp:** persist diagnostic config for clients (bcc9ba5)
* **lsp:** prevent double <text> for cached plaintext markup (910967e)
* **lsp:** restore diagnostics extmarks on buffer changes (#15011) (77b33e4)
* **lsp:** rewrite incremental sync (#16252) (2ecf0a4)
* **lsp:** send buffer contents joined on fileformat-specific linebreak (#16334) (134a638)
* **lsp:** send textDocument/didChange for each buffer (#16431) (3451121)
* **lsp:** support duplicate params in signature help (#15032) (9132b76)
* **lsp:** update lsp-handler signature in call_hierarchy (#15738) (8164adc)
* **lsp:** update workspace/applyEdit handler signature (#15573) (3f526fe)
* **lua:** fix vim.deepcopy for metatables & cycled tables (#16435) (eb876a0)
* **lua:** preserve argument lists which are not lists (6896d22)
* **man.vim:** ensure buftype=nofile after :tag or :stag #15675 (29bc648), closes#15650
* **man.vim:** filetype=man is too eager #15488 (2548a9e), closes#15487#15487
* **mouse:** fix mouse drag positions on multigrid #12667 (0dcfd0e), closes#15091
* **mouse:** correct dragged position in composed layout (810da1a)
* **multigrid:** mouse events crash neovim (28ac6c0)
* **nvim_open_win:** crash if autocmds delete buffer/window #15549 (0c06da1), closes#15548
* **options:** using :set fillchars should clear local value (7528bce)
* prevent K_EVENT from stopping Select mode CTRL-O #15688 (5f144ef)
* **provider:** compare versions as number, not string (python 3.10 support) #15937 (e16adbf), closes#14586
* **screen:** make display_tick monotonic up to 2^64. fixes#16152 (9e88c9c)
* **screen:** missing search highlights when redrawing from timer #15380 (db695cc), closes#13074#14064
* **shared:** do not treat empty tables as list in deep extend (#15094) (526fc60)
* **sign:** reset auto sign column with minimum in float win minimal style (c8f57f6)
* **startup:** init.lua: set $MYVIMRC to absolute path #15748 (c76cddf)
* **termdebug:** replace mapset with nvim_set_keymap (#15699) (4d7dcbe)
* **termdebug:** replace term_getline with getbufline #15598 (11289ad)
* **terminal:** close without ! if the job is stopped (55defa1), closes#4683
* **terminal:** free terminal if close_buffer() closes a closed terminal (#16264) (14def4d)
* **test/dumplog:** tostring(rv) before formatting as string (ddaa0cc)
* **tests:** use isolated XDG_DATA_HOME in startup tests (8e663e2)
* **treesitter:** do not map hl_group when no mapping is set (f489d98)
* **treesitter:** run predicates more often in iter_matches (458f2aa)
* **tui:** extend smglr ignores to smglp and smgrp (#16239) (3ba800f)
* **tui:** remove obsolete $NVIM detection #15791 (4414584), closes#12937#11390
* **tutor:** formatting, layout #15098 (c52ec8f), closes#15088
* **ui:** use nowait for q mapping in floating window (#16427) (c132144)
* **v:lua:** fix emsg when calling v:lua directly (da9005a)
* **vim-patch.sh:** run nvim with -u NONE -n #16179 (97ae0ab)
* **vim.opt:** vimL map string values not trimmed (#14982) (4906156)
* **window:** win_close from other tabpage #15454 (90b2da1), closes#15313
* **windowing:** positioning of relative floats (9065730)
* build(cmake): update cmake min version to 3.10
* ci: test cmake minimum required version
* build(cmake): remove some legacy includes
* Since version 3.5 cmake_parse_arguments is implemented natively.
This release represents ~4000 commits since v0.4.4, the previous
non-maintenance release. Highlights include builtin support for LSP, new APIs
for extended marks (with byte resolution tracking of changes) and buffer
decorations, as well as vast improvements to lua as a plugin and configuration
language. Experimental support for tree-sitter as a syntax engine is also
included, building on the new core APIs for byte tracking and decorations.
FEATURES:
New API functions:
nvim_exec: execute multiline vim script blocks
nvim_get_hl_id_by_name: Gets a highight definition by name
nvim_exec_lua: new name for nvim_execute_lua
nvim_notify: Notify the user with a message
nvim_get_runtime_file: Find files in runtime directories
nvim_get_all_options_info: Get option information for all options
nvim_get_option_info: Get option information for one option
nvim_echo: Echo a message with highlights
nvim_open_term: Open a virtual terminal in a buffer
nvim_chan_send: send data to a channel. (like chansend() but supports lua strings)
nvim_set_decoration_provider: callback driven decoration API for a namespace
nvim_buf_set_text: Set/replace a character range in a buffer
nvim_buf_delete: Delete the buffer. |:bwipeout|
nvim_buf_get_extmark_by_id: Returns position for a given extmark id.
nvim_buf_get_extmarks: get extmarks in traversal order.
nvim_buf_set_extmark: Creates or updates an extmark.
nvim_buf_del_extmark: Removes an extmark.
nvim_buf_call: call a function with buffer as temporary current buffer
nvim_win_hide: Closes the window and hide the buffer it contains |:hide|
nvim_win_call: Calls a function with window as temporary current window.
New UI events:
redraw.screenshot
redraw.win_viewport
Lua:
767cd8b17#12235 startup: add init.lua as an alternative user config
687eb0b39#14686 feat(startup): Source runtime/plugin/**/*.lua at startup
#14686 runtime: allow lua in various runtime search paths such as
syntax/ ftdetect/ indent/ ftplugin/ compiler/ colors/
43956dea5#13479 lua: Add vim.opt and fix scopes of vim.o
1407899c3#12268 lua: Add buffer, window and tab accessors
be662fe5c lua: vim.wait implementation
2b663c061#14213 viml: embed Lua syntax highlighting
901dd79f6 feat: add completion to ':lua'
82688973 lua: complete methods in metatables
342148525 runtime: propagate lua parsing errors while using "require"
aaca2c1c4#13276 feat(lua): improve error message to make it actionable
c60c7375f startup: handle autoload and lua packages during startup
3ccdbc570#12536 lua: add vim.register_keystroke_callback
971a191c4 lua: Add ability to pass lua functions directly to vimL
91e41c857#12401 lua: add vim.highlight.range
f2894bffb#12279 lua: Add highlight.on_yank
ae5bd0454#11969 lua: add tbl_deep_extend
ea4127e9a lua: metatable for empty dict value
dab40f43b Add v:lua.func() vimL syntax for calling lua
678a51b1d Lua: vim.validate()
474d0bcbf lua: vim.rpcrequest, vim.rpcnotify, vim.NIL
8ee7c94a9 lua: add vim.fn.{func} for direct access to vimL function
d0d38fc36#11442 Lua: vim.env, vim.{g,v,w,bo,wo}
Tree-sitter:
Note: tree-sitter is considered experimental for 0.5. There's remaining
bugs for buffer parsing, as well as known performance issues for
large files and injected (nested) languages.
e93342629#10124 Tree-sitter API for lua
440695c29 tree-sitter: implement query functionality and highlighting prototype
8bea39f37 feat(treesitter): allow injections to be configured through directives
929f19414 feat(treesitter): add offset predicate for language injection
cd75d3289#14200 feat: treesitter checkhealth
1a631026a feat(treesitter): add language tree
d3f544002 treesitter: runtime queries
3c5141d2c#13008 treesitter: add string parser
9437327d5 treesitter: use new on_bytes interface
e4b5efa51 treesitter: use decoration provider API
d6209a7b8 fix: Add a test and it is so pretty
836c31032 feat(ts): bump tree-sitter to v0.20.0
LSP client:
00dc12c5d#11336 lua LSP client: initial implementation
d5aaad14e#11430 Followup improvements to LSP
ee7ac469c#11578 LSP: Use async completion for omnifunc.
070bd3ea2#11604 LSP: shrink API, improve docs
25afa10f9#11669 Merge 'LSP: differentiate diagnostic underline by severity'
e956ea767#11777 LSP: show diagnostic in qf/loclist
dd8b29cfe#11838 LSP: set InitializeParams.rootPath value
0c5d2ffeb#11837 Merge 'LSP: fixes, improve test visibility'
ca8699378#11638 LSP: implement documentHighlight
220a2b05c LSP/references: Add context to locations returned by server
ccb038dc6 LSP/completion: add textEdit support
da6f38ab3#12313 LSP: Add workspace.applyEdit client capabilities
f559e5249#11607 LSP: Add textDocument/codeAction support
0d83a1c43#12638 LSP: Feature/add workspace folders
fd507e278#13641 LSP: window/showMessageRequest
e467d2939 LSP: Move workspace/configuration handler from nvim-lspconfig to core
2bdd553c9 feat(lsp): Add codelens support
UI:
f8134f2fd screen.c: remove fold_line special case
c146eddc8 experimental support for per-window color schemes
a1508c9f6 nvim__screenshot (dump TUI state to file)
08fe10010 terminal: enable pass through indexed colors to TUI in rgb mode
5a8569942 tests/ui: make screen.lua use "linegrid" representation internally
8fe19d9d8 screen: make ui_compositor aware of the intended size of a float
54ce1010e extmark: add new flexible "decorations" abstraction
4781333a7 decorations: allow virt_text overlay at any column
bdebe8516 decorations: use extmark column adjustments for buffer highlights
7b488314d decorations: Allow highlights beyond end of line hl_eol
425bc438a decorations: add additional styling of virt_text overlays
edb5864a2 floats: z-index
243820ebd floats: add borders (MS-DOS MODE)
5b6edc852 feat(float): add rounded borders preset
4a36ec6da#14310 float: add "solid" border style
vim patches:
around ~1000 vim patches and runtime updates got merged. Hooray!
Changes include improvements to quickfix, prompt buffers, incsearch,
display of search counts, and much much more.
various features and changes:
858c05613#12809 Support for :perl, :perlfile, :perldo and perleval()
bc86f76c0 api/buffer: add "on_bytes" callback to nvim_buf_attach
19b623708 jobstart now supports env/clear_env
ef7c6b972 Support specifying "env" option for termopen()
7c4f34966#13287 switch from travis to github actions
24db59ca8 feat: implement BufModified autocmd
b83d8223f implement Scroll autocommand
8caf84130 Lower "closed by the client" message level to INFO
7de276b87 bump libvterm to 0.1.4
097ec71bd#14096 aarch64/linux: fix build by updating LuaJIT
bd5f0e969#12531 support autoread using tui focus tracking
8a1276005#12382 Add v:event.visual during `TextYankPost`
802f8429d api(nvim_open_win): add "noautocmd" option
FIXES:
21444552c BugFix(clipboard): Fix block paste not working properly
01493e799#14413 api: fix nvim_exec() silencing behaviour
9699f3be1 fix(doc): Add '/site' to stdpath('data') example in `:help 'rtp'`
581b2bcde screen: fix problem with p_ch
eae4b1e5c luaref: fix leaks for global luarefs
409b2711f fix: segfault when pasting in term with empty buffer
cf6c23fb0#14273 fix plenty of errors discovered by clang
21035cff9#14500 fix plenty of errors discovered by coverity
bca19138b#13987 tui: fix possibility of evaluating uninitialized variables
9f2335937 fix_cursor: do not change line number when edit will not impact cursor row
33f92fe02 fix(pty): Always use $TERM from the job's env dict
6249059d4 checkhealth: fix terminfo problems on Windows
397be5d38#12811 UI: fix cursor not displayed after hiding and un-hiding
87afc9031 screen.c: fix an issue with wrap and folds
b419e39a2 screen.c: fix last character on foldtext
2ea312769#13688 screen.c: fix display of signcolumn=auto in diffs
c2d288e29 Fix screen terminal family issues
314b222c2#14127 Fix click on foldcolumn with vsplit
e65d0e53b vim.fn: throw error when trying to use API function
This is a fixup for #14915, which used the above-mentioned call to
restore the behavior of the pre-release version of tree-sitter to
that of 0.19.5. However, this function was introduced after 0.19.5,
breaking distro builds that link against 0.19.5 instead of the tag
specified in neovim's build script.
Now the function should only be called when it is available _and_
needed. Once tree-sitter is bumped to 0.19.6 (when this is released),
this guard can be removed again.
Fixes#14923 (among others)
`find_package(Foo ...)` expects to find a file FindFoo.cmake and the
resulting variables to be named `Foo_...`. If those don't all match up,
then the detection does not work properly.
Closes#13262
Problem: On Windows with the MSVC build, gettext-translation
"Questa è già la" displays as "Questa <e8> gi<e0> la".
Solution: Fix iconv detection iconv when building gettext.
So HAVE_ICONV is correctly defined when building nvim.
* fix gettext mb chars on MSVC
* fix libintl detection failure on MSVC
fixes#11749
This is relevant for when using `USE_BUNDLED_LUAJIT=ON` with
`USE_BUNDLED_LUAROCKS=OFF`, and then building without the necessary modules
being installed/activated there yet: it would check the other (system) "lua"
interpreters also, and in case all failed keep the `LUA_PRG` in the cache for
the last failed entry - making it not re-check the previous ones on the next
build (after you might have activated your custom LuaRocks installation).
Only setting LUA_PRG if the check was successful handles the case better where
it is configured already - we should not try to re-configure it then.
This avoids invoking CMake after a new commit, which might take 15s on
some systems.
Skipped on CMake < 3.2.0 (missing BYPRODUCTS support).
Co-Authored-By: Justin M. Keyes <justinkz@gmail.com>
This release represents ~2700 commits since v0.3.4, the previous
non-maintenance release. Besides the highlights listed below, this
release features vast improvements to documentation, internal subsystems
and test/CI infrastructure, and 700+ patches merged from Vim.
FEATURES:
New API functions:
nvim_create_buf: create various kinds of buffers
nvim_get_context, nvim_load_context
8e6b0a73c9#10619 API: Context: save/restore/inspect editor state
nvim_input_mouse: perform mouse actions
nvim_open_win: create floating windows (and external, for supporting UIs)
nvim_paste: paste text at cursor
nvim_put: put text at cursor
nvim_select_popupmenu_item: perform popupmenu actions
nvim_set_keymap: create/delete mappings
nvim_set_vvar: set v: variables
nvim_ui_pum_set_height
nvim_ui_try_resize_grid
nvim_win_close: close windows
nvim_win_get_config: get window configuration
nvim_win_set_config: reconfigure windows
New UI events:
redraw.grid_destroy
redraw.hl_group_set
8a3f8589a3#10504 UI/highlight: expose builtin highlight groups using hl_group_set event
redraw.msg_clear
redraw.msg_history_show
redraw.msg_ruler
redraw.msg_set_pos
redraw.msg_show
redraw.msg_showcmd
redraw.msg_showmode
redraw.win_close
redraw.win_external_pos
redraw.win_float_pos
redraw.win_hide
redraw.win_pos
API
f5c56f03bb#9170 API/Lua: nvim_buf_attach: support Lua callback
82d48c0dab#9896 API: emit nvim_error_event on failed async request
b9ad12e6c2#9992 UI/nvim_ui_attach(): add `override` option
3d1ed7c959#9993 UI/ext_messages: learn more message kinds
8ed54bbec3#9547 proper multiline error message for rpcrequest, API wrappers
Lua
This release introduces "Nvim-Lua standard library". See ":help lua-stdlib".
89d7e24891#9463 Lua stdlib: vim.inspect, string functions
8e941c59ec#9740 Lua: generate documentation from docstrings
1cbe014569#9301 lua/stdlib: Introduce vim.shared
c83926cd0a#10123 Lua: introduce vim.loop (expose libuv event-loop)
81e1dbca99#10120 Lua: vim.schedule(cb)
1f54f68732#10688 Lua: minimal UTF-16 support needed for LSP
6fb0020df4#10513 Lua encoding support
c0993ed343 Lua: support getting UTF-32 and UTF-16 sizes of replaced text
b0e26199ec Lua: add {old_byte_size} to on_lines buffer change event
UI:
- The Nvim 0.3.4 UI protocol introduced line-based updates instead of
legacy char-based updates. Nvim 0.4 continues to evolve the UI
protocol. See ":help ui". Legacy UI clients are supported. See
":help api-contract".
9a1675b065#6619 Floating windows
- Can be (re)positioned, anchored, external.
- Are real windows showing real buffers. No shortcuts, hacks, or compromises.
- Support all features and API of normal windows, plus more.
6427894d89#8455 Multigrid: "windows drawn on separate grids"
- Windows are logically isolated internally.
- Windows are sent to UIs as distinct objects, so that UIs can control
layout instead of being stuck with the classic TUI layout.
- Per-window font-size, dimenions, line-spacing.
- Compositor: Internal subsystem for composing grids.
3855204f58#6917 UIEnter, UILeave
788bcbba24#9923 ui: ":syn blend=", 'winblend'
7cf7c0a0b8#9575 ui: 'redrawdebug' option for flexible debugging of redrawing
5c836d2ef8#9607 wildoptions=pum (enabled by default)
37f8df8824#9571 UI: 'pumblend' option for semi-transparent popupmenu
c403a95a52#9446 Visual: highlight char-at-cursor
- Traditionally Vim's visual selection does "reverse mode", which
perhaps conflicts with the non-blinking block cursor. But
'guicursor' defaults to a vertical bar for selection=exclusive, and
this confuses users who expect to see the text highlighted.
:terminal
fc27dc98d7#8550 autocmds: TermEnter, TermLeave
d13803f64f#9810 keymap, terminal: more keycodes
3b56f59532#9535 :terminal : Fix F1-F4 key codes
2d4a37ebab#10370 :ls : show "R", "F" for terminal-jobs
fd0fd752c8#9966 terminal: swap priority of terminal, editor highlights
7bb858c39c#9494 libvterm 0.1
TUI
3afb397407 syntax, TUI: support "strikethrough"
ccbcd390d4#9408 TUI: "title stacking" unconditionally
298608f88c#9509 TUI: detect background color, set bg=dark/light
42f492ac99#9097 TUI: handle Smulx extension capability (extended underline)
424ddd01f5#10205 TUI: support rgba background detection
9b4383261a#9601 TUI: italics in tmux, Terminal.app
f6fb370b1b#9793 keymap: support more (keypad) keycodes
3340e08bec#9423 TUI: Konsole DECSCUSR fixup
:checkhealth
d0fd66ba82 health/provider.vim: check curl HTTPS support
c38862acea#10490 checkhealth: try yarn if npm is missing
43356a43d0#9929 health: check if tmux enabled true colors
ec5a4d862d#9548 checkhealth: validate locale
providers (clipboard, python, etc.):
96be8a2c4d#10161 Allow reloading providers (useful for UIs/clients)
db3c797c6b#9487 provider: improve error message if provider is missing
Various:
36762a00a8#9295 signs: support multiple columns
801fe799ff#10382 eval: wait() (wait for any condition)
9df3a676e7#10400 MsgArea highlight; message grid
a9bea8c104#10790 keymap: allow modifiers to multibyte chars, like <m-ä>
25e0a449bb#10878#4448 paste: redesign (10x+ faster pasting; extensible vim.paste Lua hook)
ef5037e7f6#9706 autocmd: introduce "++once" feature
175398f216#9616 add CompleteChanged autocmd
7fcf2f926f#9717 TextYankPost: add v:event["inclusive"]
3a699a790c#8364 termdebug.vim plugin
ca1ce59025#9709 performance: use os_copy to create backups
ed0e96cd28 man.vim: set 'linebreak'
70f6939fd4#9564 events: add "Signal" event
f89d0d8230#9568 inccommand: auto-disable if folding is slow
FIXES:
41bb68b8e8#10584 process_stop: uv: do not close stdin first/explicitly
e50aa2a6c6#10117 normal: Don't exit CTRL-O mode after processing K_EVENT
95fa71c6d2#9504 :recover : Fix crash on non-existent *.swp
5a836d4767#9507 screen: don't unconditionally clear messages on window scroll
149dcbf2c7#10021 channel: refactor events, prevent recursive invocation of events
d19ff73b39#10107 Fix multiple c_CTRL-D showing statusline
b65a7b7f66#10103 Fix wildmode=list,full and display+=msgsep interaction
0be6d3c86f#9634 fsync: Ignore ENOTSUP. Fix writing to SMB.
b247c6fd22#10025 kbtree: pointer UB and unitialized value fixes
018e0d5a19#9643 API/buffer-updates: always detach on buf-reload
400ee59247#9961 API: fix cursor position when lines are added
769f44e918#9911 win/defaults: Use "…/nvim-data/site" in 'runtimepath'
83d571653b#9911 spellfile.vim: store files in stdpath('data')
8dbf23181a#9887 RPC: conform message-id type to msgpack-RPC spec
5f996e36d1#9894 options: properly reset directories on 'autochdir'
4c4a570156#9807 various CursorMoved fixes
943bedfc86#9853 event-loop: do not set CA_COMMAND_BUSY
9d207fd876#9693 dictwatcheradd(): support b:changedtick
2d50bf3498#9789 mac: fix locale detection
c5631338b1#9754 :mksession : restore tab-local working directories
092e7e6c60#9703#9703 executable(): return false if user is not owner
11a481f711#9686 env var fixes/improvements
8e54847fdf#9666#7920 os/env: Fix completion of multibyte env var names
519382646b#10468 Fix is_executable_in_path() on Windows
8eaa452073#9516 win: exepath(), executable() fixes
f55c1e4233#10544 reltimefloat(): allow negative result
b08dc3ec19#10561 win: jobstart(), system(): $PATHEXT-resolve exe
7cc2b723d4#10392 TextYankPost: spurious/too-early dispatch during delete
6e01ed6a4c OpenBSD: stop jobs/processes properly
58dd5fcc01#10522 jobstop(): close channel before process_stop()
83632022f8#10959 improved resize behavior (all UIs)
c6eb1f42be#10830 API: fix nvim_command_output buffer overflow
cbfd18c85a#10763 startup: handle 'guicursor' after user config
b8f2436feb#10915 jobwait(): fix race if job exits quickly
2fafed6bb8#10765 clipboard: handle/avoid SIGTERM with previous owner
8aca932aa0#9954 clipboard: setreg("*") with clipboard=unnamed
3f10c5b533#9480 performance: clipboard/macOS: assume that pbcopy works
48efafc81c#10398 screen: disable redrawing inside VimResized
5e4b93a38f#10389 API/Lua: make nvim_execute_lua use native lua floats, not special tables
8c6f5b7f92#9934 Spurious quote mark in command line when typing <C-R>
a8a38f3465 Lua 5.2/5.3 compat
:terminal
47b7b471fa#10700 :terminal : update buffer when switching tabpage
5225c1ec30#9605 terminal: Fix potential invalid local 'scrollback'
894f6bee54#8325 :terminal : set topline based on window height
8171e96b96#9551 Improve :terminal resize
d928b036dc#9856 :stopinsert should leave terminal-mode
3f71218505#9926 :terminal : fix: Using `:stopinsert` while in normal mode
5020daa6e5#9883 ui/terminal: make terminal state redraw like any other state
TUI:
9f19e8d29d#9443 TUI: Do not disable BCE for builtin terminfos
a4076e5dcf#9474 win/TUI: fix text overrides line numbers
533d4a36ec#9645 TUI: do not resize host-terminal on startup
b51e5d8b8d#9688 tui_tk_ti_getstr: handle weird value
1f5eac1115#10785 TUI: fix data-race during resize
CHANGES:
9697c7f56a#8194 fix menu_get()
7f2e43c637#9520 improve Lua error messages
c2343180d7#9526 Remove jemalloc
baf93d9606#9581 UI: always use concrete colors for default_colors_set
91688b4883#9563 defaults: set 'scrollback' to -1 by default
bb24fec333#10136 defaults: exclude "S" from 'shortmess'
ddd0eb6f51#8540 startup: -es/-Es (silent/batch mode): skip swapfile
35362495c9#9805 jumplist: avoid extra tail entry
939d9053bd#10573 channels: reflect exit due to signals in exit status code
45c34bd84a#10689 :doautocmd : Never show "No matching autocommands"
fb19aeeb33#9110 API: make nvim_win_set_option() set window-global, not buffer-local
abfc8b3257#10778 emsg_multiline: log Vim errors
06d9cc734b#10657 exists("$FOO"): return false for empty env var
6616d1d3e5#10743 win/env: Vim-compat: Empty string deletes env var
7d664837e1#10662 win: expand nested env var in $HOME
2816bc8620#8349 edit.c: Disable indent during completion
58f505dc74#9829 startup: remove TUI init special-case
Historically Vim/Nvim does backflips to handle input and show messages
before a UI is available. This logical contradiction was already fixed
for remote UIs (#9024c236e80cf3). Fixing it also for the TUI avoids
problems on Windows, simplifies the logic, and avoids races like #9959.
libvterm now advertises a version number, so we can specify the minimum
required version. And this is necessary because there were breaking
changes in its API.
ref 2a590e2293
ref https://github.com/neovim/neovim/issues/10991
We are using "LIBFOO" prefixes for `LIBFOO_INCLUDE_DIRS` etc, and
therefore need to use this for the PREFIX with LibFindMacros also, so
that `"${${PREFIX}_FIND_VERSION}"` gets handled there properly.
The alternative would be to either manually handle/set the upper/mixed case
variants of those variable additionally, which is not as easy.
Keeping the existing names is useful for packagers.
Before this the version requirements with
`find_package(Unibilium 2.0 REQUIRED)` was not handled (a49cf5126), and
it prepares for using a required version with libvterm
(initially/wrongly ported in 1896c72a5).
This avoids errors when using "make lint", but "flake8" is not
available. We do not want to install it then via third-party.
On CI "make pylint" is used explicitly.
* build: require unibilium>=2.0
This also ports FindUnibilium to LibFindMacros, which was planned
anyway, and makes the version check easier.
With an older Unibilium our fallback code in `terminfo_from_builtin`
will not work (because it assumes the new data structures from 2.0.0 [1]),
and nvim would crash later because of `ut` being NUL.
1: 42f3cdd284
Might not be necessary anymore, at least it is fine on gcc 9.1, and
since the bug is still open/unresolved, something else might have fixed
it.
Ref: 4b81f627c
Ref: #7083
`check_c_compiler_flag(-Wno-doesnotexist …)` is successful always,
apparently for all "no-" prefixes.
Therefore check for the flag itself (without "no-" prefix).
I am seeing a warning if the source fails to compile:
> cc1: warning: unrecognized command line option ‘-Wno-meh’
Which is turned into an error with `-Werror`:
> cc1: error: unrecognized command line option ‘-Wno-meh’ [-Werror]
But when it compiles successfully, there is no warning/error.
gcc (GCC) 9.1.0.
* build: FindLibIntl: fix warning about CMP0075
The common pattern elsewhere to set this only during the check, and here
it was not unset, resulting in a warning later (on Alpine 3.10):
-- Found Iconv
-- Looking for pthread.h
CMake Warning (dev) at /usr/share/cmake/Modules/CheckIncludeFile.cmake:80 (message):
Policy CMP0075 is not set: Include file check macros honor
CMAKE_REQUIRED_LIBRARIES. Run "cmake --help-policy CMP0075" for policy
details. Use the cmake_policy command to set the policy and suppress this
warning.
CMAKE_REQUIRED_LIBRARIES is set to:
/usr/lib/libintl.so
For compatibility with CMake 3.11 and below this check is ignoring it.
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindThreads.cmake:105 (CHECK_INCLUDE_FILE)
CMakeLists.txt:482 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.
-- Looking for pthread.h - found
* build: remove lists / REMOVE_ITEM around check_c_source_compiles