aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.lua
Commit message (Collapse)AuthorAge
* docs: flow layoutJustin M. Keyes3 days
| | | | | | | | | | Work towards enabling "flow" layout in most `:help` files. Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables), it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739), flow layout will allow `:help` presentation-mode to un-hardwrap text blocks.
* docs: cleanup invalid help sourceJustin M. Keyes3 days
| | | | | | | | | | Work towards enabling "flow" layout in most `:help` files. Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables), it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739), flow layout will allow `:help` presentation-mode to un-hardwrap text blocks.
* docs: cleanup #42395Justin M. Keyes3 days
| | | | | | | | | | Work towards enabling "flow" layout in most `:help` files. Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables), it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739), flow layout will allow `:help` presentation-mode to un-hardwrap text blocks. https://github.com/neovim/neovim/issues/31825
* docs: cleanup tables, highlights.scm #42381Justin M. Keyes4 days
| | | highlights.scm: `#match` is slow, prefer `#lua-match`.
* fix(docs): listitems with codeblocks #42367Justin M. Keyes4 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: - `<` before a listitem (`< - foo`) is not concealed. - Codeblock HTML has extra blank lines. - Codeblock in a listitem ends the listitem, so HTML docs drop the rest of the item and its nesting. Example from `:h nvim_open_win()`: ``` • border: … the double-box style can be specified as: > [ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ]. < If fewer than eight chars are given, they will be repeated. • bufpos: … tree-sitter-vimdoc v4.1.0: (block (line_li (prefix) (line) (codeblock (code (line))))) (block (line) ; "If fewer…" (line_li (prefix) (line) (line))) ; "bufpos" tree-sitter-vimdoc v4.2.0: (block (line_li (prefix) (line) (codeblock (code (line))) (line)) ; "If fewer…" (line_li (prefix) (line) (line))) ; "bufpos" ``` Solution: - Bump tree-sitter-vimdoc to v4.2.0. https://github.com/neovim/tree-sitter-vimdoc/pull/174 - gen_help_html: get listitem indent from its first line - gen_help_html: don't double codeblock newlines. - highlight query: conceal `<` in `line_li`. - docs: fix doc sources where a blank line was missing after listitems followed by non-listitem text.
* docs: fix invalid vimdoc #42353Justin M. Keyes5 days
|
* fix(lua): types for getloclist() signatures #42131glepnir2026-09-28
| | | | | Problem: vim.fn.getloclist() is untyped, unlike getqflist(). Solution: Split it into typed list and {what} forms, like getqflist().
* vim-patch:5959274: runtime(doc): Tweak documentation stylezeertzjq2026-09-26
| | | | | | | | | | closes: vim/vim#21361 https://github.com/vim/vim/commit/5959274607038bac22e9dde740060ddb748fedfe Omit :h :source-dryrun as it needs changes to port to Nvim anyway. Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
* vim-patch:b3a4882: runtime(doc): mention getcellwidths() in setcellwidths()zeertzjq2026-09-26
| | | | | | closes: vim/vim#21362 https://github.com/vim/vim/commit/b3a4882a915634c6031a4b4c8e25d459ac7b4319
* fix(lua): accept nil nosuf in the expand list overloadLewis Russell2026-09-25
| | | | | | | The expand() overload required nosuf even though callers can pass nil. Mark it optional in the source metadata and regenerate the Lua types. AI-assisted
* fix(lua): generate explicit overloads for vim.fnLewis Russell2026-09-25
| | | | | | | | | | | | | | | | The generated vim.fn stubs represent overloads as repeated function declarations. EmmyLua merges their return types, so getline(lnum) is inferred as string|string[] even though it always returns a string. Generate one declaration with @overload annotations from the existing __N entries, while keeping separate Vimdoc signatures. Parenthesize the overload return list so types such as (0|-1)[] remain arrays. Correct getline()'s single-line and range signatures, and add typed getqflist() signatures for its entry-list and property-query forms. This lets callers infer quickfix results without local type overrides. AI-assisted
* refactor(charset)!: delete 'isprint' and cleanup 'iskeyword' and friendsbfredl2026-09-22
| | | | | | | | | | | | | In the `enc=utf-8` only world, the 'isprint' option is quite obsolete. The function is only consulted for decoded U+0080 to U+00FF chars whose printability is defined by the unicode charset, just like higher codepoints. Meanwhile, invalid `\x80` to `\xFF` bytes are always unprintable. Disentangle 'iskeyword', 'isfname' and 'isident' from each other by giving them all separate bitsets. Now these can be updated individually. These updaters can back out of errors gracefully, no need for extra panic logic in option[str].c to restore partially updated chartabs.
* fix(filetype): empty 'filetype' skips :setfiletype #41958Justin M. Keyes2026-09-17
| | | | | | | | | | | | | Problem: After `:restart` a restored buffer can have an empty 'filetype'. Lazy LSP setup during the read replays FileType via `:doautoall`, which sets `did_filetype` even though `filetype=''`. :e foo.md :restart :set ft? " filetype= Solution: Set `did_filetype` only if 'filetype' is non-empty.
* vim-patch:9.2.1107: getregionpos() is slow when only the region bounds are ↵Volodymyr Chernetskyi2026-09-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | needed (#41925) Problem: getregionpos() returns a pair of positions for every line, so obtaining just the outer endpoints of a region costs O(lines); for a 100000 line region that is about 1.4 million list allocations for a result of which the caller keeps two positions. Solution: Add a "bounds" item to {opts} that returns a single pair with the start on the first line and the end on the last line (Volodymyr Chernetskyi). The lines in between do not influence the outer endpoints, so with "bounds" they are not visited at all. The two positions then come from different lines and describe a diagonal of the region rather than its shape; for a blockwise region they are the start of the first line and the end of the last line, not the corners of the block. This is exactly what indexing the full result gives, so the awkward corners are kept as they are, including an empty first line yielding a "col" of 0 for the start while the end keeps its own column. On a 100000 line buffer this takes getregionpos() from about 45 ms to about 0.003 ms per call. closes: vim/vim#21209 https://github.com/vim/vim/commit/2173c3e4eceedc76c4fd7d56cdbfbbd35e9be853
* vim-patch:0ed11ba: runtime(doc): Tweak documentation style a bitJan Edmund Lazo2026-09-06
| | | | | | https://github.com/vim/vim/commit/0ed11ba223ec69dfefc8cc5800fb3e0d610fd9f8 Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
* vim-patch:ca2e65a: runtime(doc): Update quickfix help text with missing ↵zeertzjq2026-09-07
| | | | | | | | | | | | information closes: vim/vim#21229 Supported by AI. https://github.com/vim/vim/commit/ca2e65a842d93bd6e3f433ce36b55ec450a2bb1a Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
* vim-patch:fac9e33: runtime(doc): fix example output of cosh (#41609)zeertzjq2026-09-02
| | | | | | | closes: vim/vim#21197 https://github.com/vim/vim/commit/fac9e333a8d38e7049e6628e0f5157f4b7c44d2c Co-authored-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
* vim-patch:9.2.1004: a completion function cannot tell why it was called (#41500)zeertzjq2026-08-26
| | | | | | | | | | | | | | | Problem: A function used through 'omnifunc' or 'complete' is called the same way whether 'autocomplete' started the completion or a key asked for one, so it cannot answer differently. Solution: Report which of the two it is in complete_info() as "auto". It is returned only when asked for in {what}, so what complete_info() says by itself does not change (Hirohito Higashi). closes: vim/vim#21143 https://github.com/vim/vim/commit/1f56c351dedad288f79c89b6b6f64be762ec3b9b Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
* vim-patch:9.2.1001: complete_info() does not report the item highlight ↵glepnir2026-08-24
| | | | | | | | | | | | groups (#41461) Problem: complete_info() omits "abbr_hlgroup" and "kind_hlgroup". Solution: Keep the highlight group ID with the match instead of the resolved attribute and add both entries to the returned items (glepnir). closes: vim/vim#21105 https://github.com/vim/vim/commit/1c32cede0afdc9351d5887e2f25977d4fb964d9f
* vim-patch:63d08d4: runtime(doc): update :h write-plugin and readdir() examplezeertzjq2026-08-24
| | | | | | | | | | | | | | | | | | | | 1) The complete example plugin at :h write-plugin the end of the documentation didn't reflect the snippets provided during the tutorial. In most of the Add() function, interpolated strings are used, but the final result used concatenated strings. 2) The example provided in readdir() to get a list of files ending in ".txt" didn't properly escape the dot in the regular expression: readdir(dirname, {n -> n =~ '.txt$'}) This would match any file ending with "txt" that is at least 4 characters long, instead it should be: readdir(dirname, {n -> n =~ '\.txt$'}) closes: vim/vim#21123 https://github.com/vim/vim/commit/63d08d43862ed195da78cfb1bebe2c0ed02f80b7 Co-authored-by: Josep Puigdemont <josep.puigdemont@gmail.com>
* vim-patch:76f1eed: runtime(doc): clarify how setbufvar() handles window ↵zeertzjq2026-08-21
| | | | | | | | | | options (#41408) related: vim/vim#21089 closes: vim/vim#21104 https://github.com/vim/vim/commit/76f1eed3a5f8fe12a7b01725a99c582a95e69000 Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
* vim-patch:02bf089: runtime(doc): clarify diff_filler() function (#41283)zeertzjq2026-08-12
| | | | | | | fixes: vim/vim#20990 https://github.com/vim/vim/commit/02bf0893d536449548f91b75817748a5e25219c0 Co-authored-by: Christian Brabandt <cb@256bit.org>
* feat(cwd)!: :lcd! (bang), rearrange :bcd/:lcd/… scope precedence #41194Justin M. Keyes2026-08-07
| | | | | | | | | | | | | | | | Problem: - buf-local CWD scope is lower priority than :lcd, which is weird. ``` win > buf > tab > global ``` - No way to clear current CWD at a given scope. Solution: - Rerrange scope precedence to: ``` buf > win > tab > global ``` - Introduce "bang" variants (`:bcd!`/`:lcd!`/`:tcd!`) which clears the local CWD for the given scope.
* docs: misc, :bcd, slug()Justin M. Keyes2026-08-06
|
* fix(:bcd): do not "inherit" buffer-local dirJustin M. Keyes2026-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Buffer-local CWD (:bcd) is "sticky", similar to window-local CWD (:lcd). But this contradicts one of its main benefits: per-buffer "project root" for LSP, OSC7. Other problems: - A buffer created with :edit/:enew/:new silently inherits b_localdir (and b_prevdir) from the previous buffer. - curbuf_reusable() refuses to recycle a scratch buffer that has `b_localdir`. - After :new/:vnew/:tabnew the CWD sticks to previous buffer's `b_localdir` even though the new curbuf has none, so :new is not equivalent to ":split | enew", and getcwd() disagrees with haslocaldir(). - Requires "which buffer spawned this buffer" semantics that no other buffer-local state has. Solution: Drop sticky/inherit behavior of buffer-local CWD (:bcd). - do_ecmd: always apply the new curbuf's dir (`fix_current_dir`), like `do_autochdir` already does. :tabnew from a :bcd buffer now reverts to global CWD (and fires DirChanged), same as :tabnew from a :lcd window. - curbuf_reusable(): recycling a scratch buffer frees its b_localdir. To get sticky/inherit behavior of CWD, use `:lcd`.
* fix(cwd): validate getcwd(…, -1)Justin M. Keyes2026-08-04
|
* refactor(editor): cleanup change-directory (:bcd) logicJustin M. Keyes2026-08-04
|
* feat(editor): `:bcd` changes buffer-local directorysaher2026-08-04
| | | | | | | | | | | | | | | | | | Problem: No way to set a buffer-local directory. Use-cases: - "Root dir" for LSP (and the "project" concept). - `:terminal` OSC 7 Solution: Add `:bcd` command. - Extend `getcwd()` to take a third arg; `getcwd(-1, -1, bunfr)` returns the buffer-local working directory. - Buffer-local directories have less priority than window-local ones, and more priority than tab-local ones. Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
* fix(types): emmylua warning about `params` fieldJustin M. Keyes2026-08-04
|
* fix(eval): complete_info() equal, preselect, commit_chars #41022glepnir2026-07-28
| | | | | Problem: complete_info() does not report "equal", "preselect" or "commit_chars". Solution: Report them for the items that set them.
* refactor(exmode): Ex-mode as cmdwin + Lua #40991Justin M. Keyes2026-07-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: POSIX-compatible Ex-mode requires special-cases all over the codebase to match various quirks that don't actually matter to users. - The main utility of *interactive* Ex-mode is its REPL behavior, and that can be achieved with `cmdwin`, which also gains extra UX benefits. - The main utility of *non-interactive* `nvim -es` is for shell scripting, where Ex-mode quirks are mostly unhelpful (e.g. the "Entering Ex mode" message). Solution: - Reimplement *interactive* Ex-mode as a "persistent, insert-mode cmdwin" in Lua. - "nvim -e/-E" is simply an alias to "gQ". - Reframe *non-interactive* Ex-mode (`nvim -es`) as "script mode". - Drop POSIX Ex-mode quirks. Improvements: - "nvim -V1 -es" output ends with a final newline! - "nvim -V1 -es" no longer shows the "Entering Ex mode" msg. (This was pointless noise, unwanted for scripting purposes.) - stdin is no longer typeahead. Scripts (":lua io.read()") can read stdin as data. - Empty line is a no-op: a stray blank line no longer moves the cursor (deviates from POSIX ex "+1"), no longer exits 1 at EOF (E501). Preserved behavior: - cursor starts at "$" - mode()=="cv" (for non-interactive) - multiline commands (:append/:function/heredoc pull continuation lines) - bare-range print - :print=>stdout - -V1=>stderr - CRLF input - continue-after-error and exit codes Dropped (regressed) POSIX behavior (non-interactive): - Event loop only ticks while/between commands, not while blocked waiting for a stdin line. - ":g/pat/visual...Q" - input()/getchar()/":s/x/y/c" no longer consume stdin lines as answers: Nvim stops at end-of-input, skipping the rest of the script, exit 0. Use ":lua io.read()" instead. - If users care about this they should use interactive Ex-mode (`gQ`). - ":@r" stops at end of the register instead of continuing to read cmdline input from stdin.
* vim-patch:770eb7d: runtime(doc): clarify expandcmd() and "~" behaviourzeertzjq2026-07-26
| | | | | | | | fixes: vim/vim#20793 https://github.com/vim/vim/commit/770eb7db17c44e41fc4eb1975d67f9ec022edb58 Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
* vim-patch:0c1a214: runtime(doc): Fix truncated sentence in :h map()zeertzjq2026-07-25
| | | | | | | | fixes: vim/vim#20725 https://github.com/vim/vim/commit/0c1a214497400a950f1e25f4163215ec930a4659 Co-authored-by: Christian Brabandt <cb@256bit.org>
* feat(eval): declare more "fast" functions #40834Justin M. Keyes2026-07-19
|
* feat(marks): :marks completion, list extmarks #40743Justin M. Keyes2026-07-15
| | | | | | | | | Problem: - No UI for listing extmarks. - `:marks` doesn't support cmdline-completion. Solution: - Add completion and extmarks support to `:marks`. - Update `get_buf_local_marks` to include the ":" (prompt-buffer) mark.
* refactor(vimscript)!: drop ctxget(), ctxpush(), etc #40724Justin M. Keyes2026-07-13
| | | | | | | | | | Problem: This functions are most likely never used in the wild. - They are redundant with `nvim_get_context` + `nvim_load_context`. - The "context" concept was never fully developed and hasn't gained traction. Solution: Drop these vimscript aliases, they are just extra cruft.
* fix(path): normalize separators (slashes) #39155tao2026-07-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Continue separators normalization, and try to keep it at the nvim <-> external boundary, e.g., `fn.xxx`, `api.xxx`, `:xxx` Solution: some key changes - normalize `$HOME-windows` - normalize entry points of changing directory - `nvim_set_current_dir()`, `chdir()` - normalize the named pipe - `--listen` arg, `--server` arg, `:restart` - `serverstart()`, `sockconnect()`, `serverstop()` - make `expand()` respect 'shellslash' again - clean up `did_set_shellslash` - replace `forward_slash` with `TO_SLASH` - remove obsolete `TMP_PATHSEPSTR` - remove `slash_adjust` in `do_autocmd_dirchanged`? - make `fnamemodify()` always return `/` (except when substituting separators via `:s`, `:gs` ?) Note: - these funcs still apply `slash_adjust` on return, as before: `:pwd`, `chdir()`, `exepath()`, `getcwd()` - these funcs alwarys return `/`, unlike before the normalization PRs - `getcompletion()`, `finddir()`, `findfile()` Also - clean up code, comments, formatting and tests - move `TO_SLASH` from `f_chdir` to `changedir_func` - move `TO_SLASH` from `f_bufadd` to `buflist_new` Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
* fix(filetype): ensure directory bufname ends w/ slash sep #40552Barrett Ruth2026-07-10
| | | | | | | | | | | | Problem: `vim.filetype.match()` needs a cheap way to recognize directory buffers without doing filesystem stat work. Solution: Ensure full buffer names for directories end in a trailing slash. Now directory buffers can proceed through the normal 'filetype' path. Note side-effects: session and ShaDa buffer-list restore behavior must be compatible, so those + corresponding tests must be updated.
* feat(vim.fs): vim.fs.mkdir() #40599Barrett Ruth2026-07-08
| | | | | | | | | Problem: `vim.fs` does not provide a directory creation helper matching its filesystem API shape. Solution: Add `vim.fs.mkdir()` as a thin wrapper around `vim.fn.mkdir()`, with `parents` and `mode` options.
* refactor: cleanup, docs #40480Justin M. Keyes2026-06-29
|
* docs: bufadd(), fnameescape() guidance #40378Justin M. Keyes2026-06-23
|
* vim-patch:9.2.0624: C-N/C-P cannot be mapped in complete() completion (#40232)glepnir2026-06-14
| | | | | | | | | | | | | | | | Problem: Keys valid in CTRL-X mode are never mapped while insert completion is active, so <C-N> and <C-P> cannot be remapped for completion started by complete(). Solution: Do not disable mappings in CTRL_X_EVAL mode. In this mode a mapping cannot interfere with selecting the completion method, which is what the no-mapping rule exists for. related: vim/vim#6440 related: vim/vim#16880 closes: vim/vim#20489 https://github.com/vim/vim/commit/076585e6addb5688f123ef3e174fcfee993b7602 Co-authored-by: Thomas M Kehrenberg <tmke8@posteo.net>
* vim-patch:595d0a7: runtime(doc): wrong {str} length limit in matchfuzzy() ↵zeertzjq2026-06-10
| | | | | | | | | | | | | docs (#40157) Problem: docs say {str} is capped at 256 and longer returns an empty list. Solution: it's 1024, and {str} plus each candidate are just truncated to that, not rejected; fix the text. closes: vim/vim#20453 https://github.com/vim/vim/commit/595d0a77e48d02d2865e05d8ea89aa169166b987 Co-authored-by: glepnir <glephunter@gmail.com>
* docs: misc #40126Justin M. Keyes2026-06-08
|
* docs: misc, lspJustin M. Keyes2026-06-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: This doc on `vim.lsp.completion.get()`: --- Used by the default LSP |omnicompletion| provider |vim.lsp.omnifunc()|, thus |i_CTRL-X_CTRL-O| --- invokes this in LSP-enabled buffers. Use CTRL-Y to select an item from the completion menu. --- |complete_CTRL-Y| ...makes two wrong claims: 1. "Used by the default LSP omnicompletion provider vim.lsp.omnifunc()" - `_omnifunc` does not call `M.get()`, it calls the internal `trigger()` directly. 2. "thus |i_CTRL-X_CTRL-O| invokes this in LSP-enabled buffers" - The two paths use different client sets: - `M.get()` reads `buf_handles[bufnr].clients` (clients explicitly registered via `vim.lsp.completion.enable(true, ...)`). - `_omnifunc` reads `lsp.get_clients({method='textDocument/completion'})` (every completion client, regardless of `enable()`). Solution: Update docs. Co-authored-by: Koichi Shiraishi <zchee.io@gmail.com> Co-authored-by: y9san9 / Alex Sokol <y9san9@gmail.com> Co-authored-by: adv0r <>
* vim-patch:partial:9.2.0573: Vim9: missing EX_WHOLE on some block keywords ↵zeertzjq2026-06-01
| | | | | | | | | | | | | | | | | | | | | | | (#40071) Problem: Several Vim9 keywords lack EX_WHOLE and can be shortened in Vim9 script, inconsistent with endif/enddef/endfor/endwhile/ endtry which already have it. The error from :endd in a nested function also hardcodes "enddef" instead of reporting what the user typed. fullcommand("ho") returns "horizontal" even though :ho is below the documented 3-char minimum. Solution: Add EX_WHOLE to :class, :def, :endclass, :endinterface, :endenum, :public and :static. In get_function_body() pass the user-typed command to the error message. Force :ho to CMD_SIZE in find_ex_command() so fullcommand() reflects the modifier minimum. Extend tests and documentation accordingly (Peter Kenny). fixes: vim/vim#20032 closes: vim/vim#20191 https://github.com/vim/vim/commit/38d9a16eba8cdf3377e8b867da805bf369454108 Co-authored-by: Peter Kenny <github.com@k1w1.cyou>
* feat(api): tab-local option scope #39811Justin M. Keyes2026-05-17
| | | | | | | | | | | | | | | | | | Problem: 2d795face6e4 added support for tab-local options ('cmdheight') to `nvim_get_option_value`, but not to: nvim_get_option_info2() nvim_set_option_value(…, { tab = … }) gettabwinvar() Solution: - Update `options.lua` to model tab-local options. Introduce `kOptScopeTab`. - Handle tab scope in the options layer so it works for all options APIs. Note: - No change to `gettabvar()`. Not sure if needed/wanted. fix https://github.com/neovim/neovim/issues/31140
* docs: misc, window #39720Justin M. Keyes2026-05-10
| | | | - formalize `window-number` similar to `tabpage-number`. - reference it from docs.
* feat(server): add v:useractive, use it in serverlist(info=true) #39423Szymon Wilczek2026-05-07
| | | | | | | | | | | | Problem: When showing the :connect menu, it is useful to know which servers are most-recently active. But we don't have a good way to detect that. Solution: - Introduce `v:useractive`. - Include this timestamp in `serverlist({info=true})`. Co-authored-by: Justin M. Keyes <justinkz@gmail.com> Signed-off-by: Szymon Wilczek <swilczek.lx@gmail.com>
* docs: rename "tabpage"Justin M. Keyes2026-05-07
|