diff --git a/screen-write.c b/screen-write.c index d7a486e6..ad37f453 100644 --- a/screen-write.c +++ b/screen-write.c @@ -2101,6 +2101,10 @@ screen_write_combine(struct screen_write_ctx *ctx, const struct grid_cell *gc) struct tty_ctx ttyctx; int force_wide = 0, zero_width = 0; + /* Ignore U+3164 HANGUL_FILLER entirely. */ + if (utf8_is_hangul_filler(ud)) + return (1); + /* * Is this character which makes no sense without being combined? If * this is true then flag it here and discard the character (return 1) diff --git a/tmux.h b/tmux.h index 62dbd021..414c2819 100644 --- a/tmux.h +++ b/tmux.h @@ -3552,6 +3552,7 @@ struct event_base *osdep_event_init(void); int utf8_has_zwj(const struct utf8_data *); int utf8_is_zwj(const struct utf8_data *); int utf8_is_vs(const struct utf8_data *); +int utf8_is_hangul_filler(const struct utf8_data *); int utf8_should_combine(const struct utf8_data *, const struct utf8_data *); enum hanguljamo_state hanguljamo_check_state(const struct utf8_data *, diff --git a/utf8-combined.c b/utf8-combined.c index 91ddaf75..635ae92c 100644 --- a/utf8-combined.c +++ b/utf8-combined.c @@ -55,7 +55,7 @@ utf8_has_zwj(const struct utf8_data *ud) return (memcmp(ud->data + ud->size - 3, "\342\200\215", 3) == 0); } -/* Is this a zero width joiner? */ +/* Is this zero width joiner U+200D? */ int utf8_is_zwj(const struct utf8_data *ud) { @@ -64,7 +64,7 @@ utf8_is_zwj(const struct utf8_data *ud) return (memcmp(ud->data, "\342\200\215", 3) == 0); } -/* Is this a variation selector? */ +/* Is this variation selector U+FE0F? */ int utf8_is_vs(const struct utf8_data *ud) { @@ -73,6 +73,15 @@ utf8_is_vs(const struct utf8_data *ud) return (memcmp(ud->data, "\357\270\217", 3) == 0); } +/* Is this Hangul filler U+3164? */ +int +utf8_is_hangul_filler(const struct utf8_data *ud) +{ + if (ud->size != 3) + return (0); + return (memcmp(ud->data, "\343\205\244", 3) == 0); +} + /* Should these two characters combine? */ int utf8_should_combine(const struct utf8_data *with, const struct utf8_data *add)