mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-18 13:55:23 -05:00
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.
This commit is contained in:
parent
d552d28418
commit
9bdac6b50a
5 changed files with 51 additions and 10 deletions
|
@ -201,6 +201,14 @@ selection:
|
||||||
|
|
||||||
hide_cursor_when_typing: false
|
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 (changes require restart)
|
||||||
live_config_reload: true
|
live_config_reload: true
|
||||||
|
|
||||||
|
|
|
@ -182,6 +182,14 @@ selection:
|
||||||
|
|
||||||
hide_cursor_when_typing: false
|
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 (changes require restart)
|
||||||
live_config_reload: true
|
live_config_reload: true
|
||||||
|
|
||||||
|
|
17
src/ansi.rs
17
src/ansi.rs
|
@ -179,7 +179,7 @@ pub trait Handler {
|
||||||
fn set_title(&mut self, &str) {}
|
fn set_title(&mut self, &str) {}
|
||||||
|
|
||||||
/// Set the cursor style
|
/// Set the cursor style
|
||||||
fn set_cursor_style(&mut self, _: CursorStyle) {}
|
fn set_cursor_style(&mut self, _: Option<CursorStyle>) {}
|
||||||
|
|
||||||
/// A character to be displayed
|
/// A character to be displayed
|
||||||
fn input(&mut self, _c: char) {}
|
fn input(&mut self, _c: char) {}
|
||||||
|
@ -344,7 +344,7 @@ pub trait Handler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Describes shape of cursor
|
/// Describes shape of cursor
|
||||||
#[derive(Debug, Eq, PartialEq, Copy, Clone)]
|
#[derive(Debug, Eq, PartialEq, Copy, Clone, Deserialize)]
|
||||||
pub enum CursorStyle {
|
pub enum CursorStyle {
|
||||||
/// Cursor is a block like `▒`
|
/// Cursor is a block like `▒`
|
||||||
Block,
|
Block,
|
||||||
|
@ -356,6 +356,12 @@ pub enum CursorStyle {
|
||||||
Beam,
|
Beam,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Default for CursorStyle {
|
||||||
|
fn default() -> CursorStyle {
|
||||||
|
CursorStyle::Block
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Terminal modes
|
/// Terminal modes
|
||||||
#[derive(Debug, Eq, PartialEq)]
|
#[derive(Debug, Eq, PartialEq)]
|
||||||
pub enum Mode {
|
pub enum Mode {
|
||||||
|
@ -1070,9 +1076,10 @@ impl<'a, H, W> vte::Perform for Performer<'a, H, W>
|
||||||
'u' => handler.restore_cursor_position(),
|
'u' => handler.restore_cursor_position(),
|
||||||
'q' => {
|
'q' => {
|
||||||
let style = match arg_or_default!(idx: 0, default: 0) {
|
let style = match arg_or_default!(idx: 0, default: 0) {
|
||||||
0 ... 2 => CursorStyle::Block,
|
0 => None,
|
||||||
3 | 4 => CursorStyle::Underline,
|
1 | 2 => Some(CursorStyle::Block),
|
||||||
5 | 6 => CursorStyle::Beam,
|
3 | 4 => Some(CursorStyle::Underline),
|
||||||
|
5 | 6 => Some(CursorStyle::Beam),
|
||||||
_ => unhandled!()
|
_ => unhandled!()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ use glutin::ModifiersState;
|
||||||
|
|
||||||
use input::{Action, Binding, MouseBinding, KeyBinding};
|
use input::{Action, Binding, MouseBinding, KeyBinding};
|
||||||
use index::{Line, Column};
|
use index::{Line, Column};
|
||||||
|
use ansi::CursorStyle;
|
||||||
|
|
||||||
use util::fmt::Yellow;
|
use util::fmt::Yellow;
|
||||||
|
|
||||||
|
@ -275,6 +276,10 @@ pub struct Config {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
hide_cursor_when_typing: bool,
|
hide_cursor_when_typing: bool,
|
||||||
|
|
||||||
|
/// Style of the cursor
|
||||||
|
#[serde(default)]
|
||||||
|
cursor_style: CursorStyle,
|
||||||
|
|
||||||
/// Live config reload
|
/// Live config reload
|
||||||
#[serde(default="true_bool")]
|
#[serde(default="true_bool")]
|
||||||
live_config_reload: bool,
|
live_config_reload: bool,
|
||||||
|
@ -329,6 +334,7 @@ impl Default for Config {
|
||||||
visual_bell: Default::default(),
|
visual_bell: Default::default(),
|
||||||
env: Default::default(),
|
env: Default::default(),
|
||||||
hide_cursor_when_typing: Default::default(),
|
hide_cursor_when_typing: Default::default(),
|
||||||
|
cursor_style: Default::default(),
|
||||||
live_config_reload: true,
|
live_config_reload: true,
|
||||||
padding: default_padding(),
|
padding: default_padding(),
|
||||||
}
|
}
|
||||||
|
@ -1179,6 +1185,12 @@ impl Config {
|
||||||
self.hide_cursor_when_typing
|
self.hide_cursor_when_typing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Style of the cursor
|
||||||
|
#[inline]
|
||||||
|
pub fn cursor_style(&self) -> CursorStyle {
|
||||||
|
self.cursor_style
|
||||||
|
}
|
||||||
|
|
||||||
/// Live config reload
|
/// Live config reload
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn live_config_reload(&self) -> bool {
|
pub fn live_config_reload(&self) -> bool {
|
||||||
|
|
|
@ -708,7 +708,11 @@ pub struct Term {
|
||||||
/// Original colors from config
|
/// Original colors from config
|
||||||
original_colors: color::List,
|
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
|
/// Terminal size info
|
||||||
|
@ -773,7 +777,7 @@ impl Term {
|
||||||
self.next_title.take()
|
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 template = Cell::default();
|
||||||
|
|
||||||
let num_cols = size.cols();
|
let num_cols = size.cols();
|
||||||
|
@ -810,7 +814,8 @@ impl Term {
|
||||||
color_modified: [false; color::COUNT],
|
color_modified: [false; color::COUNT],
|
||||||
original_colors: color::List::from(config.colors()),
|
original_colors: color::List::from(config.colors()),
|
||||||
semantic_escape_chars: config.selection().semantic_escape_chars.clone(),
|
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.visual_bell.update_config(config);
|
||||||
|
self.default_cursor_style = config.cursor_style();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -1003,7 +1009,7 @@ impl Term {
|
||||||
self.mode,
|
self.mode,
|
||||||
config,
|
config,
|
||||||
selection,
|
selection,
|
||||||
self.cursor_style,
|
self.cursor_style.unwrap_or(self.default_cursor_style),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1869,7 +1875,7 @@ impl ansi::Handler for Term {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn set_cursor_style(&mut self, style: CursorStyle) {
|
fn set_cursor_style(&mut self, style: Option<CursorStyle>) {
|
||||||
trace!("set_cursor_style {:?}", style);
|
trace!("set_cursor_style {:?}", style);
|
||||||
self.cursor_style = style;
|
self.cursor_style = style;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue