aboutsummaryrefslogtreecommitdiffstats
path: root/src/grid.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-12-07 06:37:29 -0500
committerJesse Luehrs <doy@tozt.net>2019-12-07 06:37:29 -0500
commit9af24d9dc020f419c7b60753680e4edc6d8428b7 (patch)
treeee559845132c2a9cc39b3ddc712bfab871d0caa1 /src/grid.rs
parent6f5d88a4835615063e7e6dbdbaceee6494bc0675 (diff)
downloadvt100-rust-9af24d9dc020f419c7b60753680e4edc6d8428b7.tar.gz
vt100-rust-9af24d9dc020f419c7b60753680e4edc6d8428b7.zip
fix positioning cursor past end of line when there are wide characters
Diffstat (limited to 'src/grid.rs')
-rw-r--r--src/grid.rs28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/grid.rs b/src/grid.rs
index 88c33eb..858f646 100644
--- a/src/grid.rs
+++ b/src/grid.rs
@@ -231,13 +231,10 @@ impl Grid {
if prev_pos != self.pos && self.pos.col >= self.size.cols {
let mut pos = Pos {
row: self.pos.row,
- col: self.size.cols - 2,
+ col: self.size.cols - 1,
};
- if !self.visible_cell(pos).unwrap().is_wide() {
- pos = Pos {
- row: self.pos.row,
- col: self.size.cols - 1,
- };
+ if self.visible_cell(pos).unwrap().is_wide_continuation() {
+ pos.col = self.size.cols - 2;
}
let cell = self.visible_cell(pos).unwrap();
if cell.has_contents() {
@@ -257,6 +254,11 @@ impl Grid {
let mut found = false;
for i in (0..orig_row).rev() {
pos.row = i;
+ pos.col = self.size.cols - 1;
+ if self.visible_cell(pos).unwrap().is_wide_continuation()
+ {
+ pos.col = self.size.cols - 2;
+ }
let cell = self.visible_cell(pos).unwrap();
if cell.has_contents() {
if prev_pos.row != i || prev_pos.col < self.size.cols
@@ -333,13 +335,10 @@ impl Grid {
if prev_pos != self.pos && self.pos.col >= self.size.cols {
let mut pos = Pos {
row: self.pos.row,
- col: self.size.cols - 2,
+ col: self.size.cols - 1,
};
- if !self.visible_cell(pos).unwrap().is_wide() {
- pos = Pos {
- row: self.pos.row,
- col: self.size.cols - 1,
- };
+ if self.visible_cell(pos).unwrap().is_wide_continuation() {
+ pos.col = self.size.cols - 2;
}
let cell = self.visible_cell(pos).unwrap();
if cell.has_contents() {
@@ -359,6 +358,11 @@ impl Grid {
let mut found = false;
for i in (0..orig_row).rev() {
pos.row = i;
+ pos.col = self.size.cols - 1;
+ if self.visible_cell(pos).unwrap().is_wide_continuation()
+ {
+ pos.col = self.size.cols - 2;
+ }
let cell = self.visible_cell(pos).unwrap();
if cell.has_contents() {
if prev_pos.row != i || prev_pos.col < self.size.cols