aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/state.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/state.c')
-rw-r--r--src/nvim/state.c29
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;
+}