Ignore graphemes of width 0 when writing to buffer
This commit is contained in:
parent
37634139b0
commit
6b9e4cbc63
3 changed files with 6 additions and 4 deletions
|
|
@ -10,8 +10,8 @@ fn draw(f: &mut Frame) {
|
||||||
"After this sentence come two newlines, so it should always break here.\n",
|
"After this sentence come two newlines, so it should always break here.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Since the wrapping algorithm is aware of the Unicode Standard Annex #14, ",
|
"Since the wrapping algorithm is aware of the Unicode Standard Annex #14, ",
|
||||||
"it understands things like nonbreaking spaces: ",
|
"it understands things like non-breaking spaces and word joiners: ",
|
||||||
"This\u{00a0}sentence\u{00a0}is\u{00a0}separated\u{00a0}by\u{00a0}nonbreaking\u{00a0}spaces.\n",
|
"This\u{00a0}sentence\u{00a0}is\u{00a0}separated\u{00a0}by\u{00a0}non-\u{2060}breaking\u{00a0}spaces.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"It can also properly handle wide graphemes (like emoji 🤔), ",
|
"It can also properly handle wide graphemes (like emoji 🤔), ",
|
||||||
"including ones usually displayed incorrectly by terminal emulators, like 👩🔬 (a female scientist emoji).",
|
"including ones usually displayed incorrectly by terminal emulators, like 👩🔬 (a female scientist emoji).",
|
||||||
|
|
|
||||||
|
|
@ -142,7 +142,9 @@ impl Buffer {
|
||||||
|
|
||||||
for grapheme in content.graphemes(true) {
|
for grapheme in content.graphemes(true) {
|
||||||
let width = widthdb.grapheme_width(grapheme);
|
let width = widthdb.grapheme_width(grapheme);
|
||||||
|
if width > 0 {
|
||||||
self.write_grapheme(pos.x, y, width, grapheme, style);
|
self.write_grapheme(pos.x, y, width, grapheme, style);
|
||||||
|
}
|
||||||
pos.x += width as i32;
|
pos.x += width as i32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ impl WidthDB {
|
||||||
.queue(MoveTo(0, 0))?
|
.queue(MoveTo(0, 0))?
|
||||||
.queue(Print(&grapheme))?;
|
.queue(Print(&grapheme))?;
|
||||||
out.flush()?;
|
out.flush()?;
|
||||||
let width = crossterm::cursor::position()?.0.max(1) as u8;
|
let width = crossterm::cursor::position()?.0 as u8;
|
||||||
self.known.insert(grapheme, width);
|
self.known.insert(grapheme, width);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue