mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
vt: pad double-width code points with a zero-white-space
In the Unicode screen buffer, we follow double-width code points with a space to maintain proper column alignment. This, however, creates semantic problems when e.g. using cut and paste or selection. Let's use a better code point for the column padding's purpose i.e. a zero-white-space rather than a full space. Signed-off-by: Nicolas Pitre <npitre@baylibre.com> Link: https://lore.kernel.org/r/20250410011839.64418-12-nico@fluxnic.net Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
c7cb5b0779
commit
547f57b88d
|
|
@ -2937,12 +2937,13 @@ static int vc_con_write_normal(struct vc_data *vc, int tc, int c,
|
|||
width = 2;
|
||||
} else if (ucs_is_zero_width(c)) {
|
||||
prev_c = vc_uniscr_getc(vc, -1);
|
||||
if (prev_c == ' ' &&
|
||||
if (prev_c == 0x200B &&
|
||||
ucs_is_double_width(vc_uniscr_getc(vc, -2))) {
|
||||
/*
|
||||
* Let's merge this zero-width code point with
|
||||
* the preceding double-width code point by
|
||||
* replacing the existing whitespace padding.
|
||||
* replacing the existing zero-white-space
|
||||
* padding.
|
||||
*/
|
||||
vc_con_rewind(vc);
|
||||
} else if (c == 0xfe0f && prev_c != 0) {
|
||||
|
|
@ -3040,7 +3041,11 @@ static int vc_con_write_normal(struct vc_data *vc, int tc, int c,
|
|||
tc = conv_uni_to_pc(vc, ' ');
|
||||
if (tc < 0)
|
||||
tc = ' ';
|
||||
next_c = ' ';
|
||||
/*
|
||||
* Store a zero-white-space in the Unicode screen given that
|
||||
* the previous code point is semantically double-width.
|
||||
*/
|
||||
next_c = 0x200B;
|
||||
}
|
||||
|
||||
out:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user