From 40bbdce6de8775b7bbc3f9a5731337d1dd05d195 Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Mon, 11 Jul 2022 22:54:28 +0300 Subject: Fix hyperlinks not being keyboard actionable This fixes a typo in 694a52b which was filtering all hyperlinks, except only duplicated ones when opening them with keyboard. Co-authored-by: Christian Duerr --- alacritty/src/display/hint.rs | 44 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) (limited to 'alacritty/src') diff --git a/alacritty/src/display/hint.rs b/alacritty/src/display/hint.rs index a59f2bc7..887840e9 100644 --- a/alacritty/src/display/hint.rs +++ b/alacritty/src/display/hint.rs @@ -79,7 +79,7 @@ impl HintState { // Add escape sequence hyperlinks. if hint.content.hyperlinks { - self.matches.extend(visible_unique_hyperlink_iter(term)); + self.matches.extend(visible_unique_hyperlinks_iter(term)); } // Add visible regex matches. @@ -298,7 +298,7 @@ pub fn visible_regex_match_iter<'a, T>( } /// Iterate over all visible hyperlinks, yanking only unique ones. -pub fn visible_unique_hyperlink_iter(term: &Term) -> impl Iterator + '_ { +pub fn visible_unique_hyperlinks_iter(term: &Term) -> impl Iterator + '_ { let mut display_iter = term.grid().display_iter().peekable(); // Avoid creating hints for the same hyperlinks, but from a different places. @@ -308,7 +308,7 @@ pub fn visible_unique_hyperlink_iter(term: &Term) -> impl Iterator Iterator for HintPostProcessor<'a, T> { #[cfg(test)] mod tests { + use alacritty_terminal::ansi::Handler; use alacritty_terminal::index::{Column, Line}; use alacritty_terminal::term::test::mock_term; @@ -642,4 +643,41 @@ mod tests { assert_eq!(count, 0); } + + #[test] + fn collect_unique_hyperlinks() { + let mut term = mock_term("000\r\n111"); + term.goto(Line(0), Column(0)); + + let hyperlink_foo = Hyperlink::new(Some("1"), "foo"); + let hyperlink_bar = Hyperlink::new(Some("2"), "bar"); + + // Create 2 hyperlinks on the first line. + term.set_hyperlink(Some(hyperlink_foo.clone())); + term.input('b'); + term.input('a'); + term.set_hyperlink(Some(hyperlink_bar.clone())); + term.input('r'); + term.set_hyperlink(Some(hyperlink_foo.clone())); + term.goto(Line(1), Column(0)); + + // Ditto for the second line. + term.set_hyperlink(Some(hyperlink_foo)); + term.input('b'); + term.input('a'); + term.set_hyperlink(Some(hyperlink_bar)); + term.input('r'); + term.set_hyperlink(None); + + let mut unique_hyperlinks = visible_unique_hyperlinks_iter(&term); + assert_eq!( + Some(Match::new(Point::new(Line(0), Column(0)), Point::new(Line(0), Column(1)))), + unique_hyperlinks.next() + ); + assert_eq!( + Some(Match::new(Point::new(Line(0), Column(2)), Point::new(Line(0), Column(2)))), + unique_hyperlinks.next() + ); + assert_eq!(None, unique_hyperlinks.next()); + } } -- cgit