aboutsummaryrefslogtreecommitdiff
path: root/src/term/mod.rs
diff options
context:
space:
mode:
authorChristian Duerr <chrisduerr@users.noreply.github.com>2018-09-28 22:07:24 +0000
committerGitHub <noreply@github.com>2018-09-28 22:07:24 +0000
commit1887722ef5b6ac1c1f0e4e4f62cbb02b609c1d4b (patch)
tree5c4e806af9775bd7b6a8b56c26e7e01b38077311 /src/term/mod.rs
parent88076938ed582e3aa8ef8752c6a7ec8948603c69 (diff)
downloadalacritty-1887722ef5b6ac1c1f0e4e4f62cbb02b609c1d4b.tar.gz
alacritty-1887722ef5b6ac1c1f0e4e4f62cbb02b609c1d4b.zip
Fix rendering of selections outside the viewport
When rendering selections with both start and end outside of the visible area, Alacritty would assume that both start and end are either above or below the viewport and not render the selection at all. To fix this the `buffer_line_to_visible` method now returns a `ViewportPosition` instead of an `Option<Line>`, this allows giving more feedback about where outside of the visible region the line is using the `ViewportPosition::Above` and `ViewportPosition::Below` variants. Using these newly introduced variants, a selection spanning the whole screen is now rendered if the selection should go from above the visible area to below it. This fixes #1557.
Diffstat (limited to 'src/term/mod.rs')
-rw-r--r--src/term/mod.rs13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/term/mod.rs b/src/term/mod.rs
index af464320..9be8b96b 100644
--- a/src/term/mod.rs
+++ b/src/term/mod.rs
@@ -23,7 +23,7 @@ use unicode_width::UnicodeWidthChar;
use font::{self, Size};
use ansi::{self, Color, NamedColor, Attr, Handler, CharsetIndex, StandardCharset, CursorStyle};
-use grid::{BidirectionalIterator, Grid, Indexed, IndexRegion, DisplayIter, Scroll};
+use grid::{BidirectionalIterator, Grid, Indexed, IndexRegion, DisplayIter, Scroll, ViewportPosition};
use index::{self, Point, Column, Line, IndexRange, Contains, RangeInclusive, Linear};
use selection::{self, Selection, Locations};
use config::{Config, VisualBellAnimation};
@@ -136,16 +136,19 @@ impl<'a> RenderableCellsIter<'a> {
// Get start/end locations based on what part of selection is on screen
let locations = match (start_line, end_line) {
- (Some(start_line), Some(end_line)) => {
+ (ViewportPosition::Visible(start_line), ViewportPosition::Visible(end_line)) => {
Some((start_line, loc.start.col, end_line, loc.end.col))
},
- (Some(start_line), None) => {
+ (ViewportPosition::Visible(start_line), ViewportPosition::Above) => {
Some((start_line, loc.start.col, Line(0), Column(0)))
},
- (None, Some(end_line)) => {
+ (ViewportPosition::Below, ViewportPosition::Visible(end_line)) => {
Some((grid.num_lines(), Column(0), end_line, loc.end.col))
},
- (None, None) => None,
+ (ViewportPosition::Below, ViewportPosition::Above) => {
+ Some((grid.num_lines(), Column(0), Line(0), Column(0)))
+ },
+ _ => None,
};
if let Some((start_line, start_col, end_line, end_col)) = locations {