summaryrefslogtreecommitdiffstats
path: root/src/gui_gtk_x11.c
diff options
context:
space:
mode:
authorYee Cheng Chin <ychin.git@gmail.com>2023-10-05 20:54:21 +0200
committerChristian Brabandt <cb@256bit.org>2023-10-05 20:54:21 +0200
commit290b887e8cc2c0d3dfc7f315b2052472c7c589cc (patch)
tree1b5285384cc6ed9e3a0bce9051d1e4b201196161 /src/gui_gtk_x11.c
parentea746f9e862092aef3d4e95c64d116759b9fabe0 (diff)
patch 9.0.1991: no cmdline completion for setting the fontv9.0.1991
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>
Diffstat (limited to 'src/gui_gtk_x11.c')
-rw-r--r--src/gui_gtk_x11.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 3fd6f3a904..4b3f53ef91 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -5316,6 +5316,62 @@ gui_mch_free_font(GuiFont 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.
*
* Return INVALCOLOR for error.