aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Wilm <joe@jwilm.com>2016-06-07 21:17:48 -0700
committerJoe Wilm <joe@jwilm.com>2016-06-07 21:17:48 -0700
commit0e7bb8d76e45af6154b0fb76184ae55df7cf80e1 (patch)
tree678da39563498573c9a8ca176d72b5930e4d91fc
parent6c82fa9d7b39a6ae70f1e233c9123b9d32c30623 (diff)
downloadr-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.
-rw-r--r--src/main.rs4
-rw-r--r--src/term.rs34
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");
}
}
}