about summary refs log tree commit diff
path: root/fnl/nvrc/statusline.fnl
blob: 76efd4560d160e50b48476624aa23b1c389e4f7a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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 :info) 0)
      (set info (.. "%#DiagnosticSignInformation#I" (. count :info) " ")))
    (when (not= (. count :hints) 0)
      (set hints (.. "%#DiagnosticSignHint#H" (. count :hints))))
    (.. errors warnings info hints "%#StatusLine#")))

(global statusline {})
(set statusline.enable (fn []
                         (table.concat ["%#StatusLinePad#"
                                        "▊ "
                                        "%#StatusLine#"
                                        "%#StatusLineAccentBold#"
                                        "%f%m%r "
                                        "%#StatusLine#"
                                        "%l:%c | "
                                        (diagnostics)
                                        "%="
                                        "%#StatusLineAccentBold#"
                                        "%y "])))

(ag! ui-statusline
  (au! [WinEnter BufEnter] * #(setl! statusline "%!v:lua.statusline.enable()"))
  (au! [WinLeave BufLeave] * #(setl! statusline " ")))