Open albfan opened 4 years ago
You can avoid having to convert to hex, at least, by turning on CSS expression parsing:
:call css_color#init('css','none','')
… and just copy-pasting to a comment:
point = egg_graph_point_new ();
point->x = (gint32) up_history_item_get_time (item) - offset;
point->y = up_history_item_get_value (item);
if (up_history_item_get_state (item) == UP_DEVICE_STATE_CHARGING)
point->color = gpm_color_from_rgb (255, 0, 0); // rgb(255, 0, 0)
else if (up_history_item_get_state (item) == UP_DEVICE_STATE_DISCHARGING)
point->color = gpm_color_from_rgb (0, 0, 255); // rgb(0, 0, 255)
else if (up_history_item_get_state (item) == UP_DEVICE_STATE_PENDING_CHARGE)
point->color = gpm_color_from_rgb (200, 0, 0); // rgb(200, 0, 0)
else if (up_history_item_get_state (item) == UP_DEVICE_STATE_PENDING_DISCHARGE)
point->color = gpm_color_from_rgb (0, 0, 200); // rgb(0, 0, 200)
else {
if (g_strcmp0 (history_type, GPM_HISTORY_RATE_VALUE) == 0)
point->color = gpm_color_from_rgb (255, 255, 255); // rgb(255, 255, 255)
else
point->color = gpm_color_from_rgb (0, 255, 0); // rgb(0, 255, 0)
Not a great solution, but a workaround that you can use immediately at least.
Beyond that, I’ll have to think about how to do this.
hmm, rgb is a nice trick.
Using:
:call css_color#init('css','none','cBlock')
I'm playing with s:_csscolor
. This diff get my started:
$ git diff
diff --git i/autoload/css_color.vim w/autoload/css_color.vim
index 1ccaae1..b3580a9 100644
--- i/autoload/css_color.vim
+++ w/autoload/css_color.vim
@@ -144,6 +144,7 @@ function! s:create_syn_match()
let rgb_color
\ = funcname == 'rgb' ? s:rgb2color(submatch(3),submatch(4),submatch(5))
\ : funcname == 'hsl' ? s:hsl2color(submatch(3),submatch(4),submatch(5))
+ \ : funcname == 'gpm_color_from_rgb ' ? s:rgb2color(submatch(3),submatch(4),submatch(5))
\ : strlen(hex) >= 6 ? tolower(hex[0:5])
\ : strlen(hex) >= 3 ? tolower(hex[0].hex[0].hex[1].hex[1].hex[2].hex[2])
\ : ''
@@ -200,7 +201,7 @@ endfunction
let s:_hexcolor = '#\(\x\{3}\%(\>\|\x\{3}\>\)\)' " submatch 1
let s:_rgbacolor = '#\(\x\{3}\%(\>\|\x\%(\>\|\x\{2}\%(\>\|\x\{2}\>\)\)\)\)' " submatch 1
-let s:_funcname = '\(rgb\|hsl\)a\?' " submatch 2
+let s:_funcname = '\(rgb\|hsl\|gpm_color_from_rgb \)a\?' " submatch 2
let s:_ws_ = '\s*'
let s:_numval = s:_ws_ . '\(\d\{1,3}%\?\)' " submatch 3,4,5
let s:_listsep = s:_ws_ . ','
But still has to ignore the function name (with contained
or similar)
If I found something more general than my use case (a general extension valid for more use cases I will let you know)
Would be interesting to find different interesting use cases
Right now this allows me to see the color without include text only useful to understand the colors involved, which is really great.
Other interesting things:
In general what this issue looks for is for a custom parse regexp that discover a color definition (R,G,B in my use case) and paint it as a info layer somewhere for each match.
Using functions to create rgb colors is pretty command in UI, if you want to check what color you're creating would be interesting to add custom highlights for a file:
Real example:
Defining colors for a graph point:
https://gitlab.gnome.org/GNOME/gnome-power-manager/-/blob/master/src/gpm-statistics.c#L794
Adding comments after each line (and converting to hex is a workaround:
but would be nice if we are able to highlight just the function:
That would be something like automatize: