mirror of
https://github.com/alacritty/alacritty.git
synced 2024-11-25 14:05:41 -05:00
Merge branch #1095
Because there was some overlap with branch #1095, these two PRs have been added together and the config has been restructured to make use of a `scrolling` section. The default faux scrolling amount has also been changed to `3` because this simplifies the code and falls in line with what most other terminal emulators do. There should be no additional test failures due to this.
This commit is contained in:
parent
290e2cfb17
commit
c1e831dab0
6 changed files with 118 additions and 91 deletions
|
@ -33,8 +33,24 @@ window:
|
||||||
# Setting this to false will result in window without borders and title bar.
|
# Setting this to false will result in window without borders and title bar.
|
||||||
decorations: true
|
decorations: true
|
||||||
|
|
||||||
# How many lines of scrollback to keep
|
scrolling:
|
||||||
scroll_history: 10000
|
# How many lines of scrollback to keep,
|
||||||
|
# '0' will disable scrolling.
|
||||||
|
history: 10000
|
||||||
|
|
||||||
|
# Number of lines the viewport will move for every line
|
||||||
|
# scrolled when scrollback is enabled (history > 0).
|
||||||
|
multiplier: 1
|
||||||
|
|
||||||
|
# Faux Scrolling
|
||||||
|
#
|
||||||
|
# The `faux_multiplier` setting controls the number
|
||||||
|
# of lines the terminal should scroll when the alternate
|
||||||
|
# screen buffer is active. This is used to allow mouse
|
||||||
|
# scrolling for applications like `man`.
|
||||||
|
#
|
||||||
|
# To disable this completely, set `faux_multiplier` to 0.
|
||||||
|
faux_multiplier: 3
|
||||||
|
|
||||||
# Display tabs using this many cells (changes require restart)
|
# Display tabs using this many cells (changes require restart)
|
||||||
tabspaces: 8
|
tabspaces: 8
|
||||||
|
@ -209,22 +225,6 @@ mouse:
|
||||||
double_click: { threshold: 300 }
|
double_click: { threshold: 300 }
|
||||||
triple_click: { threshold: 300 }
|
triple_click: { threshold: 300 }
|
||||||
|
|
||||||
# Faux Scrollback
|
|
||||||
#
|
|
||||||
# The `faux_scrollback_lines` setting controls the number
|
|
||||||
# of lines the terminal should scroll when the alternate
|
|
||||||
# screen buffer is active. This is used to allow mouse
|
|
||||||
# scrolling for applications like `man`.
|
|
||||||
#
|
|
||||||
# To disable this completely, set `faux_scrollback_lines` to 0.
|
|
||||||
faux_scrollback_lines: 1
|
|
||||||
|
|
||||||
# Normal Scrolling
|
|
||||||
#
|
|
||||||
# Number of lines the viewport will move when scrolling in
|
|
||||||
# the terminal with scrollback enabled (>0).
|
|
||||||
normal_scrolling_lines: 3
|
|
||||||
|
|
||||||
selection:
|
selection:
|
||||||
semantic_escape_chars: ",│`|:\"' ()[]{}<>"
|
semantic_escape_chars: ",│`|:\"' ()[]{}<>"
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,24 @@ window:
|
||||||
# Setting this to false will result in window without borders and title bar.
|
# Setting this to false will result in window without borders and title bar.
|
||||||
decorations: true
|
decorations: true
|
||||||
|
|
||||||
# How many lines of scrollback to keep
|
scrolling:
|
||||||
scroll_history: 10000
|
# How many lines of scrollback to keep,
|
||||||
|
# '0' will disable scrolling.
|
||||||
|
history: 10000
|
||||||
|
|
||||||
|
# Number of lines the viewport will move for every line
|
||||||
|
# scrolled when scrollback is enabled (history > 0).
|
||||||
|
multiplier: 3
|
||||||
|
|
||||||
|
# Faux Scrolling
|
||||||
|
#
|
||||||
|
# The `faux_multiplier` setting controls the number
|
||||||
|
# of lines the terminal should scroll when the alternate
|
||||||
|
# screen buffer is active. This is used to allow mouse
|
||||||
|
# scrolling for applications like `man`.
|
||||||
|
#
|
||||||
|
# To disable this completely, set `faux_multiplier` to 0.
|
||||||
|
faux_multiplier: 3
|
||||||
|
|
||||||
# Display tabs using this many cells (changes require restart)
|
# Display tabs using this many cells (changes require restart)
|
||||||
tabspaces: 8
|
tabspaces: 8
|
||||||
|
@ -190,22 +206,6 @@ mouse:
|
||||||
double_click: { threshold: 300 }
|
double_click: { threshold: 300 }
|
||||||
triple_click: { threshold: 300 }
|
triple_click: { threshold: 300 }
|
||||||
|
|
||||||
# Faux Scrollback
|
|
||||||
#
|
|
||||||
# The `faux_scrollback_lines` setting controls the number
|
|
||||||
# of lines the terminal should scroll when the alternate
|
|
||||||
# screen buffer is active. This is used to allow mouse
|
|
||||||
# scrolling for applications like `man`.
|
|
||||||
#
|
|
||||||
# To disable this completely, set `faux_scrollback_lines` to 0.
|
|
||||||
faux_scrollback_lines: 1
|
|
||||||
|
|
||||||
# Normal Scrolling
|
|
||||||
#
|
|
||||||
# Number of lines the viewport will move when scrolling in
|
|
||||||
# the terminal with scrollback enabled (>0).
|
|
||||||
normal_scrolling_lines: 3
|
|
||||||
|
|
||||||
selection:
|
selection:
|
||||||
semantic_escape_chars: ",│`|:\"' ()[]{}<>"
|
semantic_escape_chars: ",│`|:\"' ()[]{}<>"
|
||||||
|
|
||||||
|
|
127
src/config.rs
127
src/config.rs
|
@ -82,47 +82,9 @@ pub struct Mouse {
|
||||||
#[serde(default, deserialize_with = "failure_default")]
|
#[serde(default, deserialize_with = "failure_default")]
|
||||||
pub triple_click: ClickHandler,
|
pub triple_click: ClickHandler,
|
||||||
|
|
||||||
/// up/down arrows sent when scrolling in alt screen buffer
|
// TODO: DEPRECATED
|
||||||
#[serde(deserialize_with = "deserialize_faux_scrollback_lines")]
|
#[serde(default)]
|
||||||
#[serde(default="default_faux_scrollback_lines")]
|
pub faux_scrollback_lines: Option<usize>,
|
||||||
pub faux_scrollback_lines: u8,
|
|
||||||
|
|
||||||
/// Number of lines scrolled in normal buffer with scrollback
|
|
||||||
#[serde(deserialize_with = "deserialize_normal_scrolling_lines")]
|
|
||||||
#[serde(default="default_normal_scrolling_lines")]
|
|
||||||
pub normal_scrolling_lines: u8,
|
|
||||||
}
|
|
||||||
|
|
||||||
fn default_faux_scrollback_lines() -> u8 {
|
|
||||||
1
|
|
||||||
}
|
|
||||||
|
|
||||||
fn default_normal_scrolling_lines() -> u8 {
|
|
||||||
3
|
|
||||||
}
|
|
||||||
|
|
||||||
fn deserialize_faux_scrollback_lines<'a, D>(deserializer: D) -> ::std::result::Result<u8, D::Error>
|
|
||||||
where D: de::Deserializer<'a>
|
|
||||||
{
|
|
||||||
match u8::deserialize(deserializer) {
|
|
||||||
Ok(lines) => Ok(lines),
|
|
||||||
Err(err) => {
|
|
||||||
eprintln!("problem with config: {}; Using default value", err);
|
|
||||||
Ok(default_faux_scrollback_lines())
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn deserialize_normal_scrolling_lines<'a, D>(deserializer: D) -> ::std::result::Result<u8, D::Error>
|
|
||||||
where D: de::Deserializer<'a>
|
|
||||||
{
|
|
||||||
match u8::deserialize(deserializer) {
|
|
||||||
Ok(lines) => Ok(lines),
|
|
||||||
Err(err) => {
|
|
||||||
eprintln!("problem with config: {}; Using default value", err);
|
|
||||||
Ok(default_normal_scrolling_lines())
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Mouse {
|
impl Default for Mouse {
|
||||||
|
@ -134,8 +96,7 @@ impl Default for Mouse {
|
||||||
triple_click: ClickHandler {
|
triple_click: ClickHandler {
|
||||||
threshold: Duration::from_millis(300),
|
threshold: Duration::from_millis(300),
|
||||||
},
|
},
|
||||||
faux_scrollback_lines: default_faux_scrollback_lines(),
|
faux_scrollback_lines: None,
|
||||||
normal_scrolling_lines: default_normal_scrolling_lines(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -420,12 +381,8 @@ pub struct Config {
|
||||||
tabspaces: usize,
|
tabspaces: usize,
|
||||||
|
|
||||||
/// How much scrolling history to keep
|
/// How much scrolling history to keep
|
||||||
#[serde(default="default_scroll_history", deserialize_with="deserialize_scroll_history")]
|
#[serde(default, deserialize_with="failure_default")]
|
||||||
scroll_history: u32,
|
scrolling: Scrolling,
|
||||||
}
|
|
||||||
|
|
||||||
fn default_scroll_history() -> u32 {
|
|
||||||
10_000
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_scroll_history<'a, D>(deserializer: D) -> ::std::result::Result<u32, D::Error>
|
fn deserialize_scroll_history<'a, D>(deserializer: D) -> ::std::result::Result<u32, D::Error>
|
||||||
|
@ -521,6 +478,63 @@ impl Default for Config {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Struct for scrolling related settings
|
||||||
|
#[derive(Copy, Clone, Debug, Deserialize)]
|
||||||
|
pub struct Scrolling {
|
||||||
|
#[serde(deserialize_with="deserialize_scrolling_history")]
|
||||||
|
#[serde(default="default_scrolling_history")]
|
||||||
|
pub history: u32,
|
||||||
|
#[serde(deserialize_with="deserialize_scrolling_multiplier")]
|
||||||
|
#[serde(default="default_scrolling_multiplier")]
|
||||||
|
pub multiplier: u8,
|
||||||
|
#[serde(deserialize_with="deserialize_scrolling_multiplier")]
|
||||||
|
#[serde(default="default_scrolling_multiplier")]
|
||||||
|
pub faux_multiplier: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn default_scrolling_history() -> u32 {
|
||||||
|
10_000
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default for normal and faux scrolling
|
||||||
|
fn default_scrolling_multiplier() -> u8 {
|
||||||
|
3
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Scrolling {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
history: default_scrolling_history(),
|
||||||
|
multiplier: default_scrolling_multiplier(),
|
||||||
|
faux_multiplier: default_scrolling_multiplier(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn deserialize_scrolling_history<'a, D>(deserializer: D) -> ::std::result::Result<u32, D::Error>
|
||||||
|
where D: de::Deserializer<'a>
|
||||||
|
{
|
||||||
|
match u32::deserialize(deserializer) {
|
||||||
|
Ok(lines) => Ok(lines),
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("problem with config: {}; Using default value", err);
|
||||||
|
Ok(default_scrolling_history())
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn deserialize_scrolling_multiplier<'a, D>(deserializer: D) -> ::std::result::Result<u8, D::Error>
|
||||||
|
where D: de::Deserializer<'a>
|
||||||
|
{
|
||||||
|
match u8::deserialize(deserializer) {
|
||||||
|
Ok(lines) => Ok(lines),
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("problem with config: {}; Using default value", err);
|
||||||
|
Ok(default_scrolling_multiplier())
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Newtype for implementing deserialize on glutin Mods
|
/// Newtype for implementing deserialize on glutin Mods
|
||||||
///
|
///
|
||||||
/// Our deserialize impl wouldn't be covered by a derive(Deserialize); see the
|
/// Our deserialize impl wouldn't be covered by a derive(Deserialize); see the
|
||||||
|
@ -1286,10 +1300,6 @@ impl Config {
|
||||||
.map(|path| path.into())
|
.map(|path| path.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn scroll_history(&self) -> usize {
|
|
||||||
self.scroll_history as _
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn write_defaults() -> io::Result<Cow<'static, Path>> {
|
pub fn write_defaults() -> io::Result<Cow<'static, Path>> {
|
||||||
let path = ::xdg::BaseDirectories::with_prefix("alacritty")
|
let path = ::xdg::BaseDirectories::with_prefix("alacritty")
|
||||||
.map_err(|err| io::Error::new(io::ErrorKind::NotFound, ::std::error::Error::description(&err)))
|
.map_err(|err| io::Error::new(io::ErrorKind::NotFound, ::std::error::Error::description(&err)))
|
||||||
|
@ -1419,6 +1429,12 @@ impl Config {
|
||||||
self.dynamic_title
|
self.dynamic_title
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Scrolling settings
|
||||||
|
#[inline]
|
||||||
|
pub fn scrolling(&self) -> Scrolling {
|
||||||
|
self.scrolling
|
||||||
|
}
|
||||||
|
|
||||||
pub fn load_from<P: Into<PathBuf>>(path: P) -> Result<Config> {
|
pub fn load_from<P: Into<PathBuf>>(path: P) -> Result<Config> {
|
||||||
let path = path.into();
|
let path = path.into();
|
||||||
let raw = Config::read_file(path.as_path())?;
|
let raw = Config::read_file(path.as_path())?;
|
||||||
|
@ -1451,6 +1467,11 @@ impl Config {
|
||||||
eprintln!("{}", fmt::Yellow("Config `padding` is deprecated. \
|
eprintln!("{}", fmt::Yellow("Config `padding` is deprecated. \
|
||||||
Please use `window.padding` instead."));
|
Please use `window.padding` instead."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.mouse.faux_scrollback_lines.is_some() {
|
||||||
|
println!("{}", fmt::Yellow("Config `mouse.faux_scrollback_lines` is deprecated. \
|
||||||
|
Please use `mouse.faux_scrolling_lines` instead."));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -191,6 +191,7 @@ pub struct Processor<N> {
|
||||||
key_bindings: Vec<KeyBinding>,
|
key_bindings: Vec<KeyBinding>,
|
||||||
mouse_bindings: Vec<MouseBinding>,
|
mouse_bindings: Vec<MouseBinding>,
|
||||||
mouse_config: config::Mouse,
|
mouse_config: config::Mouse,
|
||||||
|
scrolling_config: config::Scrolling,
|
||||||
print_events: bool,
|
print_events: bool,
|
||||||
wait_for_event: bool,
|
wait_for_event: bool,
|
||||||
notifier: N,
|
notifier: N,
|
||||||
|
@ -232,6 +233,7 @@ impl<N: Notify> Processor<N> {
|
||||||
key_bindings: config.key_bindings().to_vec(),
|
key_bindings: config.key_bindings().to_vec(),
|
||||||
mouse_bindings: config.mouse_bindings().to_vec(),
|
mouse_bindings: config.mouse_bindings().to_vec(),
|
||||||
mouse_config: config.mouse().to_owned(),
|
mouse_config: config.mouse().to_owned(),
|
||||||
|
scrolling_config: config.scrolling(),
|
||||||
print_events: options.print_events,
|
print_events: options.print_events,
|
||||||
wait_for_event: true,
|
wait_for_event: true,
|
||||||
notifier,
|
notifier,
|
||||||
|
@ -395,6 +397,7 @@ impl<N: Notify> Processor<N> {
|
||||||
|
|
||||||
processor = input::Processor {
|
processor = input::Processor {
|
||||||
ctx: context,
|
ctx: context,
|
||||||
|
scrolling_config: &self.scrolling_config,
|
||||||
mouse_config: &self.mouse_config,
|
mouse_config: &self.mouse_config,
|
||||||
key_bindings: &self.key_bindings[..],
|
key_bindings: &self.key_bindings[..],
|
||||||
mouse_bindings: &self.mouse_bindings[..],
|
mouse_bindings: &self.mouse_bindings[..],
|
||||||
|
|
|
@ -44,6 +44,7 @@ pub struct Processor<'a, A: 'a> {
|
||||||
pub key_bindings: &'a [KeyBinding],
|
pub key_bindings: &'a [KeyBinding],
|
||||||
pub mouse_bindings: &'a [MouseBinding],
|
pub mouse_bindings: &'a [MouseBinding],
|
||||||
pub mouse_config: &'a config::Mouse,
|
pub mouse_config: &'a config::Mouse,
|
||||||
|
pub scrolling_config: &'a config::Scrolling,
|
||||||
pub ctx: A,
|
pub ctx: A,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -711,8 +712,9 @@ mod tests {
|
||||||
triple_click: ClickHandler {
|
triple_click: ClickHandler {
|
||||||
threshold: Duration::from_millis(1000),
|
threshold: Duration::from_millis(1000),
|
||||||
},
|
},
|
||||||
faux_scrollback_lines: 1,
|
faux_scrollback_lines: None,
|
||||||
},
|
},
|
||||||
|
scrolling_config: &config::Scrolling::default(),
|
||||||
key_bindings: &config.key_bindings()[..],
|
key_bindings: &config.key_bindings()[..],
|
||||||
mouse_bindings: &config.mouse_bindings()[..],
|
mouse_bindings: &config.mouse_bindings()[..],
|
||||||
};
|
};
|
||||||
|
|
|
@ -847,7 +847,8 @@ impl Term {
|
||||||
let num_cols = size.cols();
|
let num_cols = size.cols();
|
||||||
let num_lines = size.lines();
|
let num_lines = size.lines();
|
||||||
|
|
||||||
let grid = Grid::new(num_lines, num_cols, config.scroll_history(), template);
|
let history_size = config.scrolling().history as usize;
|
||||||
|
let grid = Grid::new(num_lines, num_cols, history_size, template);
|
||||||
|
|
||||||
let tabspaces = config.tabspaces();
|
let tabspaces = config.tabspaces();
|
||||||
let tabs = IndexRange::from(Column(0)..grid.num_cols())
|
let tabs = IndexRange::from(Column(0)..grid.num_cols())
|
||||||
|
|
Loading…
Reference in a new issue