aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os/input.c
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2021-12-09 21:00:04 +0100
committerBjörn Linse <bjorn.linse@gmail.com>2021-12-09 21:00:04 +0100
commit2ec0e0a868ba20373ef4cd2d2540db7e829ddc56 (patch)
tree17f4f0bf638ba8b4d604392f260fd686b527af95 /src/nvim/os/input.c
parent2fe60905f6e12b3cae5c9ca2d1456fe23501be61 (diff)
downloadrneovim-2ec0e0a868ba20373ef4cd2d2540db7e829ddc56.tar.gz
rneovim-2ec0e0a868ba20373ef4cd2d2540db7e829ddc56.tar.bz2
rneovim-2ec0e0a868ba20373ef4cd2d2540db7e829ddc56.zip
refactor(misc1): move line_breakcheck family of functions to os/input.c
Diffstat (limited to 'src/nvim/os/input.c')
-rw-r--r--src/nvim/os/input.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c
index 5b231f205b..fc9bbbc8b0 100644
--- a/src/nvim/os/input.c
+++ b/src/nvim/os/input.c
@@ -183,6 +183,40 @@ void os_breakcheck(void)
updating_screen = save_us;
}
+#define BREAKCHECK_SKIP 1000
+static int breakcheck_count = 0;
+
+/// Check for CTRL-C pressed, but only once in a while.
+///
+/// Should be used instead of os_breakcheck() for functions that check for
+/// each line in the file. Calling os_breakcheck() each time takes too much
+/// time, because it will use system calls to check for input.
+void line_breakcheck(void)
+{
+ if (++breakcheck_count >= BREAKCHECK_SKIP) {
+ breakcheck_count = 0;
+ os_breakcheck();
+ }
+}
+
+/// Like line_breakcheck() but check 10 times less often.
+void fast_breakcheck(void)
+{
+ if (++breakcheck_count >= BREAKCHECK_SKIP * 10) {
+ breakcheck_count = 0;
+ os_breakcheck();
+ }
+}
+
+/// Like line_breakcheck() but check 100 times less often.
+void veryfast_breakcheck(void)
+{
+ if (++breakcheck_count >= BREAKCHECK_SKIP * 100) {
+ breakcheck_count = 0;
+ os_breakcheck();
+ }
+}
+
/// Test whether a file descriptor refers to a terminal.
///