echasnovski / mini.nvim

Library of 40+ independent Lua modules improving overall Neovim (version 0.8 and higher) experience with minimal effort
MIT License
4.45k stars 171 forks source link

Add support for 256 colors in mini-hipatterns #957

Closed gaardhus closed 3 weeks ago

gaardhus commented 3 weeks ago

Contributing guidelines

Module(s)

mini-hipatterns

Description

Thanks for some great modules!

I'm currently editing a config file which references colors based on their xterm number, ie:

color attachment  color117 color235
color bold        color179 color235
color error       color203 color235

Would it be possible to add color highlighting for those like for hex and rgb?

echasnovski commented 3 weeks ago

Thanks for the suggestion!

As long as it is possible to match target text with Lua patterns and compute hex color based on it, it is possible.

That said, this particular highlighting seems to be too much to be included directly in 'mini.hipatterns'. You can certainly create own highlighter. Here are some relevant sources to help with this:

Closing as not planned.

gaardhus commented 3 weeks ago

Thanks! I made it work with LazyVim by adding the following config:

-- Issue with guides for setting custom highlighters:
-- https://github.com/echasnovski/mini.nvim/issues/957#issuecomment-2160999162

-- xterm 256 color map from:
-- https://www.ditig.com/publications/256-colors-cheat-sheet
local color256_map = {
  color0 = "#000000",
  color1 = "#800000",
  color2 = "#008000",
  color3 = "#808000",
  color4 = "#000080",
  color5 = "#800080",
  color6 = "#008080",
  color7 = "#c0c0c0",
  color8 = "#808080",
  color9 = "#ff0000",
  color10 = "#00ff00",
  color11 = "#ffff00",
  color12 = "#0000ff",
  color13 = "#ff00ff",
  color14 = "#00ffff",
  color15 = "#ffffff",
  color16 = "#000000",
  color17 = "#00005f",
  color18 = "#000087",
  color19 = "#0000af",
  color20 = "#0000d7",
  color21 = "#0000ff",
  color22 = "#005f00",
  color23 = "#005f5f",
  color24 = "#005f87",
  color25 = "#005faf",
  color26 = "#005fd7",
  color27 = "#005fff",
  color28 = "#008700",
  color29 = "#00875f",
  color30 = "#008787",
  color31 = "#0087af",
  color32 = "#0087d7",
  color33 = "#0087ff",
  color34 = "#00af00",
  color35 = "#00af5f",
  color36 = "#00af87",
  color37 = "#00afaf",
  color38 = "#00afd7",
  color39 = "#00afff",
  color40 = "#00d700",
  color41 = "#00d75f",
  color42 = "#00d787",
  color43 = "#00d7af",
  color44 = "#00d7d7",
  color45 = "#00d7ff",
  color46 = "#00ff00",
  color47 = "#00ff5f",
  color48 = "#00ff87",
  color49 = "#00ffaf",
  color50 = "#00ffd7",
  color51 = "#00ffff",
  color52 = "#5f0000",
  color53 = "#5f005f",
  color54 = "#5f0087",
  color55 = "#5f00af",
  color56 = "#5f00d7",
  color57 = "#5f00ff",
  color58 = "#5f5f00",
  color59 = "#5f5f5f",
  color60 = "#5f5f87",
  color61 = "#5f5faf",
  color62 = "#5f5fd7",
  color63 = "#5f5fff",
  color64 = "#5f8700",
  color65 = "#5f875f",
  color66 = "#5f8787",
  color67 = "#5f87af",
  color68 = "#5f87d7",
  color69 = "#5f87ff",
  color70 = "#5faf00",
  color71 = "#5faf5f",
  color72 = "#5faf87",
  color73 = "#5fafaf",
  color74 = "#5fafd7",
  color75 = "#5fafff",
  color76 = "#5fd700",
  color77 = "#5fd75f",
  color78 = "#5fd787",
  color79 = "#5fd7af",
  color80 = "#5fd7d7",
  color81 = "#5fd7ff",
  color82 = "#5fff00",
  color83 = "#5fff5f",
  color84 = "#5fff87",
  color85 = "#5fffaf",
  color86 = "#5fffd7",
  color87 = "#5fffff",
  color88 = "#870000",
  color89 = "#87005f",
  color90 = "#870087",
  color91 = "#8700af",
  color92 = "#8700d7",
  color93 = "#8700ff",
  color94 = "#875f00",
  color95 = "#875f5f",
  color96 = "#875f87",
  color97 = "#875faf",
  color98 = "#875fd7",
  color99 = "#875fff",
  color100 = "#878699",
  color101 = "#87875f",
  color102 = "#878787",
  color103 = "#8787af",
  color104 = "#8787d7",
  color105 = "#8787ff",
  color106 = "#87af00",
  color107 = "#87af5f",
  color108 = "#87af87",
  color109 = "#87afaf",
  color110 = "#87afd7",
  color111 = "#87afff",
  color112 = "#87d700",
  color113 = "#87d75f",
  color114 = "#87d787",
  color115 = "#87d7af",
  color116 = "#87d7d7",
  color117 = "#87d7ff",
  color118 = "#87ff00",
  color119 = "#87ff5f",
  color120 = "#87ff87",
  color121 = "#87ffaf",
  color122 = "#87ffd7",
  color123 = "#87ffff",
  color124 = "#af0000",
  color125 = "#af005f",
  color126 = "#af0087",
  color127 = "#af00af",
  color128 = "#af00d7",
  color129 = "#af00ff",
  color130 = "#af5f00",
  color131 = "#af5f5f",
  color132 = "#af5f87",
  color133 = "#af5faf",
  color134 = "#af5fd7",
  color135 = "#af5fff",
  color136 = "#af8700",
  color137 = "#af875f",
  color138 = "#af8787",
  color139 = "#af87af",
  color140 = "#af87d7",
  color141 = "#af87ff",
  color142 = "#afaf00",
  color143 = "#afaf5f",
  color144 = "#afaf87",
  color145 = "#afafaf",
  color146 = "#afafd7",
  color147 = "#afafff",
  color148 = "#afd700",
  color149 = "#afd75f",
  color150 = "#afd787",
  color151 = "#afd7af",
  color152 = "#afd7d7",
  color153 = "#afd7ff",
  color154 = "#afff00",
  color155 = "#afff5f",
  color156 = "#afff87",
  color157 = "#afffaf",
  color158 = "#afffd7",
  color159 = "#afffff",
  color160 = "#d70000",
  color161 = "#d7005f",
  color162 = "#d70087",
  color163 = "#d700af",
  color164 = "#d700d7",
  color165 = "#d700ff",
  color166 = "#d75f00",
  color167 = "#d75f5f",
  color168 = "#d75f87",
  color169 = "#d75faf",
  color170 = "#d75fd7",
  color171 = "#d75fff",
  color172 = "#d78700",
  color173 = "#d7875f",
  color174 = "#d78787",
  color175 = "#d787af",
  color176 = "#d787d7",
  color177 = "#d787ff",
  color178 = "#d7af00",
  color179 = "#d7af5f",
  color180 = "#d7af87",
  color181 = "#d7afaf",
  color182 = "#d7afd7",
  color183 = "#d7afff",
  color184 = "#d7d700",
  color185 = "#d7d75f",
  color186 = "#d7d787",
  color187 = "#d7d7af",
  color188 = "#d7d7d7",
  color189 = "#d7d7ff",
  color190 = "#d7ff00",
  color191 = "#d7ff5f",
  color192 = "#d7ff87",
  color193 = "#d7ffaf",
  color194 = "#d7ffd7",
  color195 = "#d7ffff",
  color196 = "#ff0000",
  color197 = "#ff005f",
  color198 = "#ff0087",
  color199 = "#ff00af",
  color200 = "#ff00d7",
  color201 = "#ff00ff",
  color202 = "#ff5f00",
  color203 = "#ff5f5f",
  color204 = "#ff5f87",
  color205 = "#ff5faf",
  color206 = "#ff5fd7",
  color207 = "#ff5fff",
  color208 = "#ff8700",
  color209 = "#ff875f",
  color210 = "#ff8787",
  color211 = "#ff87af",
  color212 = "#ff87d7",
  color213 = "#ff87ff",
  color214 = "#ffaf00",
  color215 = "#ffaf5f",
  color216 = "#ffaf87",
  color217 = "#ffafaf",
  color218 = "#ffafd7",
  color219 = "#ffafff",
  color220 = "#ffd700",
  color221 = "#ffd75f",
  color222 = "#ffd787",
  color223 = "#ffd7af",
  color224 = "#ffd7d7",
  color225 = "#ffd7ff",
  color226 = "#ffff00",
  color227 = "#ffff5f",
  color228 = "#ffff87",
  color229 = "#ffffaf",
  color230 = "#ffffd7",
  color231 = "#ffffff",
  color232 = "#080808",
  color233 = "#121212",
  color234 = "#1c1c1c",
  color235 = "#262626",
  color236 = "#303030",
  color237 = "#3a3a3a",
  color238 = "#444444",
  color239 = "#4e4e4e",
  color240 = "#585858",
  color241 = "#626262",
  color242 = "#6c6c6c",
  color243 = "#767676",
  color244 = "#808080",
  color245 = "#8a8a8a",
  color246 = "#949494",
  color247 = "#9e9e9e",
  color248 = "#a8a8a8",
  color249 = "#b2b2b2",
  color250 = "#bcbcbc",
  color251 = "#c6c6c6",
  color252 = "#d0d0d0",
  color253 = "#dadada",
  color254 = "#e4e4e4",
  color255 = "#eeeeee",
}

local word_color_group = function(_, match)
  local hex = color256_map[match]
  if hex == nil then
    return nil
  end
  return MiniHipatterns.compute_hex_color_group(hex, "bg")
end

return {
  "echasnovski/mini.hipatterns",
  opts = {
    highlighters = {
      word_color = { pattern = "%S+", group = word_color_group },
    },
  },
}