1
0
Fork 0
mirror of https://github.com/alacritty/alacritty.git synced 2024-11-25 14:05:41 -05:00

Make normal scrolling line amount configurable

It is now possible to configure the amount of lines the viewport should
scroll when using the normal scrolling mode.

This fixes #1160.
This commit is contained in:
Christian Duerr 2018-03-09 16:06:39 +01:00 committed by Joe Wilm
parent fce67e6f3f
commit 5dbe6e58b9
4 changed files with 43 additions and 10 deletions

View file

@ -219,6 +219,12 @@ mouse:
# 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: 300
selection:
semantic_escape_chars: ",│`|:\"' ()[]{}<>"

View file

@ -200,6 +200,12 @@ mouse:
# 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:
semantic_escape_chars: ",│`|:\"' ()[]{}<>"

View file

@ -85,17 +85,26 @@ pub struct Mouse {
/// up/down arrows sent when scrolling in alt screen buffer
#[serde(deserialize_with = "deserialize_faux_scrollback_lines")]
#[serde(default="default_faux_scrollback_lines")]
pub faux_scrollback_lines: 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() -> usize {
fn default_faux_scrollback_lines() -> u8 {
1
}
fn deserialize_faux_scrollback_lines<'a, D>(deserializer: D) -> ::std::result::Result<usize, D::Error>
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 usize::deserialize(deserializer) {
match u8::deserialize(deserializer) {
Ok(lines) => Ok(lines),
Err(err) => {
eprintln!("problem with config: {}; Using default value", err);
@ -104,6 +113,18 @@ fn deserialize_faux_scrollback_lines<'a, D>(deserializer: D) -> ::std::result::R
}
}
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 {
fn default() -> Mouse {
Mouse {
@ -113,7 +134,8 @@ impl Default for Mouse {
triple_click: ClickHandler {
threshold: Duration::from_millis(300),
},
faux_scrollback_lines: 1,
faux_scrollback_lines: default_faux_scrollback_lines(),
normal_scrolling_lines: default_normal_scrolling_lines(),
}
}
}

View file

@ -34,8 +34,6 @@ use term::SizeInfo;
use term::mode::{self, TermMode};
use util::fmt::Red;
const SCROLL_MULTIPLIER: usize = 3;
/// Processes input from glutin.
///
/// An escape sequence may be emitted in case specific keys or key combinations
@ -399,8 +397,9 @@ impl<'a, A: ActionContext + 'a> Processor<'a, A> {
65
};
let scrolling_multiplier = self.mouse_config.normal_scrolling_lines;
for _ in 0..(to_scroll.abs() as usize) {
self.scroll_terminal(mouse_modes, code, modifiers, SCROLL_MULTIPLIER)
self.scroll_terminal(mouse_modes, code, modifiers, scrolling_multiplier)
}
self.ctx.mouse_mut().lines_scrolled = to_scroll % 1.0;
@ -433,10 +432,10 @@ impl<'a, A: ActionContext + 'a> Processor<'a, A> {
}
}
fn scroll_terminal(&mut self, mouse_modes: TermMode, code: u8, modifiers: ModifiersState, scroll_multiplier: usize) {
fn scroll_terminal(&mut self, mouse_modes: TermMode, code: u8, modifiers: ModifiersState, scroll_multiplier: u8) {
debug_assert!(code == 64 || code == 65);
let faux_scrollback_lines = self.mouse_config.faux_scrollback_lines;
let faux_scrollback_lines = self.mouse_config.faux_scrollback_lines as usize;
if self.ctx.terminal_mode().intersects(mouse_modes) {
self.mouse_report(code, ElementState::Pressed);
} else if self.ctx.terminal_mode().contains(TermMode::ALT_SCREEN)