summaryrefslogtreecommitdiffstatshomepage
path: root/src/nvim/runtime.c
AgeCommit message (Collapse)AuthorFiles
2026-04-24fix(path): normalize path slashes on Windows #37729tao1
Problem: On Windows, path separators may become inconsistent for various reasons, which makes normalization quite painful. Solution: Normalize paths to `/` at the entry boundaries and always use it internally, converting back only in rare cases where `\` is really needed (e.g. cmd.exe/bat scripts?). This is the first commit in a series of incremental steps. Note: * some funcs won't respect shellslash. e.g. `expand/fnamemodify` * some funcs still respect shellslash, but will be updated in a follow PR. e.g. `ex_pwd/f_chdir/f_getcwd` * uv's built-in funcs always return `\`. e.g. `uv.cwd/uv.exepath` Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
2026-04-14build: update clang v21, fix warningsdundargoc1
- `src/nvim/ex_cmds_defs.h`: use "U" instead of "u" per `readability-uppercase-literal-suffix`
2026-04-06vim-patch:9.2.0293: :packadd may lead to heap-buffer-overflowzeertzjq1
Problem: :packadd may lead to heap-buffer-overflow when all entries in 'runtimepath' have the same length (after 9.2.0291). Solution: Check for comma after current entry properly (zeertzjq). related: vim/vim#19854 closes: vim/vim#19911 https://github.com/vim/vim/commit/bc182ae56eb71b94738aaa3bd607c32f584fc200
2026-04-06vim-patch:9.2.0291: too many strlen() callszeertzjq1
Problem: too many strlen() calls Solution: refactor concat_fname() and remove calls to strlen() (John Marriott) Function `concat_fnames()` can make up to 5 calls to `STRLEN()` (either directly or indirectly via `STRCAT()`). In many cases the lengths of arguments `fname1` and/or `fname2` are either known or can simply be calculated. This Commit refactors this function to accept the lengths of arguments `fname1` and `fname2` as arguments. It also adds new argument `ret` to return the resulting string as a `string_T`. Additionally: - function `add_pack_dir_to_rtp()` in `scriptfile.c`: Use a `string_T` to store local variables `new_rtp` and `afterdir`. Replace calls to `STRCAT()` with calls to `STRCPY()`. Change type of variable `keep` to `size_t` for consistency with other lengths. - function `qf_get_fnum()` in `quickfix.c`: Use a `string_T` to store local variables `ptr` and `bufname` - function `qf_push_dir()` in `quickfix.c`: Use a `string_T` to store local variable `dirname`. Replace call to `vim_strsave()` with `vim_strnsave()`. - function `qf_guess_filepath()` in `quickfix.c`: Use a `string_T` to store local variable `fullname`. - function `make_percent_swname()` in `memline.c`: Rename some variables to better reflect their use. Use a `string_T` to store local variables `d` and `fixed_name`. Slightly refactor to remove need to create an extra string. - function `get_file_in_dir()` in `memline.c`: Use a `string_T` to store local variables `tail` and `retval`. Move some variables closer to where they are used. - function `cs_resolve_file()` in `if_cscope.c`: Use a `string_T` to store local variable `csdir`. Remove one call to `STRLEN()`. - function `add_pathsep()` in `filepath.c`: Refactor and remove 1 call to `STRLEN()` - function `set_init_xdg_rtp()` in `option.c`: Use a `string_T` to store local variable `vimrc_xdg`. closes: vim/vim#19854 https://github.com/vim/vim/commit/cb51add7ae400a47407fb7fb7b7a54e238d4fdf4 Co-authored-by: John Marriott <basilisk@internode.on.net> Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-03-21vim-patch:9.2.0219: call stack can be corrupted (#38406)zeertzjq1
Problem: call stack can be corrupted, because calculated remaining capacity for call stack string can underflow (after v9.1.1983) Solution: Calculate capacity against maximum capacity (Sergey Vlasov). closes: vim/vim#19759 https://github.com/vim/vim/commit/8e0483c2f484c2d99b99f0672eed6e726dceea6f Co-authored-by: Sergey Vlasov <sergey@vlasov.me>
2026-03-19vim-patch:partial:9.2.0193: using copy_option_part() can be improved (#38369)zeertzjq1
Problem: using copy_option_part() can be improved Solution: Refactor and use the return value of copy_option_part() to avoid strlen() calls (John Marriott). In addition, this commit includes the following changes: memline.c: - In recover_names(): - Replace calls to vim_strsave() with vim_strnsave() for the literal strings - Use a string_T to store local variable dir_name. bufwrite.c: - In buf_write() - move variable wp to where it is used. help.c: - In fix_help_buffer(): - replace call to add_pathsep() with after_pathsep() optionstr.c: - In export_myvimdir(): - use a string_T to store local variable buf - replace call to add_pathsep() with after_pathsep() scriptfile.c: - In do_in_path(): - use a string_T to store local variable buf - measure the lengths of prefix and name once before the while loop - replace call to add_pathsep() with after_pathsep() - move some variables closer to where they are used spellfile.c: - In init_spellfile(): - use a string_T to store local variable buf closes: vim/vim#19725 https://github.com/vim/vim/commit/a74e5fc5b9cc3c1596f34df9d45e33f049162cfe Co-authored-by: John Marriott <basilisk@internode.on.net>
2026-03-09fix(runtimepath): crash in :packadd splice optimization #38129rok1
Problem: After #37722 splice optimization for :packadd, nvim crashes with SIGSEGV on startup while running `runtime! lua/xxx/*` and sourced file executes multiple `:packadd`. Solution: While `do_in_cached_path` is executing, it doesn't expect reference to runtime_search_path changes. But when callback is called, and add_pack_dir_to_rtp does 'splice' it may trigger realloc, and change address. Check runtime_search_path_ref to prevent ref held by do_in_cached_path changes.
2026-02-25perf(runtime): hardware accelerated "packadd opt_package"bfredl1
fixes #37586 when doing `packadd mypackage` up to two exact paths are added to &rtp. Instead of recalculating runtime_search_path from scratch, we can "just" splice these two paths in This is simple in theory, but get complicated in practice as "after" dirs do exist and need some wrangling. Echasnovski did some benchmarking, to show that this reduces overhead of a init.lua configuration style where separate `packadd!` calls are used spread out during the config. In addition, "batched" addition (either using "start" packages or packadd! a lot of opt packages at once) does not regress. A theoretical simplification could be to NEVER explicitly add "after" dirs to &rtp, but implicitly add all existing "after" dirs in reverse order when calculating the effective run time path. This might be tricky to do without breaking 12 tpope plugins again tho. We might also instead consider solutions where &rtp remains fully expanded but no longer is the main source of truth. But this is all post 0.12 work. This PR is an alright stopgap to make 0.12 fully support intended use cases of vim.pack.add() .
2026-02-22vim-patch:9.2.0041: Not always using GA_CONCAT_LITERALzeertzjq1
Problem: Not always using GA_CONCAT_LITERAL with string literals. (after: v9.2.0031) Solution: Use the GA_CONCAT_LITERAL, instead of ga_concat_len. (John Marriott) closes: vim/vim#19468 https://github.com/vim/vim/commit/fc90d8087adc607ee92262f43b8c8c0ec17dbb86 Co-authored-by: John Marriott <basilisk@internode.on.net>
2026-02-08fix(messages): unwanted newlines with ext_messages #37733luukvbaal1
Problem: Newlines intended to write messages below the cmdline or to mark the start of a new message on message grid are emitted through ext_messages. This results in unnecessary newlines for a UI that has decoupled its message area from the cmdline. msg_col is set directly in some places which is not transmitted to msg_show events. Various missing message kind for list commands. Trailing newlines on various list commands. Solution: Only emit such newlines without ext_messages enabled. Use msg_advance() instead of setting msg_col directly. Assign them the "list_cmd" kind. Ensure no trailing newline is printed.
2026-01-07feat(editor): :source can run Lua codeblock / ts injection #36799benarcher26911
Problem: Can't use `:source` to run a Lua codeblock (treesitter injection) in a help (vimdoc) file. Solution: Use treesitter to parse the range and treat it as Lua if detected as such.
2025-12-28vim-patch:8.2.0098: exe stack length can be wrong without being detected ↵Jan Edmund Lazo1
(#37136) Problem: Exe stack length can be wrong without being detected. Solution: Add a check when ABORT_ON_INTERNAL_ERROR is defined. https://github.com/vim/vim/commit/e31ee86859528a7ffe00405645547d494e522fa8 vim-patch:8.2.3262: build failure when ABORT_ON_INTERNAL_ERROR is defined Port patch 9.0.1454 for "make formatc". Co-authored-by: Bram Moolenaar <Bram@vim.org>
2025-12-17vim-patch:9.1.1987: assert_equal() prepends unnecessary ':' when typedzeertzjq1
Problem: assert_equal() prepends unnecessary ':' when typed (after 9.0.1758). Solution: Don't change a NULL stacktrace to an empty string (zeertzjq). closes: vim/vim#18936 https://github.com/vim/vim/commit/c4b3aefd0d5f81693e7098f224d3e4bfe24a7aa7
2025-12-17vim-patch:9.1.1983: Vim9: class_name definition can be improvedzeertzjq1
Problem: Vim9: class_name definition can be improved Solution: Use string_T to store class_name, avoid using STRLEN() calls, simplify code, remove unused definition of struct oc_newmember_S (John Marriott) Use struct string_T to store the field class_name in struct class_T, which means we can just use the .length field in struct string_T instead of measuring it. In addition: 1. In eval.c use string_T to store class_name and s in function class_tv2string(). 2. In vim9type.c change some calls from ga_concat() to ga_concat_len() where the length is known. 3. In vim9class.c remove unused struct definition oc_newmember_S. Change some calls from ga_concat() to ga_concat_len() where the length is known. 4. In scriptfile.c use string_T to store type_name, class_name and es_name in function estack_sfile(). 5. In function estack_sfile() simplify construction of the grow array ga and change some calls from ga_concat() to ga_concat_len() when the length is known. closes: vim/vim#18925 https://github.com/vim/vim/commit/2019321e0be320183afa47b7ea979dc4fc3984a0 Co-authored-by: John Marriott <basilisk@internode.on.net>
2025-12-17vim-patch:9.0.1758: vim9 no class identifiers in stack dumpszeertzjq1
Problem: vim9 no class identifiers in stack dumps Solution: Prefix class members in stack traces with the class name followed by a dot. closes: vim/vim#12866 closes: vim/vim#12078 https://github.com/vim/vim/commit/0ffc17aa479867f6f3ee14a46cf71352f126b5ba Co-authored-by: LemonBoy <thatlemon@gmail.com>
2025-10-20vim-patch:9.1.0359: MS-Windows: relative import in a script sourced from a ↵Jan Edmund Lazo1
buffer doesn't work Problem: MS-Windows: Relative import in a script sourced from a buffer doesn't work (Ernie Rael) Solution: Set a filename, so that we are not trying to use script-relative filename (Yegappan Lakshmanan) When a script is sourced from a buffer, the file name is set to ":source buffer=". In MS-Windows, the ":" is a path separator character (used after a drive letter). This results in the code trying to use the ":" prefix to import the script on MS-Windows. To fix this, when importing a script from a script sourced from a buffer with nofile, don't use a script relative path name. fixes vim/vim#14588 closes: vim/vim#14603 https://github.com/vim/vim/commit/f135fa28e481b2eba73baf52b08d24add5c4fe8b Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
2025-10-04vim-patch:partial:8.1.1939: code for handling v: variables in generic eval ↵Jan Edmund Lazo1
file (#35968) Problem: Code for handling v: variables in generic eval file. Solution: Move v: variables to evalvars.c. (Yegappan Lakshmanan, closes vim/vim#4872) https://github.com/vim/vim/commit/e5cdf153bcb348c68011b308c8988cea42d6ddeb Remove direct reference to "vimvars" for following functions: - assert_error() - get_vim_var_nr() - get_vim_var_list() - get_vim_var_dict() - get_vim_var_str() - set_cmdarg() - set_reg_var() - set_vcount() - set_vexception() - set_vthrowpoint() - set_vim_var_bool() - set_vim_var_dict() - set_vim_var_list() - set_vim_var_nr() - set_vim_var_special() - set_vim_var_string() - set_vim_var_type() Reorder functions based on v8.2.4930 for eval_one_expr_in_str() and eval_all_expr_in_str(). Co-authored-by: Bram Moolenaar <Bram@vim.org>
2025-08-14refactor(build): remove INCLUDE_GENERATED_DECLARATIONS guardsbfredl1
These are not needed after #35129 but making uncrustify still play nice with them was a bit tricky. Unfortunately `uncrustify --update-config-with-doc` breaks strings with backslashes. This issue has been reported upstream, and in the meanwhile auto-update on every single run has been disabled.
2025-07-06fix(runtime): coverity STRING_NULL #569464 (#34795)glepnir1
Problem: Coverity reports string null termination issue: *** CID 569464: Memory - string handling (STRING_NULL) /src/nvim/runtime.c: 1374 in ExpandRTDir_int() 1372 if (flags & DIP_START) { 1373 memcpy(tail - 15, "pack/*/start/*/", 15); // NOLINT >>> CID 569464: Memory - string handling (STRING_NULL) >>> Passing unterminated string "tail - 15" to "globpath", which expects a null-terminated string. 1374 globpath(p_pp, tail - 15, gap, glob_flags, expand_dirs); Similar issues occur at lines 1376, 1381, and 1383 where memcpy() constructs strings passed to globpath() without null termination. Solution: Replace dangerous pointer arithmetic and memcpy() with direct snprintf() construction of complete search paths. This eliminates the need for buffer reuse through pointer offsets and ensures all strings passed to globpath() are properly null-terminated. vim-patch:9.1.1515: Coverity complains about potential unterminated strings
2025-04-16fix(env.c): drop envmap, free os_getenv() result #32683Judit Novak1
Problem: vim.uv.os_setenv gets "stuck" per-key. #32550 Caused by the internal `envmap` cache. #7920 :echo $FOO <-- prints nothing :lua vim.uv.os_setenv("FOO", "bar") :echo $FOO <-- prints bar (as expected) :lua vim.uv.os_setenv("FOO", "fizz") :echo $FOO <-- prints bar, still (not expected. Should be "fizz") :lua vim.uv.os_unsetenv("FOO") :echo $FOO <-- prints bar, still (not expected. Should be nothing) :lua vim.uv.os_setenv("FOO", "buzz") :echo $FOO <-- prints bar, still (not expected. Should be "buzz") Solution: - Remove the `envmap` cache. - Callers to `os_getenv` must free the result. - Update all call-sites. - Introduce `os_getenv_noalloc`. - Extend `os_env_exists()` the `nonempty` parameter.
2025-02-28vim-patch:8.2.4974: ":so" command may read after end of bufferzeertzjq1
Problem: ":so" command may read after end of buffer. Solution: Compute length of text properly. https://github.com/vim/vim/commit/4748c4bd64610cf943a431d215bb1aad51f8d0b4 Co-authored-by: Bram Moolenaar <Bram@vim.org>
2025-02-28vim-patch:8.2.4647: "source" can read past end of copied linezeertzjq1
Problem: "source" can read past end of copied line. Solution: Add a terminating NUL. https://github.com/vim/vim/commit/2bdad6126778f907c0b98002bfebf0e611a3f5db Co-authored-by: Bram Moolenaar <Bram@vim.org>
2025-02-28vim-patch:8.2.4603: sourcing buffer lines is too complicatedzeertzjq1
Problem: Sourcing buffer lines is too complicated. Solution: Simplify the code. Make it possible to source Vim9 script lines. (Yegappan Lakshmanan, closes vim/vim#9974) https://github.com/vim/vim/commit/85b43c6cb7d56919e245622f4e42db6d8bee4194 This commit changes the behavior of sourcing buffer lines to always have a script ID, although sourcing the same buffer always produces the same script ID. vim-patch:9.1.0372: Calling CLEAR_FIELD() on the same struct twice Problem: Calling CLEAR_FIELD() on the same struct twice. Solution: Remove the second CLEAR_FIELD(). Move the assignment of cookie.sourceing_lnum (zeertzjq). closes: vim/vim#14627 https://github.com/vim/vim/commit/f68517c1671dfedcc1555da50bc0b3de6d2842f6 Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
2025-02-28vim-patch:8.2.4594: need to write script to a file to be able to source themzeertzjq1
Problem: Need to write script to a file to be able to source them. Solution: Make ":source" use lines from the current buffer. (Yegappan Lakshmanan et al., closes vim/vim#9967) https://github.com/vim/vim/commit/36a5b6867bb6c0bd69c8da7d788000ab8a0b0ab0 Most code and test changes are reverted or modified again in patch 8.2.4603, so only port parts that are untouched in patch 8.2.4603. Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
2025-02-27refactor(do_source): remove duplicate assignments (#32654)zeertzjq1
The code above have already set sc_lnum to 0.
2025-02-26fix(eval): don't shorten $HOME in v:stacktrace (#32634)zeertzjq1
2025-02-26refactor: remove unnecessary allocation for "run Nvim with -V1" (#32633)zeertzjq1
2025-02-25fix(lua): don't override script ID from :source (#32626)zeertzjq1
Problem: When setting an option, mapping etc. from Lua without -V1, the script ID is set to SID_LUA even if there already is a script ID assigned by :source. Solution: Don't set script ID to SID_LUA if it is already a Lua script. Also add _editor.lua to ignorelist to make script context more useful when using vim.cmd().
2025-02-25fix(api): don't override Vimscript SID (#32610)zeertzjq1
Problem: When calling an API from Vimscript to set an option, mapping, etc., :verbose shows that it's set from an API client. Solution: Don't override current_sctx.sc_sid when calling an API from Vimscript. Also fix the inverse case where API channel id is not set when calling an API from RPC. Move channel id into sctx_T to make saving and restoring easier. Related #8329
2025-01-07vim-patch:9.1.0984: exception handling can be improvedzeertzjq1
Problem: exception handling can be improved Solution: add v:stacktrace and getstacktrace() closes: vim/vim#16360 https://github.com/vim/vim/commit/663d18d6102f40d14e36096ec590445e61026ed6 Co-authored-by: ichizok <gclient.gaap@gmail.com> Co-authored-by: Naruhiko Nishino <naru123456789@gmail.com>
2024-12-23refactor: iwyu #31637Justin M. Keyes1
Result of `make iwyu` (after some "fixups").
2024-12-04refactor(runtime.c): miscLewis Russell1
2024-11-08refactor(message): propagate highlight id instead of attrsLuuk van Baal1
Problem: Highlight group id is not propagated to the end of the message call stack, where ext_messages are emitted. Solution: Refactor message functions to pass along highlight group id instead of attr id.
2024-09-08fix(startup): server fails if $NVIM_APPNAME is relative dir #30310Justin M. Keyes1
Problem: If $NVIM_APPNAME is a relative dir path, Nvim fails to start its primary/default server, and `v:servername` is empty. Root cause is d34c64e342dfba9248d1055e702d02620a1b31a8, but this wasn't noticed until 96128a5076b7 started reporting the error more loudly. Solution: - `server_address_new`: replace slashes "/" in the appname before using it as a servername. - `vim_mktempdir`: always prefer the system-wide top-level "nvim.user/" directory. That isn't intended to be specific to NVIM_APPNAME; rather, each *subdirectory* ("nvim.user/xxx") is owned by each Nvim instance. Nvim "apps" can be identified by the server socket(s) stored in those per-Nvim subdirs. fix #30256
2024-08-02vim-patch:9.0.0634: evaluating "expr" options has more overhead than neededzeertzjq1
Problem: Evaluating "expr" options has more overhead than needed. Solution: Use call_simple_func() for 'foldtext', 'includeexpr', 'printexpr', "expr" of 'spellsuggest', 'diffexpr', 'patchexpr', 'balloonexpr', 'formatexpr', 'indentexpr' and 'charconvert'. https://github.com/vim/vim/commit/a4e0b9785e409e9e660171cea76dfcc5fdafad9b vim-patch:9.0.0635: build error and compiler warnings Problem: Build error and compiler warnings. Solution: Add missing change. Add type casts. https://github.com/vim/vim/commit/3292a229402c9892f5ab90645fbfe2b1db342f5b Co-authored-by: Bram Moolenaar <Bram@vim.org>
2024-08-01vim-patch:8.2.4275: cannot use an autoload function from a package under ↵zeertzjq1
start (#29937) Problem: Cannot use an autoload function from a package under start. Solution: Also look in the "start" package directory. (Bjorn Linse, closes vim/vim#7193) https://github.com/vim/vim/commit/223a950a85448253780da4e821a5b23dcdfad28f Nvim already does this in do_in_cached_path(), and this change has no effect in Nvim as Nvim removes DIP_START after do_in_cached_path(). Accidentally failed to mark as ported: vim-patch:8.2.1731: Vim9: cannot use += to append to empty NULL list Co-authored-by: bfredl <bjorn.linse@gmail.com>
2024-06-14revert: "refactor: use S_LEN macro" (#29319)Lewis Russell1
revert: "refactor: use S_LEN(s) instead of s, n (#29219)" This reverts commit c37695a5d5f2e8914fff86f3581bed70b4c85d3c.
2024-06-11Merge pull request #29278 from bfredl/strcatbfredl1
refactor(memory): use builtin strcat() instead of STRCAT()
2024-06-11refactor: use S_LEN(s) instead of s, n (#29219)James1
2024-06-11refactor(memory): use builtin strcat() instead of STRCAT()bfredl1
The latter was mostly relevant with the past char_u madness. NOTE: STRCAT also functioned as a counterfeit "NOLINT" for clint apparently. But NOLINT-ing every usecase is just the same as disabling the check entirely.
2024-06-01refactor: move shared messages to errors.h #26214Justin M. Keyes1
2024-04-25refactor(source): remove unnecessary concatenation with Lua (#28499)zeertzjq1
2024-04-24vim-patch:8.2.2332: Vim9: missing :endif not reported when using :windo (#28482)zeertzjq1
Problem: Vim9: missing :endif not reported when using :windo. Solution: Pass a getline function to do_cmdline(). (closes vim/vim#7650) https://github.com/vim/vim/commit/9567efa1b4a41baca9b2266f5903d5dda7ad1e88 Co-authored-by: Bram Moolenaar <Bram@vim.org>
2024-04-20refactor: add xmemcpyz() and use it in place of some xstrlcpy() (#28422)zeertzjq1
Problem: Using xstrlcpy() when the exact length of the string to be copied is known is not ideal because it requires adding 1 to the length and an unnecessary strlen(). Solution: Add xmemcpyz() and use it in place of such xstrlcpy() calls.
2024-04-13vim-patch:9.0.2180: POSIX function name in exarg causes issues (#28308)zeertzjq1
Problem: POSIX function name in exarg struct causes issues on OpenVMS Solution: Rename getline member in exarg struct to ea_getline, remove isinf() workaround for VMS There are compilers that do not treat well POSIX functions - like getline - usage in the structs. Older VMS compilers could digest this... but the newer OpenVMS compilers ( like VSI C x86-64 X7.4-843 (GEM 50XB9) ) cannot deal with these structs. This could be limited to getline() that is defined via getdelim() and might not affect all POSIX functions in general - but avoiding POSIX function names usage in the structs is a "safe side" practice without compromising the functionality or the code readability. The previous OpenVMS X86 port used a workaround limiting the compiler capabilities using __CRTL_VER_OVERRIDE=80400000 In order to make the OpenVMS port future proof, this pull request proposes a possible solution. closes: vim/vim#13704 https://github.com/vim/vim/commit/6fdb6280821a822768df5689a5d727e37d38306c Co-authored-by: Zoltan Arpadffy <zoltan.arpadffy@gmail.com>
2024-03-30fix: explain that user should run nvim with -V1 to see more informationdundargoc1
It's not obvious for users how to figure out where a mapping is set from only "Last set from Lua".
2024-02-20refactor(api): reduce temporary allocations when replacing linesbfredl1
The way ml_replace_buf is implemented makes it unfriendly for being used in a loop: every call allocates a scratch buffer for putting the line into the "dirty" state. This then immediately needs to be freed as the next ml_replace_buf and/or ml_append_buf call will flush that buffer. It's better to later pay the price of allocating the scratch buffer only if the line is being immediately edited (likely when using the API to only change one line) with an extra memcpy, than allocating that buffer multiple times every time the API is called. Of course, a separate xmalloc/xfree cycle for each time the dirty line changes is unwanted to begin with. But fixing that is a later refactor.
2024-02-19refactor(api): use arena for runtime and client infobfredl1
2024-02-13refactor(lua): use Arena when converting from lua stack to API argsbfredl1
and for return value of nlua_exec/nlua_call_ref, as this uses the same family of functions. NB: the handling of luaref:s is a bit of a mess. add api_luarefs_free_XX functions as a stop-gap as refactoring luarefs is a can of worms for another PR:s. as a minor feature/bug-fix, nvim_buf_call and nvim_win_call now preserves arbitrary return values.
2024-01-27docs(lua): update ":{range}lua" docs + error message #27231Justin M. Keyes1
- `:lua (no file)` is misleading because `:lua` never takes a file arg, unlike `:source`. - Update various related docs.