mirror of
https://github.com/neovim/neovim.git
synced 2025-09-13 14:58:18 +00:00
main: Refactor normal_enter to call os_inchar
directly
This makes it impossible for K_EVENT to interfere with mappings, but it also disables processing of events while in the middle of a mapping (Though this will be fixed later as this refactoring progresses). `may_sync_undo` is now called when K_EVENT is received. This is necessary to correctly update undo entry lists before executing some action.
This commit is contained in:
@@ -91,7 +91,7 @@ static void create_cursorhold_event(void)
|
||||
// Low level input function
|
||||
int os_inchar(uint8_t *buf, int maxlen, int ms, int tb_change_cnt)
|
||||
{
|
||||
if (rbuffer_size(input_buffer)) {
|
||||
if (maxlen && rbuffer_size(input_buffer)) {
|
||||
return (int)rbuffer_read(input_buffer, (char *)buf, (size_t)maxlen);
|
||||
}
|
||||
|
||||
@@ -116,14 +116,14 @@ int os_inchar(uint8_t *buf, int maxlen, int ms, int tb_change_cnt)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (rbuffer_size(input_buffer)) {
|
||||
if (maxlen && rbuffer_size(input_buffer)) {
|
||||
// Safe to convert rbuffer_read to int, it will never overflow since we use
|
||||
// relatively small buffers.
|
||||
return (int)rbuffer_read(input_buffer, (char *)buf, (size_t)maxlen);
|
||||
}
|
||||
|
||||
// If there are events, return the keys directly
|
||||
if (pending_events()) {
|
||||
if (maxlen && pending_events()) {
|
||||
return push_event_key(buf, maxlen);
|
||||
}
|
||||
|
||||
@@ -324,6 +324,11 @@ void input_done(void)
|
||||
input_eof = true;
|
||||
}
|
||||
|
||||
bool input_available(void)
|
||||
{
|
||||
return rbuffer_size(input_buffer) != 0;
|
||||
}
|
||||
|
||||
// This is a replacement for the old `WaitForChar` function in os_unix.c
|
||||
static InbufPollResult inbuf_poll(int ms)
|
||||
{
|
||||
|
Reference in New Issue
Block a user