forked from aniani/vim
patch 9.0.1991: no cmdline completion for setting the font
Problem: no cmdline completion for setting the font Solution: enable it on Win32 and GTK builds Add guifont cmdline completion (for Windows and GTK) For Windows, auto-complete will only suggest monospace fonts as that's the only types allowed. Will also suggest font options after the colon, including suggesting the current font size for convenience, and misc charset and quality options like `cANSI` and `qCLEARTYPE`. For GTK, auto-complete will suggest only monospace fonts for `guifont` but will include all fonts for `guifontwide`. The completion code doesn't currently suggest the current font size, as the GTK guifont format does not have a clear delimiter (':' for other platforms). closes: #13264 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
This commit is contained in:
committed by
Christian Brabandt
parent
ea746f9e86
commit
290b887e8c
@@ -5315,6 +5315,62 @@ gui_mch_free_font(GuiFont font)
|
||||
pango_font_description_free(font);
|
||||
}
|
||||
|
||||
/*
|
||||
* Cmdline expansion for setting 'guifont' / 'guifontwide'. Will enumerate
|
||||
* through all fonts for completion. When setting 'guifont' it will only show
|
||||
* monospace fonts as it's unlikely other fonts would be useful.
|
||||
*/
|
||||
void
|
||||
gui_mch_expand_font(optexpand_T *args, void *param, int (*add_match)(char_u *val))
|
||||
{
|
||||
PangoFontFamily **font_families = NULL;
|
||||
int n_families = 0;
|
||||
int wide = *(int *)param;
|
||||
|
||||
if (args->oe_include_orig_val && *args->oe_opt_value == NUL && !wide)
|
||||
{
|
||||
// If guifont is empty, and we want to fill in the orig value, suggest
|
||||
// the default so the user can modify it.
|
||||
if (add_match((char_u *)DEFAULT_FONT) != OK)
|
||||
return;
|
||||
}
|
||||
|
||||
pango_context_list_families(
|
||||
gui.text_context,
|
||||
&font_families,
|
||||
&n_families);
|
||||
|
||||
for (int i = 0; i < n_families; i++)
|
||||
{
|
||||
if (!wide && !pango_font_family_is_monospace(font_families[i]))
|
||||
continue;
|
||||
|
||||
const char* fam_name = pango_font_family_get_name(font_families[i]);
|
||||
if (input_conv.vc_type != CONV_NONE)
|
||||
{
|
||||
char_u *buf = string_convert(&input_conv, (char_u*)fam_name, NULL);
|
||||
if (buf != NULL)
|
||||
{
|
||||
if (add_match(buf) != OK)
|
||||
{
|
||||
vim_free(buf);
|
||||
break;
|
||||
}
|
||||
vim_free(buf);
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (add_match((char_u *)fam_name) != OK)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_free(font_families);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the Pixel value (color) for the given color name.
|
||||
*
|
||||
|
Reference in New Issue
Block a user