summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Duerr <chrisduerr@users.noreply.github.com>2017-12-03 21:38:42 +0000
committerJoe Wilm <jwilm@users.noreply.github.com>2017-12-03 13:38:42 -0800
commit9bdac6b50aa911cd8f94624a1084a1ba35be6ed4 (patch)
tree0809e0e65413978c8f906528bee192559a05fa78
parentd552d28418ef192724b2b4353863708f31f325d4 (diff)
Add cursor style option (#928)
The default cursor can now be configured through the cursor_style field of the config. Valid options include Block, Underline, and Beam. The default can be restored by sending \e[0q as in VTE terminals. Live config reloading is supported for this parameter.
-rw-r--r--alacritty.yml8
-rw-r--r--alacritty_macos.yml8
-rw-r--r--src/ansi.rs17
-rw-r--r--src/config.rs12
-rw-r--r--src/term/mod.rs16
5 files changed, 51 insertions, 10 deletions
diff --git a/alacritty.yml b/alacritty.yml
index e26a816d..df9e4dde 100644
--- a/alacritty.yml
+++ b/alacritty.yml
@@ -201,6 +201,14 @@ selection:
hide_cursor_when_typing: false
+# Style of the cursor
+#
+# Values for 'cursor_style':
+# - Block
+# - Underline
+# - Beam
+cursor_style: Block
+
# Live config reload (changes require restart)
live_config_reload: true
diff --git a/alacritty_macos.yml b/alacritty_macos.yml
index 761542a1..ee5bb6ad 100644
--- a/alacritty_macos.yml
+++ b/alacritty_macos.yml
@@ -182,6 +182,14 @@ selection:
hide_cursor_when_typing: false
+# Style of the cursor
+#
+# Values for 'cursor_style':
+# - Block
+# - Underline
+# - Beam
+cursor_style: Block
+
# Live config reload (changes require restart)
live_config_reload: true
diff --git a/src/ansi.rs b/src/ansi.rs
index 2b196145..ec139294 100644
--- a/src/ansi.rs
+++ b/src/ansi.rs
@@ -179,7 +179,7 @@ pub trait Handler {
fn set_title(&mut self, &str) {}
/// Set the cursor style
- fn set_cursor_style(&mut self, _: CursorStyle) {}
+ fn set_cursor_style(&mut self, _: Option<CursorStyle>) {}
/// A character to be displayed
fn input(&mut self, _c: char) {}
@@ -344,7 +344,7 @@ pub trait Handler {
}
/// Describes shape of cursor
-#[derive(Debug, Eq, PartialEq, Copy, Clone)]
+#[derive(Debug, Eq, PartialEq, Copy, Clone, Deserialize)]
pub enum CursorStyle {
/// Cursor is a block like `▒`
Block,
@@ -356,6 +356,12 @@ pub enum CursorStyle {
Beam,
}
+impl Default for CursorStyle {
+ fn default() -> CursorStyle {
+ CursorStyle::Block
+ }
+}
+
/// Terminal modes
#[derive(Debug, Eq, PartialEq)]
pub enum Mode {
@@ -1070,9 +1076,10 @@ impl<'a, H, W> vte::Perform for Performer<'a, H, W>
'u' => handler.restore_cursor_position(),
'q' => {
let style = match arg_or_default!(idx: 0, default: 0) {
- 0 ... 2 => CursorStyle::Block,
- 3 | 4 => CursorStyle::Underline,
- 5 | 6 => CursorStyle::Beam,
+ 0 => None,
+ 1 | 2 => Some(CursorStyle::Block),
+ 3 | 4 => Some(CursorStyle::Underline),
+ 5 | 6 => Some(CursorStyle::Beam),
_ => unhandled!()
};
diff --git a/src/config.rs b/src/config.rs
index 36ac3319..48fcda7a 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -25,6 +25,7 @@ use glutin::ModifiersState;
use input::{Action, Binding, MouseBinding, KeyBinding};
use index::{Line, Column};
+use ansi::CursorStyle;
use util::fmt::Yellow;
@@ -275,6 +276,10 @@ pub struct Config {
#[serde(default)]
hide_cursor_when_typing: bool,
+ /// Style of the cursor
+ #[serde(default)]
+ cursor_style: CursorStyle,
+
/// Live config reload
#[serde(default="true_bool")]
live_config_reload: bool,
@@ -329,6 +334,7 @@ impl Default for Config {
visual_bell: Default::default(),
env: Default::default(),
hide_cursor_when_typing: Default::default(),
+ cursor_style: Default::default(),
live_config_reload: true,
padding: default_padding(),
}
@@ -1179,6 +1185,12 @@ impl Config {
self.hide_cursor_when_typing
}
+ /// Style of the cursor
+ #[inline]
+ pub fn cursor_style(&self) -> CursorStyle {
+ self.cursor_style
+ }
+
/// Live config reload
#[inline]
pub fn live_config_reload(&self) -> bool {
diff --git a/src/term/mod.rs b/src/term/mod.rs
index 51620762..6bce8451 100644
--- a/src/term/mod.rs
+++ b/src/term/mod.rs
@@ -708,7 +708,11 @@ pub struct Term {
/// Original colors from config
original_colors: color::List,
- cursor_style: CursorStyle,
+ /// Current style of the cursor
+ cursor_style: Option<CursorStyle>,
+
+ /// Default style for resetting the cursor
+ default_cursor_style: CursorStyle,
}
/// Terminal size info
@@ -773,7 +777,7 @@ impl Term {
self.next_title.take()
}
- pub fn new(config : &Config, size: SizeInfo) -> Term {
+ pub fn new(config: &Config, size: SizeInfo) -> Term {
let template = Cell::default();
let num_cols = size.cols();
@@ -810,7 +814,8 @@ impl Term {
color_modified: [false; color::COUNT],
original_colors: color::List::from(config.colors()),
semantic_escape_chars: config.selection().semantic_escape_chars.clone(),
- cursor_style: CursorStyle::Block,
+ cursor_style: None,
+ default_cursor_style: config.cursor_style(),
}
}
@@ -835,6 +840,7 @@ impl Term {
}
}
self.visual_bell.update_config(config);
+ self.default_cursor_style = config.cursor_style();
}
#[inline]
@@ -1003,7 +1009,7 @@ impl Term {
self.mode,
config,
selection,
- self.cursor_style,
+ self.cursor_style.unwrap_or(self.default_cursor_style),
)
}
@@ -1869,7 +1875,7 @@ impl ansi::Handler for Term {
}
#[inline]
- fn set_cursor_style(&mut self, style: CursorStyle) {
+ fn set_cursor_style(&mut self, style: Option<CursorStyle>) {
trace!("set_cursor_style {:?}", style);
self.cursor_style = style;
}