diff options
author | Nicolas Pitre <npitre@baylibre.com> | 2025-04-09 21:14:00 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2025-04-11 16:55:55 +0200 |
commit | cd6937d42bca46f2143544918e535d6fd22b71b7 (patch) | |
tree | c05e2bb7311d1235142f6fc1e9274f40e7a20131 | |
parent | 54af55b990eda5a6a0140a3cded8094b42c0c3b7 (diff) |
vt: support Unicode recomposition
Try replacing any decomposed Unicode sequence by the corresponding
recomposed code point. Code point to glyph correspondance works best
after recomposition, and this apply mostly to single-width code points
therefore we can't preserve them in their decomposed form anyway.
With all the infrastructure in place this is now trivial to do.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
Link: https://lore.kernel.org/r/20250410011839.64418-9-nico@fluxnic.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/tty/vt/vt.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c index 5d53feeb5d2bf..e3d35c4f92045 100644 --- a/drivers/tty/vt/vt.c +++ b/drivers/tty/vt/vt.c @@ -2953,8 +2953,15 @@ static int vc_con_write_normal(struct vc_data *vc, int tc, int c, * double-width. */ } else { - /* Otherwise zero-width code points are ignored */ - goto out; + /* try recomposition */ + prev_c = ucs_recompose(prev_c, c); + if (prev_c != 0) { + vc_con_rewind(vc); + c = prev_c; + } else { + /* Otherwise zero-width code points are ignored */ + goto out; + } } } } |