# HG changeset patch # User Bram Moolenaar # Date 1268225029 -3600 # Node ID 15674e198164c10b08e138f4c18b58e76306d9be # Parent 8562c6804861cd26020e1a004edb1c1b218af9f2 updated for version 7.2.389 Problem: synIDattr() cannot return the font. Solution: Support the "font" argument. (Christian Brabandt) diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -5388,6 +5388,8 @@ synIDattr({synID}, {what} [, {mode}]) the color, cterm: color number as a string, term: empty string) "bg" background color (as with "fg") + "font" font name (only available in the GUI) + |highlight-font| "sp" special color (as with "fg") |highlight-guisp| "fg#" like "fg", but for the GUI and the GUI is running the name in "#RRGGBB" form @@ -5397,6 +5399,7 @@ synIDattr({synID}, {what} [, {mode}]) "italic" "1" if italic "reverse" "1" if reverse "inverse" "1" if inverse (= reverse) + "standout" "1" if standout "underline" "1" if underlined "undercurl" "1" if undercurled diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -16627,7 +16627,7 @@ f_synIDattr(argvars, rettv) p = highlight_has_attr(id, HL_BOLD, modec); break; - case 'f': /* fg[#] */ + case 'f': /* fg[#] or font */ p = highlight_color(id, what, modec); break; diff --git a/src/syntax.c b/src/syntax.c --- a/src/syntax.c +++ b/src/syntax.c @@ -8326,7 +8326,7 @@ highlight_has_attr(id, flag, modec) char_u * highlight_color(id, what, modec) int id; - char_u *what; /* "fg", "bg", "sp", "fg#", "bg#" or "sp#" */ + char_u *what; /* "font", "fg", "bg", "sp", "fg#", "bg#" or "sp#" */ int modec; /* 'g' for GUI, 'c' for cterm, 't' for term */ { static char_u name[20]; @@ -8334,20 +8334,30 @@ highlight_color(id, what, modec) int fg = FALSE; # ifdef FEAT_GUI int sp = FALSE; + int font = FALSE; # endif if (id <= 0 || id > highlight_ga.ga_len) return NULL; - if (TOLOWER_ASC(what[0]) == 'f') + if (TOLOWER_ASC(what[0]) == 'f' && TOLOWER_ASC(what[1]) == 'g') fg = TRUE; # ifdef FEAT_GUI - else if (TOLOWER_ASC(what[0]) == 's') + else if (TOLOWER_ASC(what[0]) == 'f' && TOLOWER_ASC(what[1]) == 'o' + && TOLOWER_ASC(what[2]) == 'n' && TOLOWER_ASC(what[3]) == 't') + font = TRUE; + else if (TOLOWER_ASC(what[0]) == 's' && TOLOWER_ASC(what[1]) == 'p') sp = TRUE; + else if (!(TOLOWER_ASC(what[0]) == 'b' && TOLOWER_ASC(what[1]) == 'g')) + return NULL; if (modec == 'g') { + /* return font name */ + if (font) + return HL_TABLE()[id - 1].sg_font_name; + /* return #RRGGBB form (only possible when GUI is running) */ - if (gui.in_use && what[1] && what[2] == '#') + if (gui.in_use && what[2] == '#') { guicolor_T color; long_u rgb; @@ -8374,6 +8384,8 @@ highlight_color(id, what, modec) return (HL_TABLE()[id - 1].sg_gui_sp_name); return (HL_TABLE()[id - 1].sg_gui_bg_name); } + if (font || sp) + return NULL; # endif if (modec == 'c') { diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -682,6 +682,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 389, +/**/ 388, /**/ 387,