about summary refs log tree commit diff
path: root/fnl/nvrc/ui/modules/vi_mode.fnl
diff options
context:
space:
mode:
Diffstat (limited to 'fnl/nvrc/ui/modules/vi_mode.fnl')
-rw-r--r--fnl/nvrc/ui/modules/vi_mode.fnl40
1 files changed, 40 insertions, 0 deletions
diff --git a/fnl/nvrc/ui/modules/vi_mode.fnl b/fnl/nvrc/ui/modules/vi_mode.fnl
new file mode 100644
index 0000000..1b9f1a1
--- /dev/null
+++ b/fnl/nvrc/ui/modules/vi_mode.fnl
@@ -0,0 +1,40 @@
+(local modes {:n :NORMAL
+              :no :NORMAL
+              :v :VISUAL
+              :V "V-LINE"
+              "\022" "V-BLOCK"
+              :s :SELECT
+              :S "L-SELECT"
+              "\019" "B-SELECT"
+              :i :INSERT
+              :ic :INSERT
+              :R :REPLACE
+              :Rv "V-REPLACE"
+              :c :COMMAND
+              :cv "VIM-EX"
+              :ce :EX
+              :r :PROMPT
+              :rm :MOAR
+              :r? :CONFIRM
+              :! :SHELL
+              :t :TERMINAL})
+
+(fn mode []
+  (let [current-mode (. (vim.api.nvim_get_mode) :mode)]
+    (: (string.format "%s " (. modes current-mode)) :upper)))
+
+(fn update-mode-colors []
+  (let [current-mode (. (vim.api.nvim_get_mode) :mode)]
+    (var mode-color "%#StatuslineAccent#")
+    (if (= current-mode :n) (set mode-color "%#StatuslineAccent#")
+        (or (= current-mode :i) (= current-mode :ic))
+        (set mode-color "%#StatuslineInsertAccent#")
+        (or (or (= current-mode :v) (= current-mode :V))
+            (= current-mode "\022"))
+        (set mode-color "%#StatusLineVisualAccent#") (= current-mode :R)
+        (set mode-color "%#StatusLineReplaceAccent#") (= current-mode :c)
+        (set mode-color "%#StatusLineCmdLineAccent#") (= current-mode :t)
+        (set mode-color "%#StatusLineTerminalAccent#"))
+    mode-color))
+
+{: mode : update-mode-colors}