1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-23 21:32:13 +03:00

add primitive auto wrapping support

This commit is contained in:
Wez Furlong 2018-01-28 23:44:38 -08:00
parent 5dbf90412f
commit 67f07b4fcc

View File

@ -334,6 +334,9 @@ pub struct TerminalState {
/// of the screen. 0-based index. /// of the screen. 0-based index.
cursor_x: usize, cursor_x: usize,
cursor_y: usize, cursor_y: usize,
/// if true, implicitly move to the next line on the next
/// printed character
wrap_next: bool,
/// If true then the terminal state has changed /// If true then the terminal state has changed
state_changed: bool, state_changed: bool,
@ -369,6 +372,7 @@ impl TerminalState {
answerback: None, answerback: None,
scroll_top: 0, scroll_top: 0,
scroll_bottom: physical_rows-1, scroll_bottom: physical_rows-1,
wrap_next: false,
} }
} }
@ -472,6 +476,7 @@ impl TerminalState {
self.cursor_x = x; self.cursor_x = x;
self.cursor_y = y.min(rows - 1); self.cursor_y = y.min(rows - 1);
self.state_changed = true; self.state_changed = true;
self.wrap_next = false;
} }
fn delta_cursor_pos(&mut self, x: isize, y: isize) { fn delta_cursor_pos(&mut self, x: isize, y: isize) {
@ -554,15 +559,23 @@ impl Terminal {
impl vte::Perform for TerminalState { impl vte::Perform for TerminalState {
/// Draw a character to the screen /// Draw a character to the screen
fn print(&mut self, c: char) { fn print(&mut self, c: char) {
if self.wrap_next {
// TODO: remember that this was a wrapped line in the attributes?
self.new_line(true);
}
let x = self.cursor_x; let x = self.cursor_x;
let y = self.cursor_y; let y = self.cursor_y;
let width = self.screen().physical_cols;
let pen = self.pen; let pen = self.pen;
self.screen_mut().set_cell(x, y, c, &pen); self.screen_mut().set_cell(x, y, c, &pen);
self.cursor_x += 1; if x + 1 < width { // TODO: the 1 here should be based on the glyph width
// TODO: wrap at the end of the screen self.set_cursor_pos(x + 1, y);
self.state_changed = true; } else {
self.wrap_next = true;
}
} }
fn execute(&mut self, byte: u8) { fn execute(&mut self, byte: u8) {