summaryrefslogtreecommitdiffstats
path: root/autoload/focau/init.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/focau/init.vim')
-rw-r--r--autoload/focau/init.vim33
1 files changed, 33 insertions, 0 deletions
diff --git a/autoload/focau/init.vim b/autoload/focau/init.vim
new file mode 100644
index 00000000..7c9320ec
--- /dev/null
+++ b/autoload/focau/init.vim
@@ -0,0 +1,33 @@
+" WARNING: seems like we can't use <expr> maps, because we need side-effects
+" ALT: {s: <C-g>...<C-g>, o: <Esc>, i: <C-o>, c: <C-\>e}
+function! s:map_triggers(e)
+ for [a, i] in items({'FocusGained': 0, 'FocusLost': 1})
+ let key = keys(a:e)[i] | exe 'set '.key.'='.a:e[key]
+ exe "fun! s:F".i."()\nif g:focau.active|sil! doau ".a."|en|return''\nendf"
+ for [ms, prf] in items({'nv': '@=', 'o': ':call ', 'ic': '<C-r>='})
+ for m in split(ms, '\zs')
+ exe m.'noremap <silent> '.key.' '.prf.'<SID>F'.i.'()<CR>'
+ endfor | endfor | endfor
+endfunction
+
+
+function! focau#init#main()
+ augroup focau
+ autocmd!
+ augroup END
+
+ call focau#cursor#shape_preserve()
+
+ if g:focau.auto
+ let g:focau.focuses = focau#events#auto_choose()
+ let g:focau.cursors = focau#cursor#auto_shape()
+ "" FIX: must be dynamic and check curr lang before each mode/lang-switch
+ " call s:focau_lang_choose() "primary/secondary
+ endif
+
+ " Wrap choosen keys in event triggers
+ call s:map_triggers(g:focau.events)
+ " Start
+ call focau#events#enable(g:focau.active)
+ au focau VimEnter * if g:focau.active | sil! doau FocusGained | endif
+endfunction