about summary refs log tree commit diff
path: root/fnl/nvrc/statusline.fnl
diff options
context:
space:
mode:
authorsefidel <contact@sefidel.net>2022-03-06 20:51:38 +0900
committersefidel <contact@sefidel.net>2022-03-06 20:51:38 +0900
commitf5cc3f01fae31acdb35b9c70b739a130b059f05f (patch)
tree452acff8b6c247bf8459e1a6c81767cea116a89e /fnl/nvrc/statusline.fnl
parent3c1989af2f178711055f75639ac5208c166cec68 (diff)
downloadnvimrc-f5cc3f01fae31acdb35b9c70b739a130b059f05f.tar.gz
nvimrc-f5cc3f01fae31acdb35b9c70b739a130b059f05f.zip
feat(ui): combine statusline into one file
Diffstat (limited to 'fnl/nvrc/statusline.fnl')
-rw-r--r--fnl/nvrc/statusline.fnl41
1 files changed, 41 insertions, 0 deletions
diff --git a/fnl/nvrc/statusline.fnl b/fnl/nvrc/statusline.fnl
new file mode 100644
index 0000000..fbac5a8
--- /dev/null
+++ b/fnl/nvrc/statusline.fnl
@@ -0,0 +1,41 @@
+(import-macros {: setl!} :nvrc.macro.set)
+(import-macros {: ag!
+                : au!} :nvrc.macro.event)
+
+(fn diagnostics []
+  (let [count {}
+        levels {:errors :Error :warnings :Warn :info :Info :hints :Hint}]
+    (each [k level (pairs levels)]
+      (tset count k (vim.tbl_count (vim.diagnostic.get 0 {:severity level}))))
+    (var errors "")
+    (var warnings "")
+    (var hints "")
+    (var info "")
+    (when (not= (. count :errors) 0)
+      (set errors (.. "%#DiagnosticSignError#E" (. count :errors))))
+    (when (not= (. count :warnings) 0)
+      (set warnings
+           (.. " %#DiagnosticSignWarn#W" (. count :warnings))))
+    (when (not= (. count :hints) 0)
+      (set hints (.. " %#DiagnosticSignHint#H" (. count :hints))))
+    (when (not= (. count :info) 0)
+      (set info (.. " %#DiagnosticSignInformation#I" (. count :info))))
+    (.. errors warnings hints info "%#StatusLine#")))
+
+(global statusline {})
+(set statusline.enable (fn []
+                         (table.concat ["%#StatusLineAccent#"
+                                        "▊ "
+                                        "%#StatusLine#"
+                                        "%#StatusLineAccentBold#"
+                                        "%f%m%r "
+                                        "%#StatusLine#"
+                                        "%l:%c | "
+                                        (diagnostics)
+                                        "%="
+                                        "%#StatusLineAccentBold#"
+                                        "%y *%n "])))
+
+(ag! ui-statusline
+  (au! [WinEnter BufEnter] * #(setl! statusline "%!v:lua.statusline.enable()"))
+  (au! [WinLeave BufLeave] * #(setl! statusline " ")))