]> git.wincent.com - pinnacle.git/blobdiff - lua/wincent/pinnacle.lua
fix: capture/extract highlight without relying on nvim_exec
[pinnacle.git] / lua / wincent / pinnacle.lua
index ed998791c5a02ee6bc42664795e4c173c4348cab..c10981e7fe6986b09654fa1f468e208ab82cf47f 100644 (file)
@@ -10,17 +10,7 @@ end
 
 -- Gets the current value of a highlight group.
 pinnacle.capture_highlight = function(group)
-  return pinnacle.capture_line('0verbose silent highlight ' .. group)
-end
-
--- Runs a command and returns the captured output as a single line.
---
--- Useful when we don't want to let long lines on narrow windows produce
--- unwanted embedded newlines.
-pinnacle.capture_line = function(command)
-  local capture = vim.fn.execute(command)
-
-  return pinnacle.sub_newlines(capture)
+  return group .. ' xxx ' .. pinnacle.extract_highlight(group)
 end
 
 -- Returns a copy of `group` decorated with `style` (eg. "bold",
@@ -51,7 +41,7 @@ pinnacle.decorate = function(style, group)
       original = before .. setting .. after
     end
 
-    return pinnacle.sub_newlines(original)
+    return original
   end
 end
 
@@ -107,21 +97,15 @@ end
 
 -- Extracts a highlight string from a group, recursively traversing
 -- linked groups, and returns a string suitable for passing to
--- `:highlight`.
+-- `:highlight` (effectivenly extracts the bit after "xxx").
 pinnacle.extract_highlight = function(group)
-  group = pinnacle.capture_highlight(group)
-
-  -- Traverse links back to authoritative group.
-  local links = ' links to '
-
-  while group:match(links) ~= nil do
-    local start, finish = string.find(group, links)
-    local linked = string.sub(group, finish + 1)
-    group = pinnacle.capture_highlight(linked)
-  end
-
-  -- Extract the highlighting details (the bit after "xxx").
-  return group:match('%sxxx%s+(.*)')
+  -- We originally relied on:
+  --
+  --    vim.api.nvim_exec('0verbose highlight ' .. group, true)
+  --
+  -- But for some reason it sometimes returns an empty string, so we do this
+  -- instead:
+  return pinnacle.highlight(pinnacle.dump(group))
 end
 
 -- Returns a string representation of a table containing bg, fg, term,
@@ -150,11 +134,6 @@ pinnacle.italicize = function(group)
   return pinnacle.decorate('italic', group)
 end
 
--- Replaces newlines with spaces.
-pinnacle.sub_newlines = function(string)
-  return ({string:gsub('[\r\n]', ' ')})[1]
-end
-
 -- Returns an underlined copy of `group` suitable for passing to
 -- `:highlight`.
 pinnacle.underline = function(group)