From 37f9f5484013b2b3c5501f50a9142aa947bc823f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Wed, 13 Oct 2021 17:42:40 +0200 Subject: [PATCH] config: enable grapheme shaping by default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This changes the default value of tweak.grapheme-shaping to “yes”, thus enabling grapheme shaping by default. It also changes the default value of tweak.grapheme-width-method to “wcswidth”, for maximum compatibility with terminal applications. --- CHANGELOG.md | 7 +++++++ config.c | 10 ++++++---- doc/foot.ini.5.scd | 16 ++++------------ 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a400d9d4..3c5f0135 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,13 @@ and background colors for the scrollback indicator. ### Changed + +* `[tweak].grapheme-shaping` is now enabled by default when both foot + itself, and fcft has been compiled with support for it. +* Default value of `[tweak].grapheme-width-method` changed from + `double-width` to `wcswidth`. + + ### Deprecated ### Removed ### Fixed diff --git a/config.c b/config.c index a213075b..d437b05e 100644 --- a/config.c +++ b/config.c @@ -2396,8 +2396,8 @@ parse_section_tweak( * grapheme-clustering at least */ } - if (conf->tweak.grapheme_shaping) - LOG_WARN("tweak: grapheme shaping"); + if (!conf->tweak.grapheme_shaping) + LOG_WARN("tweak: grapheme shaping disabled"); } else if (strcmp(key, "grapheme-width-method") == 0) { @@ -2978,8 +2978,10 @@ config_load(struct config *conf, const char *conf_path, .tweak = { .fcft_filter = FCFT_SCALING_FILTER_LANCZOS3, .overflowing_glyphs = true, - .grapheme_shaping = false, - .grapheme_width_method = GRAPHEME_WIDTH_DOUBLE, +#if defined(FOOT_GRAPHEME_CLUSTERING) && FOOT_GRAPHEME_CLUSTERING + .grapheme_shaping = fcft_caps & FCFT_CAPABILITY_GRAPHEME_SHAPING, +#endif + .grapheme_width_method = GRAPHEME_WIDTH_WCSWIDTH, .delayed_render_lower_ns = 500000, /* 0.5ms */ .delayed_render_upper_ns = 16666666 / 2, /* half a frame period (60Hz) */ .max_shm_pool_size = 512 * 1024 * 1024, diff --git a/doc/foot.ini.5.scd b/doc/foot.ini.5.scd index b242e8fb..e105be62 100644 --- a/doc/foot.ini.5.scd +++ b/doc/foot.ini.5.scd @@ -1020,23 +1020,15 @@ any of these options. This is required to render e.g. flag (emoji) sequences, keycap sequences, modifier sequences, zero-width-joiner (ZWJ) sequences - andn emoji tag sequences. It might also improve rendering of + and emoji tag sequences. It might also improve rendering of composed characters, depending on font. - This is an experimental feature with the following requirements - and limitations: - - foot must have been compiled with utf8proc support - fcft must have been compiled with HarfBuzz support - - This option must be set to true - - Foot will use *wcswidth*(3) to calculate a cluster's display - width. This will typically _not_ match the shaped glyph's - width, but is necessary to not break cursor synchronization - with the application running in foot. See also: *grapheme-width-method*. - Default: _no_ + Default: _yes_ *grapheme-width-method* Selects which method to use when calculating the width @@ -1047,12 +1039,12 @@ any of these options. codepoints making up the cluster. *double-width* does the same, but limits the maximum number of - columns to 2. This is more correct, but is likely to break + columns to 2. This is more correct, but may break some applications since applications typically use *wcswidth*(3) internally to calculate the width. This results in cursor de-synchronization issues. - Default: _double-width_ + Default: _wcswidth_ *font-monospace-warn* Boolean. When enabled, foot will use heuristics to try to verify