diff options
author | Joe Wilm <joe@jwilm.com> | 2016-06-07 21:17:48 -0700 |
---|---|---|
committer | Joe Wilm <joe@jwilm.com> | 2016-06-07 21:17:48 -0700 |
commit | 0e7bb8d76e45af6154b0fb76184ae55df7cf80e1 (patch) | |
tree | 678da39563498573c9a8ca176d72b5930e4d91fc /src | |
parent | 6c82fa9d7b39a6ae70f1e233c9123b9d32c30623 (diff) | |
download | r-alacritty-0e7bb8d76e45af6154b0fb76184ae55df7cf80e1.tar.gz r-alacritty-0e7bb8d76e45af6154b0fb76184ae55df7cf80e1.tar.bz2 r-alacritty-0e7bb8d76e45af6154b0fb76184ae55df7cf80e1.zip |
Handle TEXT_CURSOR mode
When the flag is unset, the cursor is not rendered.
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 4 | ||||
-rw-r--r-- | src/term.rs | 34 |
2 files changed, 32 insertions, 6 deletions
diff --git a/src/main.rs b/src/main.rs index fd22b304..7c130bc4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -202,7 +202,9 @@ fn main() { api.render_grid(terminal.grid(), &mut glyph_cache); // Also draw the cursor - api.render_cursor(terminal.cursor(), &mut glyph_cache); + if !terminal.mode().contains(term::mode::TEXT_CURSOR) { + api.render_cursor(terminal.cursor(), &mut glyph_cache); + } }) } diff --git a/src/term.rs b/src/term.rs index 1845d9e3..dedd9d9c 100644 --- a/src/term.rs +++ b/src/term.rs @@ -28,6 +28,16 @@ pub static COLORS: &'static [Rgb] = &[ Rgb {r: 0x2a, g: 0x2a, b: 0x2a}, // Bright white ]; +pub mod mode { + bitflags! { + pub flags TermMode: u32 { + const TEXT_CURSOR = 0b00000001, + } + } +} + +pub use self::mode::TermMode; + pub const CURSOR_SHAPE: char = '█'; pub const DEFAULT_FG: Rgb = Rgb { r: 0xea, g: 0xea, b: 0xea}; @@ -96,6 +106,9 @@ pub struct Term { /// Whether state has changed and needs to be updated. dirty: bool, + + /// Mode flags + mode: TermMode, } impl Term { @@ -119,6 +132,7 @@ impl Term { tabs: tabs, attr: CellFlags::empty(), dirty: false, + mode: TermMode::empty(), } } @@ -134,6 +148,11 @@ impl Term { &self.grid } + #[inline] + pub fn mode(&self) -> &TermMode { + &self.mode + } + pub fn swap_alt(&mut self) { self.alt = !self.alt; ::std::mem::swap(&mut self.grid, &mut self.alt_grid); @@ -167,6 +186,7 @@ impl Term { fn set_char(&mut self, c: char) { self.dirty = true; if self.cursor.x == self.grid.num_cols() as u16 { + println!("wrapping"); self.cursor.y += 1; self.cursor.x = 0; } @@ -405,17 +425,21 @@ impl ansi::Handler for Term { fn set_mode(&mut self, mode: ansi::Mode) { println!("set_mode: {:?}", mode); match mode { - ansi::Mode::SwapScreenAndSetRestoreCursor => { - self.swap_alt(); + ansi::Mode::SwapScreenAndSetRestoreCursor => self.swap_alt(), + ansi::Mode::TextCursor => self.mode.insert(mode::TEXT_CURSOR), + _ => { + println!(".. ignoring set_mode"); } } } - fn unset_mode(&mut self, mode: ansi::Mode) { + fn unset_mode(&mut self,mode: ansi::Mode) { println!("unset_mode: {:?}", mode); match mode { - ansi::Mode::SwapScreenAndSetRestoreCursor => { - self.swap_alt(); + ansi::Mode::SwapScreenAndSetRestoreCursor => self.swap_alt(), + ansi::Mode::TextCursor => self.mode.remove(mode::TEXT_CURSOR), + _ => { + println!(".. ignoring unset_mode"); } } } |