summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Duerr <contact@christianduerr.com>2018-03-09 16:06:39 +0100
committerJoe Wilm <jwilm@users.noreply.github.com>2018-03-13 14:52:14 -0700
commit5dbe6e58b91563d6b011d2be75d13a1e37bd9cac (patch)
treeda00723a792ec19d565371650c293d636a78a565
parentfce67e6f3f8495f7ba029c55f2e319626cee56ca (diff)
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.
-rw-r--r--alacritty.yml6
-rw-r--r--alacritty_macos.yml6
-rw-r--r--src/config.rs32
-rw-r--r--src/input.rs9
4 files changed, 43 insertions, 10 deletions
diff --git a/alacritty.yml b/alacritty.yml
index fcc637c3..6e87ede3 100644
--- a/alacritty.yml
+++ b/alacritty.yml
@@ -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: ",│`|:\"' ()[]{}<>"
diff --git a/alacritty_macos.yml b/alacritty_macos.yml
index baf17e61..08287c87 100644
--- a/alacritty_macos.yml
+++ b/alacritty_macos.yml
@@ -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: ",│`|:\"' ()[]{}<>"
diff --git a/src/config.rs b/src/config.rs
index a6d67b4a..d0741d9e 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -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(),
}
}
}
diff --git a/src/input.rs b/src/input.rs
index f7514d11..fabb3485 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -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)