From 2a16cc5155fc11bfa965c632c6c1d3a257b3f59a Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Sun, 15 Nov 2020 03:28:03 +0300 Subject: [PATCH] Fix zerowidth characters in the last column This commit fixes the issue that when attempting to write zerowidth characters into the last column, it is written in the second to last column instead. Fixes #4227. Co-authored-by: Christian Duerr --- CHANGELOG.md | 1 + alacritty_terminal/src/term/mod.rs | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5570807d..e2fda8a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Crash when writing to the clipboard fails on Wayland - Crash with large negative `font.offset.x/y` - Visual bell getting stuck on the first frame +- Zerowidth characters in the last column of the line ## 0.5.0 diff --git a/alacritty_terminal/src/term/mod.rs b/alacritty_terminal/src/term/mod.rs index 6e20f0e1..cdcfad9d 100644 --- a/alacritty_terminal/src/term/mod.rs +++ b/alacritty_terminal/src/term/mod.rs @@ -1480,11 +1480,18 @@ impl Handler for Term { // Handle zero-width characters. if width == 0 { - let mut col = self.grid.cursor.point.col.0.saturating_sub(1); + // Get previous column. + let mut col = self.grid.cursor.point.col.0; + if !self.grid.cursor.input_needs_wrap { + col = col.saturating_sub(1); + } + + // Put zerowidth characters over first fullwidth character cell. let line = self.grid.cursor.point.line; if self.grid[line][Column(col)].flags.contains(Flags::WIDE_CHAR_SPACER) { col = col.saturating_sub(1); } + self.grid[line][Column(col)].push_zerowidth(c); return; }