summary refs log tree commit diff
path: root/.vim
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2022-08-02 22:17:29 +0200
committerRobert Günzler <r@gnzler.io>2022-08-02 22:17:29 +0200
commitb150114625fc48d08bf54d1c7cced09c6bbeec37 (patch)
tree0f2bb7b01b2cb28066ebfd6a50d79808b25dd790 /.vim
parent4283595954bc9373c6270bf553cc8aa52124195d (diff)
vim: make statusline resilient against missing highlights
Diffstat (limited to '.vim')
-rw-r--r--.vim/lua/statusline.lua29
1 files changed, 15 insertions, 14 deletions
diff --git a/.vim/lua/statusline.lua b/.vim/lua/statusline.lua
index cb9d166..7cd36b1 100644
--- a/.vim/lua/statusline.lua
+++ b/.vim/lua/statusline.lua
@@ -12,32 +12,32 @@ function _G.statusline()
   local hi = statusline_color(vim.fn.mode())
 
   local sl = hi
-  -- sl = sl .. statusline_append([[ ⢷]], '%#StatusLineIcon#', hi)
+  -- sl = sl .. statusline_append([[ ⢷]], 'StatusLineIcon', hi)
 
   sl = sl .. statusline_append(statusline_ts(),
-    '%#StatusLineTreesitter#', hi)
+    'StatusLineTreesitter', hi)
 
   sl = sl .. statusline_append(statusline_lsp_diagnostics(bufnr, hi),
-    '%#StatusLineDiagnostics#', hi)
+    'StatusLineDiagnostics', hi)
 
   sl = sl .. statusline_append(vim.trim(require('lsp-status').status()),
-    '%#StatusLineLsp#', hi)
+    'StatusLineLsp', hi)
 
   sl = sl .. statusline_append(statusline_dap(),
-    '%#StatusLineDap#', hi)
+    'StatusLineDap', hi)
 
   sl = sl .. [[ %= ]] -- spacer
 
   sl = sl .. statusline_append(statusline_notify(hi),
-    '%#StatusLineNotify#', hi)
+    'StatusLineNotify', hi)
 
   if spinner_ok then
     sl = sl .. statusline_append(spinner.status(bufnr),
-      '%#StatusLineJobs#', hi)
+      'StatusLineJobs', hi)
   end
 
   sl = sl .. statusline_append(require('nvim-lightbulb').get_status_text(),
-    '%#StatusLineLightbulb#', hi)
+    'StatusLineLightbulb', hi)
 
   sl = sl .. statusline_append([[ %l:%v --%p%%-- %y]], hi, hi)
 
@@ -65,6 +65,7 @@ function _G.statusline_append(element, hi, default_hi, opts)
   if not element or element == '' then return '' end
   opts = opts or { append_space = true }
 
+  if hi ~= nil then hi = '%#' .. hi .. '#' end
   if not (default_hi == '%*') then hi = default_hi end
   local el = hi .. element .. default_hi
   if opts.append_space then el = el .. ' ' end
@@ -78,18 +79,18 @@ function _G.statusline_lsp_diagnostics(bufnr, default_hi)
   local s = ''
   if #error_num > 0 then
     local errs = vim.fn.sign_getdefined('DiagnosticSignError')[1].text .. #error_num
-    s = s .. statusline_append(errs, '%#'..statusline_combine_hi('StatusLineDiagnostics', 'DiagnosticError')..'#', default_hi)
+    s = s .. statusline_append(errs, statusline_combine_hi('StatusLineDiagnostics', 'DiagnosticError'), default_hi)
   end
   if #warn_num > 0 then
     local warns = vim.fn.sign_getdefined('DiagnosticSignWarn')[1].text .. #warn_num
-    s = s .. statusline_append(warns, '%#'..statusline_combine_hi('StatusLineDiagnostics', 'DiagnosticWarn')..'#', default_hi)
+    s = s .. statusline_append(warns, statusline_combine_hi('StatusLineDiagnostics', 'DiagnosticWarn'), default_hi)
   end
   return vim.trim(s)
 end
 
 function _G.statusline_combine_hi(outer_name, inner_name)
-  local outer = vim.api.nvim_get_hl_by_name(outer_name, true)
-  local inner = vim.api.nvim_get_hl_by_name(inner_name, true)
+  local outer = vim.api.nvim_get_hl_by_id(vim.api.nvim_get_hl_id_by_name(outer_name), true)
+  local inner = vim.api.nvim_get_hl_by_id(vim.api.nvim_get_hl_id_by_name(inner_name), true)
   local hi = 'auto' .. outer_name .. inner_name
   if pcall(vim.api.nvim_get_hl_by_name, hi, true)  then return hi end
   local gui
@@ -137,9 +138,9 @@ function _G.statusline_notify(default_hi)
 
   local s = ''
   if n.hi then
-    s = s .. statusline_append(n.lvl_string .. ' ', '%#'..statusline_combine_hi('StatusLineNotify', n.hi)..'#', default_hi, { append_space = false })
+    s = s .. statusline_append(n.lvl_string .. ' ', statusline_combine_hi('StatusLineNotify', n.hi), default_hi, { append_space = false })
   end
-  s = s .. statusline_append(n.message, '%#StatusLineNotify#', default_hi)
+  s = s .. statusline_append(n.message, 'StatusLineNotify', default_hi)
   return vim.trim(s)
 end