aboutsummaryrefslogtreecommitdiff
path: root/autoload/cursorline_current.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/cursorline_current.vim')
-rw-r--r--autoload/cursorline_current.vim31
1 files changed, 31 insertions, 0 deletions
diff --git a/autoload/cursorline_current.vim b/autoload/cursorline_current.vim
new file mode 100644
index 0000000..36bb210
--- /dev/null
+++ b/autoload/cursorline_current.vim
@@ -0,0 +1,31 @@
+" Suspend 'cursorline' when a window is inactive or inserting
+function! cursorline_current#Suspend() abort
+ let w:cursorline_current = &l:cursorline
+ let &l:cursorline = 0
+endfunction
+
+" Restore 'cursorline' when a window is active and non-insert
+function! cursorline_current#Restore() abort
+ let &l:cursorline = get(w:, 'cursorline_current', &g:cursorline)
+ let w:cursorline_current = &l:cursorline
+endfunction
+
+" Call cursorline_current#Suspend() on all windows besides the current one
+function! cursorline_current#Load() abort
+
+ " Cache current window index
+ let wcur = winnr()
+
+ " Iterate through all the windows and suspend all but the current one
+ for wnum in range(1, winnr('$'))
+ if wnum == wcur
+ continue
+ endif
+ execute wnum . 'wincmd w'
+ call cursorline_current#Suspend()
+ endfor
+
+ " Return to the window in which we started
+ execute wcur . 'wincmd w'
+
+endfunction