aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Wilm <joe@jwilm.com>2018-02-16 17:54:32 -0800
committerJoe Wilm <joe@jwilm.com>2018-03-07 09:47:21 -0800
commit5c648a34aabf9c9805eced4f3b5443310a4cd461 (patch)
tree1da7dfad203eb8dbc1952636745945be2a7b30e2
parent001b780dda549b08c170193ea81b9961edb20acf (diff)
downloadalacritty-5c648a34aabf9c9805eced4f3b5443310a4cd461.tar.gz
alacritty-5c648a34aabf9c9805eced4f3b5443310a4cd461.zip
Make number of scrollback lines configurable
-rw-r--r--alacritty.yml3
-rw-r--r--alacritty_macos.yml3
-rw-r--r--src/config.rs12
-rw-r--r--src/grid/mod.rs29
-rw-r--r--src/term/mod.rs4
5 files changed, 33 insertions, 18 deletions
diff --git a/alacritty.yml b/alacritty.yml
index 90a27254..fcc637c3 100644
--- a/alacritty.yml
+++ b/alacritty.yml
@@ -33,6 +33,9 @@ window:
# Setting this to false will result in window without borders and title bar.
decorations: true
+# How many lines of scrollback to keep
+scroll_history: 10000
+
# Display tabs using this many cells (changes require restart)
tabspaces: 8
diff --git a/alacritty_macos.yml b/alacritty_macos.yml
index 7593cabe..baf17e61 100644
--- a/alacritty_macos.yml
+++ b/alacritty_macos.yml
@@ -31,6 +31,9 @@ window:
# Setting this to false will result in window without borders and title bar.
decorations: true
+# How many lines of scrollback to keep
+scroll_history: 10000
+
# Display tabs using this many cells (changes require restart)
tabspaces: 8
diff --git a/src/config.rs b/src/config.rs
index eb7f0f72..58f4b815 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -396,6 +396,14 @@ pub struct Config {
/// Number of spaces in one tab
#[serde(default="default_tabspaces", deserialize_with = "deserialize_tabspaces")]
tabspaces: usize,
+
+ /// How much scrolling history to keep
+ #[serde(default="default_scroll_history")]
+ scroll_history: u32,
+}
+
+fn default_scroll_history() -> u32 {
+ 10_000
}
fn failure_default_vec<'a, D, T>(deserializer: D) -> ::std::result::Result<Vec<T>, D::Error>
@@ -1244,6 +1252,10 @@ impl Config {
.map(|path| path.into())
}
+ pub fn scroll_history(&self) -> usize {
+ self.scroll_history as _
+ }
+
pub fn write_defaults() -> io::Result<Cow<'static, Path>> {
let path = ::xdg::BaseDirectories::with_prefix("alacritty")
.map_err(|err| io::Error::new(io::ErrorKind::NotFound, ::std::error::Error::description(&err)))
diff --git a/src/grid/mod.rs b/src/grid/mod.rs
index c6543270..1cb0876e 100644
--- a/src/grid/mod.rs
+++ b/src/grid/mod.rs
@@ -28,9 +28,6 @@ mod tests;
mod storage;
use self::storage::Storage;
-/// Lines to keep in scrollback buffer
-const SCROLLBACK_LINES: usize = 10_000;
-
/// Convert a type to a linear index range.
pub trait ToRange {
fn to_range(&self) -> RangeInclusive<index::Linear>;
@@ -101,19 +98,8 @@ pub struct GridIterator<'a, T: 'a> {
}
impl<T: Copy + Clone> Grid<T> {
- pub fn scroll_display(&mut self, count: isize) {
- self.display_offset = min(
- max((self.display_offset as isize) + count, 0isize) as usize,
- self.scroll_limit
- );
- }
-
- pub fn reset_scroll(&mut self) {
- self.display_offset = 0;
- }
-
- pub fn new(lines: index::Line, cols: index::Column, template: T) -> Grid<T> {
- let mut raw = Storage::with_capacity(*lines + SCROLLBACK_LINES, lines);
+ pub fn new(lines: index::Line, cols: index::Column, scrollback: usize, template: T) -> Grid<T> {
+ let mut raw = Storage::with_capacity(*lines + scrollback, lines);
let template_row = Row::new(cols, &template);
// Allocate all lines in the buffer, including scrollback history
@@ -137,6 +123,17 @@ impl<T: Copy + Clone> Grid<T> {
}
}
+ pub fn scroll_display(&mut self, count: isize) {
+ self.display_offset = min(
+ max((self.display_offset as isize) + count, 0isize) as usize,
+ self.scroll_limit
+ );
+ }
+
+ pub fn reset_scroll_display(&mut self) {
+ self.display_offset = 0;
+ }
+
pub fn resize(&mut self, lines: index::Line, cols: index::Column) {
// Check that there's actually work to do and return early if not
if lines == self.lines && cols == self.cols {
diff --git a/src/term/mod.rs b/src/term/mod.rs
index 669ada2f..20cb1b5a 100644
--- a/src/term/mod.rs
+++ b/src/term/mod.rs
@@ -808,7 +808,7 @@ impl Term {
}
pub fn reset_scroll(&mut self) {
- self.grid.reset_scroll();
+ self.grid.reset_scroll_display();
}
#[inline]
@@ -822,7 +822,7 @@ impl Term {
let num_cols = size.cols();
let num_lines = size.lines();
- let grid = Grid::new(num_lines, num_cols, template);
+ let grid = Grid::new(num_lines, num_cols, config.scroll_history(), template);
let tabspaces = config.tabspaces();
let tabs = IndexRange::from(Column(0)..grid.num_cols())