diff options
Diffstat (limited to 'src/nvim/state.c')
-rw-r--r-- | src/nvim/state.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/nvim/state.c b/src/nvim/state.c index 89e4b9cbbf..ccf2a81adb 100644 --- a/src/nvim/state.c +++ b/src/nvim/state.c @@ -272,20 +272,26 @@ void may_trigger_modechanged(void) /// When true in a safe state when starting to wait for a character. static bool was_safe = false; +/// Return whether currently it is safe, assuming it was safe before (high level +/// state didn't change). +static bool is_safe_now(void) +{ + return stuff_empty() + && typebuf.tb_len == 0 + && !using_script() + && !global_busy; +} + /// Trigger SafeState if currently in s safe state, that is "safe" is TRUE and /// there is no typeahead. void may_trigger_safestate(bool safe) { - bool is_safe = safe - && stuff_empty() - && typebuf.tb_len == 0 - && !using_script() - && !global_busy; + bool is_safe = safe && is_safe_now(); if (was_safe != is_safe) { // Only log when the state changes, otherwise it happens at nearly // every key stroke. - DLOG(is_safe ? "Start triggering SafeState" : "Stop triggering SafeState"); + DLOG(is_safe ? "SafeState: Start triggering" : "SafeState: Stop triggering"); } if (is_safe) { apply_autocmds(EVENT_SAFESTATE, NULL, NULL, false, curbuf); @@ -296,10 +302,15 @@ void may_trigger_safestate(bool safe) /// Something changed which causes the state possibly to be unsafe, e.g. a /// character was typed. It will remain unsafe until the next call to /// may_trigger_safestate(). -void state_no_longer_safe(void) +void state_no_longer_safe(const char *reason) { - if (was_safe) { - DLOG("safe state reset"); + if (was_safe && reason != NULL) { + DLOG("SafeState reset: %s", reason); } was_safe = false; } + +bool get_was_safe_state(void) +{ + return was_safe; +} |