From ecd9270ffea36a224e70564604ef1befe05526b8 Mon Sep 17 00:00:00 2001 From: Christian Duerr Date: Fri, 8 Feb 2019 04:49:44 +0000 Subject: [PATCH] Remove selections when clearing screen partially Automatically remove all selections when part of the screen is cleared. This fixes issues in applications like `less -S` where a selection would stay around after scrolling horizontally. XTerm and URxvt both choose to always remove the selection, even if it's outside of the cleared area, however VTE only clears the selection if any part of it is inside the cleared area. To keep things simple, Alacritty has adopted the behavior of XTerm and URxvt to always clear selections. This fixes #1644. --- CHANGELOG.md | 1 + src/term/mod.rs | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a5028cb..93826ee6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix IME position on HiDPI displays - URLs not opening while terminal is scrolled - Reliably remove log file when Alacritty is closed and persistent logging is disabled +- Remove selections when clearing the screen partially (scrolling horizontally in less) ### Removed diff --git a/src/term/mod.rs b/src/term/mod.rs index 76ac9c25..2446f048 100644 --- a/src/term/mod.rs +++ b/src/term/mod.rs @@ -1866,6 +1866,9 @@ impl ansi::Handler for Term { let mut template = self.cursor.template; template.flags ^= template.flags; + // Remove active selections + self.grid.selection = None; + match mode { ansi::ClearMode::Below => { for cell in &mut self.grid[self.cursor.point.line][self.cursor.point.col..] { @@ -1891,9 +1894,7 @@ impl ansi::Handler for Term { } }, // If scrollback is implemented, this should clear it - ansi::ClearMode::Saved => { - self.grid.clear_history(); - } + ansi::ClearMode::Saved => self.grid.clear_history(), } }