summaryrefslogtreecommitdiffstats
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-rw-r--r--src/config.rs32
-rw-r--r--src/input.rs9
2 files changed, 31 insertions, 10 deletions
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)