aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Brumlow <mbrumlow@gmail.com>2017-01-07 18:07:03 -0600
committerMichael Brumlow <mbrumlow@gmail.com>2017-01-07 18:07:03 -0600
commitfb56dcbad94b7606d67cd911ea2c8784bcd8a247 (patch)
tree7b552792d863553d92b36e5c0b5f6b9ea0ffb126 /src
parent61389c1fcd236edbce36ef5d722970978175849c (diff)
downloadalacritty-fb56dcbad94b7606d67cd911ea2c8784bcd8a247.tar.gz
alacritty-fb56dcbad94b7606d67cd911ea2c8784bcd8a247.zip
Fixing resize crashes.
Most of the crashes on resize were due to columns and lines being set to zero. This causes all sorts of other checks within the code to ensure these values are greater than zero before running calculations. To avoid this we just need to ensure that lines and columns are some non zero value. This is seems to be what gnome terminal does. I have selected 2 lines and two columns for min terminal size for now.
Diffstat (limited to 'src')
-rw-r--r--src/term/mod.rs24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/term/mod.rs b/src/term/mod.rs
index 73f9ad61..68fd8223 100644
--- a/src/term/mod.rs
+++ b/src/term/mod.rs
@@ -475,8 +475,8 @@ impl Term {
let old_cols = self.size_info.cols();
let old_lines = self.size_info.lines();
- let num_cols = size.cols();
- let num_lines = size.lines();
+ let mut num_cols = size.cols();
+ let mut num_lines = size.lines();
self.size_info = size;
@@ -484,6 +484,16 @@ impl Term {
return;
}
+ // Should not allow less than 1 col, causes all sorts of checks to be required.
+ if num_cols <= Column(1) {
+ num_cols = Column(2);
+ }
+
+ // Should not allow less than 1 line, causes all sorts of checks to be required.
+ if num_lines <= Line(1) {
+ num_lines = Line(2);
+ }
+
// Scroll up to keep cursor and as much context as possible in grid.
// This only runs when the lines decreases.
self.scroll_region = Line(0)..self.grid.num_lines();
@@ -513,10 +523,12 @@ impl Term {
self.tabs[0] = false;
- // Make sure bottom of terminal is clear
- let template = self.empty_cell;
- self.grid.clear_region((self.cursor.line).., |c| c.reset(&template));
- self.alt_grid.clear_region((self.cursor.line).., |c| c.reset(&template));
+ if num_lines > old_lines {
+ // Make sure bottom of terminal is clear
+ let template = self.empty_cell;
+ self.grid.clear_region((self.cursor.line + 1).., |c| c.reset(&template));
+ self.alt_grid.clear_region((self.cursor.line + 1).., |c| c.reset(&template));
+ }
// Reset scrolling region to new size
self.scroll_region = Line(0)..self.grid.num_lines();