diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 005931c9d6..5281c03282 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -2435,6 +2435,79 @@ A jump table for the options with a short description can be found at |Q_op|. buffers, for which window and buffer related autocommands can be ignored indefinitely without affecting the global 'eventignore'. + Note: The following events are considered to happen outside of a + window context and thus cannot be ignored by 'eventignorewin': + + |ChanInfo|, + |ChanOpen|, + |CmdUndefined|, + |CmdlineChanged|, + |CmdlineEnter|, + |CmdlineLeave|, + |CmdlineLeavePre|, + |CmdwinEnter|, + |CmdwinLeave|, + |ColorScheme|, + |ColorSchemePre|, + |CompleteChanged|, + |CompleteDone|, + |CompleteDonePre|, + |DiagnosticChanged|, + |DiffUpdated|, + |DirChanged|, + |DirChangedPre|, + |ExitPre|, + |FocusGained|, + |FocusLost|, + |FuncUndefined|, + |LspAttach|, + |LspDetach|, + |LspNotify|, + |LspProgress|, + |LspRequest|, + |LspTokenUpdate|, + |MenuPopup|, + |ModeChanged|, + |OptionSet|, + |QuickFixCmdPost|, + |QuickFixCmdPre|, + |QuitPre|, + |RemoteReply|, + |SafeState|, + |SessionLoadPost|, + |SessionWritePost|, + |ShellCmdPost|, + |Signal|, + |SourceCmd|, + |SourcePost|, + |SourcePre|, + |SpellFileMissing|, + |StdinReadPost|, + |StdinReadPre|, + |SwapExists|, + |Syntax|, + |TabClosed|, + |TabEnter|, + |TabLeave|, + |TabNew|, + |TabNewEntered|, + |TermClose|, + |TermEnter|, + |TermLeave|, + |TermOpen|, + |TermRequest|, + |TermResponse|, + |UIEnter|, + |UILeave|, + |User|, + |VimEnter|, + |VimLeave|, + |VimLeavePre|, + |VimResized|, + |VimResume|, + |VimSuspend|, + |WinNew| + *'expandtab'* *'et'* *'noexpandtab'* *'noet'* 'expandtab' 'et' boolean (default off) local to buffer diff --git a/runtime/lua/vim/_meta/options.lua b/runtime/lua/vim/_meta/options.lua index 8261c4fd3d..e2fbf9dbdf 100644 --- a/runtime/lua/vim/_meta/options.lua +++ b/runtime/lua/vim/_meta/options.lua @@ -2096,6 +2096,79 @@ vim.go.ei = vim.go.eventignore --- buffers, for which window and buffer related autocommands can be --- ignored indefinitely without affecting the global 'eventignore'. --- +--- Note: The following events are considered to happen outside of a +--- window context and thus cannot be ignored by 'eventignorewin': +--- +--- `ChanInfo`, +--- `ChanOpen`, +--- `CmdUndefined`, +--- `CmdlineChanged`, +--- `CmdlineEnter`, +--- `CmdlineLeave`, +--- `CmdlineLeavePre`, +--- `CmdwinEnter`, +--- `CmdwinLeave`, +--- `ColorScheme`, +--- `ColorSchemePre`, +--- `CompleteChanged`, +--- `CompleteDone`, +--- `CompleteDonePre`, +--- `DiagnosticChanged`, +--- `DiffUpdated`, +--- `DirChanged`, +--- `DirChangedPre`, +--- `ExitPre`, +--- `FocusGained`, +--- `FocusLost`, +--- `FuncUndefined`, +--- `LspAttach`, +--- `LspDetach`, +--- `LspNotify`, +--- `LspProgress`, +--- `LspRequest`, +--- `LspTokenUpdate`, +--- `MenuPopup`, +--- `ModeChanged`, +--- `OptionSet`, +--- `QuickFixCmdPost`, +--- `QuickFixCmdPre`, +--- `QuitPre`, +--- `RemoteReply`, +--- `SafeState`, +--- `SessionLoadPost`, +--- `SessionWritePost`, +--- `ShellCmdPost`, +--- `Signal`, +--- `SourceCmd`, +--- `SourcePost`, +--- `SourcePre`, +--- `SpellFileMissing`, +--- `StdinReadPost`, +--- `StdinReadPre`, +--- `SwapExists`, +--- `Syntax`, +--- `TabClosed`, +--- `TabEnter`, +--- `TabLeave`, +--- `TabNew`, +--- `TabNewEntered`, +--- `TermClose`, +--- `TermEnter`, +--- `TermLeave`, +--- `TermOpen`, +--- `TermRequest`, +--- `TermResponse`, +--- `UIEnter`, +--- `UILeave`, +--- `User`, +--- `VimEnter`, +--- `VimLeave`, +--- `VimLeavePre`, +--- `VimResized`, +--- `VimResume`, +--- `VimSuspend`, +--- `WinNew` +--- --- @type string vim.o.eventignorewin = "" vim.o.eiw = vim.o.eventignorewin diff --git a/src/gen/gen_eval_files.lua b/src/gen/gen_eval_files.lua index 75e4ed5860..7ae38a7d16 100755 --- a/src/gen/gen_eval_files.lua +++ b/src/gen/gen_eval_files.lua @@ -6,6 +6,7 @@ local util = require('gen.util') local fmt = string.format local DEP_API_METADATA = arg[1] +local TAGS_FILE = arg[2] local TEXT_WIDTH = 78 --- @class vim.api.metadata @@ -797,6 +798,23 @@ local function get_option_meta() end local r = vim.deepcopy(o) --[[@as vim.option_meta]] r.desc = o.desc:gsub('^ ', ''):gsub('\n ', '\n') + if o.full_name == 'eventignorewin' then + local events = require('nvim.auevents').events + local tags_file = assert(io.open(TAGS_FILE)) + local tags_text = tags_file:read('*a') + tags_file:close() + local map_fn = function(k, v) + if v then + return nil + end + local tag_pat = ('\n%s\t([^\t]+)\t'):format(k) + local link_text = ('|%s|'):format(k) + local tags_match = tags_text:match(tag_pat) --- @type string? + return tags_match and tags_match ~= 'deprecated.txt' and link_text or nil + end + local extra_desc = vim.iter(vim.spairs(events)):map(map_fn):join(',\n\t') + r.desc = r.desc:gsub('', extra_desc) + end r.defaults = r.defaults or {} if r.defaults.meta == nil then r.defaults.meta = optinfo[o.full_name].default diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 136f8689aa..11f1cab364 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -973,7 +973,7 @@ add_target(doc-vim ) add_target(doc-eval - COMMAND ${NVIM_LUA} ${PROJECT_SOURCE_DIR}/src/gen/gen_eval_files.lua ${FUNCS_METADATA} + COMMAND ${NVIM_LUA} ${PROJECT_SOURCE_DIR}/src/gen/gen_eval_files.lua ${FUNCS_METADATA} ${PROJECT_BINARY_DIR}/runtime/doc/tags DEPENDS nvim ${FUNCS_METADATA} diff --git a/src/nvim/options.lua b/src/nvim/options.lua index 105b82c6c9..6b67d43421 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -2752,6 +2752,11 @@ local options = { Similar to 'eventignore' but applies to a particular window and its buffers, for which window and buffer related autocommands can be ignored indefinitely without affecting the global 'eventignore'. + + Note: The following events are considered to happen outside of a + window context and thus cannot be ignored by 'eventignorewin': + + ]=], expand_cb = 'expand_set_eventignore', full_name = 'eventignorewin',