mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 03:48:18 +00:00
api: Add vim_input function and mark vim_feedkeys as deferred
The `vim_feedkeys` must be deferred because it can potentially free the buffer passed to `os_inchar`(which in turns calls `vim_feedkeys` indirectly). The new `vim_input` function can be used to emulate user input(Since it does not mess with the typeahead, it is safe to execute without deferring).
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#include "nvim/misc2.h"
|
||||
#include "nvim/term.h"
|
||||
#include "nvim/getchar.h"
|
||||
#include "nvim/os/input.h"
|
||||
|
||||
#define LINE_BUFFER_SIZE 4096
|
||||
|
||||
@@ -51,6 +52,7 @@ void vim_command(String str, Error *err)
|
||||
/// @param mode specifies the mapping options
|
||||
/// @see feedkeys()
|
||||
void vim_feedkeys(String keys, String mode)
|
||||
FUNC_ATTR_DEFERRED
|
||||
{
|
||||
bool remap = true;
|
||||
bool typed = false;
|
||||
@@ -78,6 +80,18 @@ void vim_feedkeys(String keys, String mode)
|
||||
typebuf_was_filled = true;
|
||||
}
|
||||
|
||||
/// Pass input keys to Neovim. Unlike `vim_feedkeys`, this will use a
|
||||
/// lower-level input buffer and the call is not deferred.
|
||||
/// This is the most reliable way to emulate real user input.
|
||||
///
|
||||
/// @param keys to be typed
|
||||
/// @return The number bytes actually written, which can be lower than
|
||||
/// requested if the buffer becomes full.
|
||||
Integer vim_input(String keys)
|
||||
{
|
||||
return (Integer)input_enqueue(keys);
|
||||
}
|
||||
|
||||
/// Replace any terminal codes with the internal representation
|
||||
///
|
||||
/// @see replace_termcodes
|
||||
|
Reference in New Issue
Block a user