From 33d4bb4a644c05d369d02809f0b545d956e51da1 Mon Sep 17 00:00:00 2001 From: akianonymus Date: Sun, 26 Feb 2023 23:47:38 +0530 Subject: fix: Make always update buffer configurable | #52 disabled by default --- README.md | 26 +++++++++++++++++ doc/colorizer.txt | 62 +++++++++++++++++---------------------- doc/modules/colorizer.color.html | 49 +++++-------------------------- doc/modules/colorizer.html | 5 ++++ doc/modules/colorizer.utils.html | 63 +++++++++++++++++++++------------------- lua/colorizer.lua | 48 ++++++++++++++++-------------- 6 files changed, 124 insertions(+), 129 deletions(-) diff --git a/README.md b/README.md index 9944770..bec9fc3 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,9 @@ library to do custom highlighting themselves. -- parsers can contain values used in |user_default_options| sass = { enable = false, parsers = { "css" }, }, -- Enable sass colors virtualtext = "■", + -- update color values even if buffer is not focused + -- example use: cmp_menu, cmp_docs + always_update = false }, -- all the sub-options of filetypes apply to buftypes buftypes = {}, @@ -160,6 +163,13 @@ require 'colorizer'.setup { }, } +-- Alwyas update the color values in cmp_docs even if it not focused +require 'colorizer'.setup { + filetypes = { + '*'; -- Highlight all files, but customize some others. + cmp_docs = {always_update = true} + }, +} ``` In `user_default_options`, there are 2 types of options @@ -188,6 +198,22 @@ e.g: Here `names`, `RGB`, `RRGGBB`, `RRGGBBAA` is enabled but not `rgb_fn` and ` require 'colorizer'.setup { user_default_options = { css_fn = false, css = true } } ``` +### Updating color even when buffer is not focused + +Like in floating windows, popup menu, etc + +use `always_update` flag. Use with caution, as this will update for any change in that buffer, whether focused or not. + +```lua +-- Alwyas update the color values in cmp_docs even if it not focused +require 'colorizer'.setup { + filetypes = { + '*'; -- Highlight all files, but customize some others. + cmp_docs = {always_update = true} + }, +} +``` + All the above examples can also be apply to buftypes. Also no buftypes trigger colorizer by default Buftype value is fetched by `vim.bo.buftype` diff --git a/doc/colorizer.txt b/doc/colorizer.txt index 0dfbf63..a7d21b5 100644 --- a/doc/colorizer.txt +++ b/doc/colorizer.txt @@ -245,6 +245,8 @@ user_default_options *colorizer.user_default_options* -- parsers can contain values used in |user_default_options| sass = { enable = false, parsers = { css }, }, -- Enable sass colors virtualtext = "■", + -- update color values even if buffer is not focused + always_update = false } < @@ -263,6 +265,7 @@ user_default_options *colorizer.user_default_options* {tailwind} - boolean|string {sass} - table {virtualtext} - string + {always_update} - boolean @@ -430,9 +433,8 @@ Functions: ~ |name_parser| - Grab all the colour values from `vim.api.nvim_get_color_map` and create a lookup table. - |rgb_function_parser| - Parse for rgb() css function and return rgb hex. - - |rgba_function_parser| - Parse for rgba() css function and return rgb hex. + |rgb_function_parser| - Parse for rgb() rgba() css function and return rgb + hex. |rgba_hex_parser| - parse for #rrggbbaa and return rgb hex. @@ -529,33 +531,20 @@ name_parser({line}, {i}, {opts}) *colorizer.color.name_parser* -rgb_function_parser({line}, {i}) *colorizer.color.rgb_function_parser* - Parse for rgb() css function and return rgb hex. - - Parameters: ~ - {line} - string: Line to parse - {i} - number: Index of line from where to start parsing - - returns:~ - number or nil: Index of line where the rgb function ended - string or nil: rgb hex value - - - -rgba_function_parser({line}, {i}) *colorizer.color.rgba_function_parser* - Parse for rgba() css function and return rgb hex. +rgb_function_parser({line}, {i}, {opts}) *colorizer.color.rgb_function_parser* + Parse for rgb() rgba() css function and return rgb hex. - Todo consider removing the regexes here - Todo this might not be the best approach to alpha channel. - Things like pumblend might be useful here. + For more info: + https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb Parameters: ~ {line} - string: Line to parse {i} - number: Index of line from where to start parsing + {opts} - table: Values passed from matchers like prefix returns:~ - number or nil: Index of line where the rgba function ended + number or nil: Index of line where the rgb/rgba function ended string or nil: rgb hex value @@ -747,14 +736,14 @@ Functions: ~ |byte_is_valid_colorchar| - Valid colorchars are alphanumeric and - ( tailwind colors ) + |count| - Count the number of character in a string + |get_last_modified| - Get last modified time of a file |merge| - Merge two tables. |parse_hex| - Obvious. - |percent_or_hex| - Obvious. - |watch_file| - Watch a file for changes and execute callback @@ -791,6 +780,18 @@ byte_is_valid_colorchar({byte}) *colorizer.utils.byte_is_valid_colorchar* +count({str}, {pattern}) *colorizer.utils.count* + Count the number of character in a string + + Parameters: ~ + {str} - string + {pattern} - string + + returns:~ + number + + + get_last_modified({path}) *colorizer.utils.get_last_modified* Get last modified time of a file @@ -828,24 +829,13 @@ parse_hex({byte}) *colorizer.utils.parse_hex* -percent_or_hex({v}) *colorizer.utils.percent_or_hex* - Obvious. - - Parameters: ~ - {v} - string - - returns:~ - number or nil - - - watch_file({path}, {callback}, {...}) *colorizer.utils.watch_file* Watch a file for changes and execute callback Parameters: ~ {path} - string: File path {callback} - function: Callback to execute - {...} - array: params for callback + {...} - table: params for callback returns:~ function or nil diff --git a/doc/modules/colorizer.color.html b/doc/modules/colorizer.color.html index 751214c..5947611 100644 --- a/doc/modules/colorizer.color.html +++ b/doc/modules/colorizer.color.html @@ -86,12 +86,8 @@ Grab all the colour values from vim.api.nvim_get_color_map and create a lookup table. - rgb_function_parser (line, i) - Parse for rgb() css function and return rgb hex. - - - rgba_function_parser (line, i) - Parse for rgba() css function and return rgb hex. + rgb_function_parser (line, i, opts) + Parse for rgb() rgba() css function and return rgb hex. rgba_hex_parser (line, i, opts) @@ -292,10 +288,11 @@
- rgb_function_parser (line, i) + rgb_function_parser (line, i, opts)
- Parse for rgb() css function and return rgb hex. + Parse for rgb() rgba() css function and return rgb hex. + For more info: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb

Parameters:

@@ -306,45 +303,15 @@
  • i number: Index of line from where to start parsing
  • - - -

    Returns:

    -
      -
    1. - number|nil: Index of line where the rgb function ended
    2. -
    3. - string|nil: rgb hex value
    4. -
    - - - - -
    -
    - - rgba_function_parser (line, i) -
    -
    - Parse for rgba() css function and return rgb hex. - Todo consider removing the regexes here - Todo this might not be the best approach to alpha channel. - Things like pumblend might be useful here. - - -

    Parameters:

    -

    Returns:

    1. - number|nil: Index of line where the rgba function ended
    2. + number|nil: Index of line where the rgb/rgba function ended
    3. string|nil: rgb hex value
    diff --git a/doc/modules/colorizer.html b/doc/modules/colorizer.html index 1196e4d..1d338e1 100644 --- a/doc/modules/colorizer.html +++ b/doc/modules/colorizer.html @@ -437,6 +437,8 @@ In user_default_options -- parsers can contain values used in |user_default_options| sass = { enable = false, parsers = { css }, }, -- Enable sass colors virtualtext = "■", + -- update color values even if buffer is not focused + always_update = false } @@ -484,6 +486,9 @@ In user_default_options
  • virtualtext string
  • +
  • always_update + boolean +
  • diff --git a/doc/modules/colorizer.utils.html b/doc/modules/colorizer.utils.html index d6a0216..5ebd197 100644 --- a/doc/modules/colorizer.utils.html +++ b/doc/modules/colorizer.utils.html @@ -74,6 +74,10 @@ Valid colorchars are alphanumeric and - ( tailwind colors ) +
    count (str, pattern) + Count the number of character in a string + + get_last_modified (path) Get last modified time of a file @@ -86,10 +90,6 @@ Obvious. - percent_or_hex (v) - Obvious. - - watch_file (path, callback, ...) Watch a file for changes and execute callback @@ -176,6 +176,34 @@ +
    +
    + + count (str, pattern) +
    +
    + Count the number of character in a string + + +

    Parameters:

    + + +

    Returns:

    +
      + + number +
    + + + +
    @@ -255,31 +283,6 @@ - -
    - - percent_or_hex (v) -
    -
    - Obvious. - - -

    Parameters:

    - - -

    Returns:

    -
      - - number|nil -
    - - - -
    @@ -298,7 +301,7 @@ function: Callback to execute
  • ... - array: params for callback + table: params for callback
  • diff --git a/lua/colorizer.lua b/lua/colorizer.lua index f7c189f..f61e480 100644 --- a/lua/colorizer.lua +++ b/lua/colorizer.lua @@ -139,6 +139,8 @@ local CURRENT_BUF = 0 -- -- parsers can contain values used in |user_default_options| -- sass = { enable = false, parsers = { css }, }, -- Enable sass colors -- virtualtext = "■", +-- -- update color values even if buffer is not focused +-- always_update = false -- } -- ---@table user_default_options @@ -155,6 +157,7 @@ local CURRENT_BUF = 0 --@field tailwind boolean|string --@field sass table --@field virtualtext string +--@field always_update boolean local USER_DEFAULT_OPTIONS = { RGB = true, RRGGBB = true, @@ -169,6 +172,7 @@ local USER_DEFAULT_OPTIONS = { tailwind = false, sass = { enable = false, parsers = { css = true } }, virtualtext = "■", + always_update = false, } local OPTIONS = { buf = {}, file = {} } @@ -200,8 +204,6 @@ local function parse_buffer_options(options) ["css"] = { "names", "RGB", "RRGGBB", "RRGGBBAA", "hsl_fn", "rgb_fn" }, ["css_fn"] = { "hsl_fn", "rgb_fn" }, } - local css_includes = { "names", "RGB", "RRGGBB", "RRGGBBAA", "hsl_fn", "rgb_fn" } - local css_fn_includes = { "hsl_fn", "rgb_fn" } local default_opts = USER_DEFAULT_OPTIONS local function handle_alias(name, opts, d_opts) @@ -364,28 +366,30 @@ function colorizer.attach_to_buffer(buf, options, typ) CURRENT_BUF = buf end - -- attach using lua api so buffer gets updated even when not the current buffer - -- completely moving to buf_attach is not possible because it doesn't handle all the text change events - vim.api.nvim_buf_attach(buf, false, { - on_lines = function(_, buffer) - -- only reload if the buffer is not the current one - if not (CURRENT_BUF == buffer) then - -- only reload if it was not disabled using detach_from_buffer - if BUFFER_OPTIONS[buf] then - rehighlight_buffer(buf, options, BUFFER_LOCAL[buf]) + if options.always_update then + -- attach using lua api so buffer gets updated even when not the current buffer + -- completely moving to buf_attach is not possible because it doesn't handle all the text change events + vim.api.nvim_buf_attach(buf, false, { + on_lines = function(_, buffer) + -- only reload if the buffer is not the current one + if not (CURRENT_BUF == buffer) then + -- only reload if it was not disabled using detach_from_buffer + if BUFFER_OPTIONS[buf] then + rehighlight_buffer(buf, options, BUFFER_LOCAL[buf]) + end end - end - end, - on_reload = function(_, buffer) - -- only reload if the buffer is not the current one - if not (CURRENT_BUF == buffer) then - -- only reload if it was not disabled using detach_from_buffer - if BUFFER_OPTIONS[buf] then - rehighlight_buffer(buf, options, BUFFER_LOCAL[buf]) + end, + on_reload = function(_, buffer) + -- only reload if the buffer is not the current one + if not (CURRENT_BUF == buffer) then + -- only reload if it was not disabled using detach_from_buffer + if BUFFER_OPTIONS[buf] then + rehighlight_buffer(buf, options, BUFFER_LOCAL[buf]) + end end - end - end, - }) + end, + }) + end autocmds[#autocmds + 1] = autocmd(text_changed_au, { group = au_group_id, -- cgit v1.2.3-70-g09d2