summaryrefslogtreecommitdiff
path: root/Src/prompt.c
diff options
context:
space:
mode:
authorOliver Kiddle <okiddle@yahoo.co.uk>2018-11-05 22:24:05 +0100
committerOliver Kiddle <okiddle@yahoo.co.uk>2018-11-05 22:24:05 +0100
commit37d0005a9e651f366076c930019464d162506a57 (patch)
tree11af20db3184af2a860791a9014e3b474de957a1 /Src/prompt.c
parent916ba78cd7c30800e7025bb91e735e27320fff29 (diff)
downloadzsh-37d0005a9e651f366076c930019464d162506a57.tar.gz
zsh-37d0005a9e651f366076c930019464d162506a57.zip
43747: new module to map colours from hex triplets to the nearest matching colour
Diffstat (limited to 'Src/prompt.c')
-rw-r--r--Src/prompt.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/Src/prompt.c b/Src/prompt.c
index 959ed8e3d..39edbdb2b 100644
--- a/Src/prompt.c
+++ b/Src/prompt.c
@@ -1621,7 +1621,24 @@ match_colour(const char **teststrp, int is_fg, int colour)
int shft, on, named = 0, tc;
if (teststrp) {
- if ((named = ialpha(**teststrp))) {
+ if (**teststrp == '#' && isxdigit((*teststrp)[1])) {
+ struct color_rgb color;
+ char *end;
+ zlong col = zstrtol(*teststrp+1, &end, 16);
+ if (end - *teststrp == 4) {
+ color.red = col >> 8 | ((col >> 8) << 4);
+ color.green = (col & 0xf0) >> 4;
+ color.green |= color.green << 4;
+ color.blue = col & 0xf;
+ color.blue |= color.blue << 4;
+ } else if (end - *teststrp == 7) {
+ color.red = col >> 16;
+ color.green = (col & 0xff00) >> 8;
+ color.blue = col & 0xff;
+ }
+ *teststrp = end;
+ colour = runhookdef(GETCOLORATTR, &color);
+ } else if ((named = ialpha(**teststrp))) {
colour = match_named_colour(teststrp);
if (colour == 8) {
/* default */