From 03d99a06598208147b428867308fe70ee93ad83e Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Sun, 17 May 2026 10:02:12 -0400 Subject: [PATCH 1/2] backport: docs: misc backport #39817 --- runtime/doc/options.txt | 2 +- runtime/doc/tabpage.txt | 8 ++++---- runtime/doc/windows.txt | 8 ++++---- src/gen/gen_eval_files.lua | 2 +- src/nvim/option.c | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index c45ceebb08..194dfcf77c 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1466,7 +1466,7 @@ A jump table for the options with a short description can be found at |Q_op|. *'cmdheight'* *'ch'* 'cmdheight' 'ch' number (default 1) - global or local to tab page + global or local to tabpage Number of screen lines to use for the command-line. Helps avoiding |hit-enter| prompts. The value of this option is stored with the tabpage, so that each diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt index 8f578de3f0..a11dfe1cc5 100644 --- a/runtime/doc/tabpage.txt +++ b/runtime/doc/tabpage.txt @@ -37,10 +37,10 @@ Each tabpage has an unique identifier which will not change, even after rearranging tabs. |nvim_get_current_tabpage()| returns the tab-id and |nvim_list_tabpages()| lists tab-ids in the order they're displayed. *tabpage-number* -Tabpages are also numbered from left to right starting at 1: this is the tab -"number" returned by |tabpagenr()|, not the tab-id. The tab number may change -when tabs are opened, closed, or rearranged. |nvim_tabpage_get_number()| -converts a tab-id to a tab number. +Tabpages are numbered from left to right starting at 1: this tab "number" is +returned by |tabpagenr()|. Unlike the tab-id, the tab number may change when +tabs are opened, closed, or rearranged. |nvim_tabpage_get_number()| converts +a tab-id to a tab number. ============================================================================== diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt index ff2884b267..a7c7474ec6 100644 --- a/runtime/doc/windows.txt +++ b/runtime/doc/windows.txt @@ -82,10 +82,10 @@ Each window has a unique identifier called the window ID, which is permanent during the Nvim session. The |win_getid()| and |win_id2tabwin()| functions convert between the window/tab "number" and the identifier. *window-number* -Windows are also numbered according to their arrangement in a tabpage; this -window "number" is given by |winnr()| and may change whenever windows are -opened or closed. The window number is only valid in one specific tab, whereas -the window ID is valid globally, across tabs. For most functions that take +Windows are numbered according to their arrangement in a tabpage; this window +"number" is given by |winnr()| and may change whenever windows are opened or +closed. The window number is only valid in one specific tab, whereas the +window ID is valid globally, across tabs. For most functions that take a window ID or a window number, the window number only applies to the current tab, while the window ID can refer to a window in any tab. diff --git a/src/gen/gen_eval_files.lua b/src/gen/gen_eval_files.lua index fbbb3efb0c..cc0c3c9186 100755 --- a/src/gen/gen_eval_files.lua +++ b/src/gen/gen_eval_files.lua @@ -645,7 +645,7 @@ local function option_scope_doc(o) global = 'global', buf = 'local to buffer', win = 'local to window', - tab = 'local to tab page', + tab = 'local to tabpage', } local r --- @type string diff --git a/src/nvim/option.c b/src/nvim/option.c index d1dc9ccce7..30fab57eac 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -4013,7 +4013,7 @@ void set_option_direct_for(OptIndex opt_idx, OptVal value, int opt_flags, scid_T curbuf = save_curbuf; } -/// Set the value of an option. +/// Sets the value of an (non-tty) option. /// /// @param opt_idx Index in options[] table. Must not be kOptInvalid. /// @param[in] value Option value. If NIL_OPTVAL, the option value is cleared. From 98098d8466ba612c8977db469f498305bfaa01a9 Mon Sep 17 00:00:00 2001 From: Puneet Dixit Date: Sun, 17 May 2026 21:48:24 +0530 Subject: [PATCH 2/2] fix(startup): emitting useless OptionSet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: During startup, we manually trigger a useless and misleading `OptionSet` event, which doesn't set `v:option_*` values (this is a limitation of `nvim_exec_autocmds`). https://github.com/neovim/neovim/blob/ad4bc2d90c5109c24bf6f0119ad31276f1518c6f/runtime/lua/vim/_core/defaults.lua#L939. Solution: The `nvim_exec_autocmds('OptionSet',…)` call does not serve any purpose since 5cbb9d613bf6d8983b5effd7e20343a4ef497c06, so just drop it. --- runtime/doc/news.txt | 2 ++ runtime/doc/options.txt | 2 +- runtime/lua/vim/_core/defaults.lua | 14 -------------- runtime/lua/vim/_meta/options.gen.lua | 2 +- src/nvim/options.lua | 2 +- test/functional/terminal/tui_spec.lua | 23 ++++++++++++++--------- 6 files changed, 19 insertions(+), 26 deletions(-) diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt index 495406bf80..758de13f67 100644 --- a/runtime/doc/news.txt +++ b/runtime/doc/news.txt @@ -482,6 +482,8 @@ These existing features changed their behavior. • |nvim_create_autocmd()| • |nvim_exec_autocmds()| • |nvim_get_autocmds()| +• |OptionSet| is no longer triggered during startup by automatic + |'background'| detection. ============================================================================== REMOVED FEATURES *news-removed* diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 194dfcf77c..c3358da8e8 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -850,7 +850,7 @@ A jump table for the options with a short description can be found at |Q_op|. global When set to "dark" or "light", adjusts the default color groups for that background type. The |TUI| or other UI sets this on startup - (triggering |OptionSet|) if it can detect the background color. + if it can detect the background color. This option does NOT change the background color, it tells Nvim what the "inherited" (terminal/GUI) background looks like. diff --git a/runtime/lua/vim/_core/defaults.lua b/runtime/lua/vim/_core/defaults.lua index 8aa2db8d99..bfd7f48a5b 100644 --- a/runtime/lua/vim/_core/defaults.lua +++ b/runtime/lua/vim/_core/defaults.lua @@ -940,20 +940,6 @@ do local luminance = (0.299 * rr) + (0.587 * gg) + (0.114 * bb) local bg = luminance < 0.5 and 'dark' or 'light' vim.api.nvim_set_option_value('background', bg, {}) - - -- Ensure OptionSet still triggers when we set the background during startup - if vim.v.vim_did_enter == 0 then - vim.api.nvim_create_autocmd('VimEnter', { - group = group, - once = true, - nested = true, - callback = function() - vim.api.nvim_exec_autocmds('OptionSet', { - pattern = 'background', - }) - end, - }) - end end end end, diff --git a/runtime/lua/vim/_meta/options.gen.lua b/runtime/lua/vim/_meta/options.gen.lua index 23ea1a24b4..e73c310de2 100644 --- a/runtime/lua/vim/_meta/options.gen.lua +++ b/runtime/lua/vim/_meta/options.gen.lua @@ -224,7 +224,7 @@ vim.go.awa = vim.go.autowriteall --- When set to "dark" or "light", adjusts the default color groups for --- that background type. The `TUI` or other UI sets this on startup ---- (triggering `OptionSet`) if it can detect the background color. +--- if it can detect the background color. --- --- This option does NOT change the background color, it tells Nvim what --- the "inherited" (terminal/GUI) background looks like. diff --git a/src/nvim/options.lua b/src/nvim/options.lua index a694a74386..996f965592 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -366,7 +366,7 @@ local options = { desc = [=[ When set to "dark" or "light", adjusts the default color groups for that background type. The |TUI| or other UI sets this on startup - (triggering |OptionSet|) if it can detect the background color. + if it can detect the background color. This option does NOT change the background color, it tells Nvim what the "inherited" (terminal/GUI) background looks like. diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua index ce91534304..e9312237de 100644 --- a/test/functional/terminal/tui_spec.lua +++ b/test/functional/terminal/tui_spec.lua @@ -4282,23 +4282,28 @@ describe('TUI bg color', function() end) end) - it('triggers OptionSet from automatic background processing', function() + it('does not trigger OptionSet from automatic background processing', function() + command('set background=light') + local child_server = new_pipename() local screen = tt.setup_child_nvim({ '--clean', + '--listen', + child_server, '--cmd', 'colorscheme vim', '--cmd', 'set noswapfile', '-c', - 'autocmd OptionSet background echo "did OptionSet, yay!"', + [[let g:background_optionset = 0]], + '-c', + [[autocmd OptionSet background let g:background_optionset += 1]], }) - screen:expect([[ - ^ | - {5:~} |*3 - {3:[No Name] 0,0-1 All}| - did OptionSet, yay! | - {5:-- TERMINAL --} | - ]]) + screen:expect({ any = '%[No Name%]' }) + local child_session = n.connect(child_server) + retry(nil, nil, function() + eq({ true, 'light' }, { child_session:request('nvim_eval', '&background') }) + end) + eq({ true, 0 }, { child_session:request('nvim_eval', 'g:background_optionset') }) end) it('sends theme update notifications when background changes #31652', function()