vim-patch:8.1.2047: cannot check the current state

Problem:    Cannot check the current state.
Solution:   Add the state() function.

0e57dd859e

Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
zeertzjq
2023-08-21 11:22:25 +08:00
parent 4956f26744
commit 64ccfdaafe
7 changed files with 161 additions and 8 deletions

View File

@@ -5713,6 +5713,7 @@ function vim.fn.mkdir(name, flags, prot) end
--- If [expr] is supplied and it evaluates to a non-zero Number or
--- a non-empty String (|non-zero-arg|), then the full mode is
--- returned, otherwise only the first letter is returned.
--- Also see |state()|.
---
--- n Normal
--- no Operator-pending
@@ -8744,6 +8745,34 @@ function vim.fn.sqrt(expr) end
--- @return any
function vim.fn.srand(expr) end
--- Return a string which contains characters indicating the
--- current state. Mostly useful in callbacks that want to do
--- work that may not always be safe. Roughly this works like:
--- - callback uses state() to check if work is safe to do.
--- If yes, then do it right away.
--- Otherwise add to work queue and add SafeState autocommand.
--- - When SafeState is triggered, check with state() if the work
--- can be done now, and if yes remove it from the queue and
--- execute.
--- Also see |mode()|.
---
--- When {what} is given only characters in this string will be
--- added. E.g, this checks if the screen has scrolled: >vim
--- if state('s') != ''
---
--- These characters indicate the state:
--- m halfway a mapping, :normal command, feedkeys() or
--- stuffed command
--- o operator pending or waiting for a command argument
--- a Insert mode autocomplete active
--- x executing an autocommand
--- c callback invoked (repeats for recursiveness up to "ccc")
--- s screen has scrolled for messages
---
--- @param what? string
--- @return any
function vim.fn.state(what) end
--- With |--headless| this opens stdin and stdout as a |channel|.
--- May be called only once. See |channel-stdio|. stderr is not
--- handled by this function, see |v:stderr|.