1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-24 13:52:55 +03:00

implement basic DEC Line drawing mode

This improves the rendering of eg: `dialog`
This commit is contained in:
Wez Furlong 2019-03-22 21:28:42 -07:00
parent 5533eaeba2
commit 54324121f2

View File

@ -173,6 +173,7 @@ pub struct TerminalState {
current_mouse_button: MouseButton,
mouse_position: CursorPosition,
cursor_visible: bool,
dec_line_drawing_mode: bool,
/// Which hyperlink is considered to be highlighted, because the
/// mouse_position is over a cell with a Hyperlink attribute.
@ -248,6 +249,7 @@ impl TerminalState {
sgr_mouse: false,
button_event_mouse: false,
cursor_visible: true,
dec_line_drawing_mode: false,
current_mouse_button: MouseButton::None,
mouse_position: CursorPosition::default(),
current_highlight: None,
@ -1849,6 +1851,25 @@ impl<'a> Performer<'a> {
let mut x_offset = 0;
for g in unicode_segmentation::UnicodeSegmentation::graphemes(p.as_str(), true) {
let g = if self.dec_line_drawing_mode {
match g {
"j" => "",
"k" => "",
"l" => "",
"m" => "",
"n" => "",
"q" => "",
"t" => "",
"u" => "",
"v" => "",
"w" => "",
"x" => "",
_ => g,
}
} else {
g
};
if !self.insert && self.wrap_next {
self.new_line(true);
}
@ -1966,8 +1987,12 @@ impl<'a> Performer<'a> {
Esc::Code(EscCode::Index) => self.c1_index(),
Esc::Code(EscCode::NextLine) => self.c1_nel(),
Esc::Code(EscCode::HorizontalTabSet) => self.c1_hts(),
Esc::Code(EscCode::DecLineDrawing) => debug!("ESC: smacs/DecLineDrawing"),
Esc::Code(EscCode::AsciiCharacterSet) => debug!("ESC: rmacs/AsciiCharacterSet"),
Esc::Code(EscCode::DecLineDrawing) => {
self.dec_line_drawing_mode = true;
}
Esc::Code(EscCode::AsciiCharacterSet) => {
self.dec_line_drawing_mode = false;
}
Esc::Code(EscCode::DecSaveCursorPosition) => self.save_cursor(),
Esc::Code(EscCode::DecRestoreCursorPosition) => self.restore_cursor(),
_ => println!("ESC: unhandled {:?}", esc),