aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJade Lovelace <software@lfcode.ca>2022-02-25 18:45:48 -0800
committerJade Lovelace <software@lfcode.ca>2022-02-25 18:51:16 -0800
commite5b5cbd19c6374540ee6ffa6d8b27ceb8a293f65 (patch)
tree4cfed559ef65fe79ce35de61d2ea01451e6c26c5
parentfdea15723fab6a3ee96218f13669d9f2e0a6d6d7 (diff)
downloadrneovim-e5b5cbd19c6374540ee6ffa6d8b27ceb8a293f65.tar.gz
rneovim-e5b5cbd19c6374540ee6ffa6d8b27ceb8a293f65.tar.bz2
rneovim-e5b5cbd19c6374540ee6ffa6d8b27ceb8a293f65.zip
feat(hardcopy): check gui colours for highlights first
Previously, :hardcopy would only use terminal highlight colours, with a fixed mapping table, despite internally supporting true colour. This patch looks at the guifg colour first while coming up with the printing highlight colours, then falls back to the terminal ones. I have passed through the modec argument in this change because it was there before, but it could be deleted and hardcoded to 'c' since nobody sets it to anything else anywhere.
-rw-r--r--src/nvim/hardcopy.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/src/nvim/hardcopy.c b/src/nvim/hardcopy.c
index 6fc70144ac..eb10c65be9 100644
--- a/src/nvim/hardcopy.c
+++ b/src/nvim/hardcopy.c
@@ -386,30 +386,43 @@ static uint32_t prt_get_term_color(int colorindex)
return cterm_color_8[colorindex % 8];
}
-static void prt_get_attr(int hl_id, prt_text_attr_T *pattr, int modec)
+static uint32_t prt_get_color(int hl_id, int modec)
{
int colorindex;
uint32_t fg_color;
+ const char *color = highlight_color(hl_id, "fg#", 'g');
+ if (color != NULL) {
+ RgbValue rgb = name_to_color(color);
+ if (rgb != -1) {
+ return (uint32_t)rgb;
+ }
+ }
+
+ color = highlight_color(hl_id, "fg", modec);
+ if (color == NULL) {
+ colorindex = 0;
+ } else {
+ colorindex = atoi(color);
+ }
+
+ if (colorindex >= 0 && colorindex < t_colors) {
+ fg_color = prt_get_term_color(colorindex);
+ } else {
+ fg_color = PRCOLOR_BLACK;
+ }
+
+ return fg_color;
+}
+
+static void prt_get_attr(int hl_id, prt_text_attr_T *pattr, int modec)
+{
pattr->bold = (highlight_has_attr(hl_id, HL_BOLD, modec) != NULL);
pattr->italic = (highlight_has_attr(hl_id, HL_ITALIC, modec) != NULL);
pattr->underline = (highlight_has_attr(hl_id, HL_UNDERLINE, modec) != NULL);
pattr->undercurl = (highlight_has_attr(hl_id, HL_UNDERCURL, modec) != NULL);
- {
- const char *color = highlight_color(hl_id, "fg", modec);
- if (color == NULL) {
- colorindex = 0;
- } else {
- colorindex = atoi(color);
- }
-
- if (colorindex >= 0 && colorindex < t_colors) {
- fg_color = prt_get_term_color(colorindex);
- } else {
- fg_color = PRCOLOR_BLACK;
- }
- }
+ uint32_t fg_color = prt_get_color(hl_id, modec);
if (fg_color == PRCOLOR_WHITE) {
fg_color = PRCOLOR_BLACK;