diff options
Diffstat (limited to 'alacritty/src')
-rw-r--r-- | alacritty/src/cli.rs | 2 | ||||
-rw-r--r-- | alacritty/src/config/ui_config.rs | 2 | ||||
-rw-r--r-- | alacritty/src/display/hint.rs | 48 | ||||
-rw-r--r-- | alacritty/src/display/mod.rs | 2 | ||||
-rw-r--r-- | alacritty/src/logging.rs | 2 |
5 files changed, 19 insertions, 37 deletions
diff --git a/alacritty/src/cli.rs b/alacritty/src/cli.rs index fee2680f..d5e24b4a 100644 --- a/alacritty/src/cli.rs +++ b/alacritty/src/cli.rs @@ -5,7 +5,7 @@ use std::rc::Rc; use alacritty_config::SerdeReplace; use clap::{ArgAction, Args, Parser, Subcommand, ValueHint}; -use log::{self, error, LevelFilter}; +use log::{error, LevelFilter}; use serde::{Deserialize, Serialize}; use toml::Value; diff --git a/alacritty/src/config/ui_config.rs b/alacritty/src/config/ui_config.rs index 21059734..a4b6c2c5 100644 --- a/alacritty/src/config/ui_config.rs +++ b/alacritty/src/config/ui_config.rs @@ -10,7 +10,7 @@ use alacritty_terminal::term::Config as TermConfig; use alacritty_terminal::tty::{Options as PtyOptions, Shell}; use log::{error, warn}; use serde::de::{Error as SerdeError, MapAccess, Visitor}; -use serde::{self, Deserialize, Deserializer}; +use serde::{Deserialize, Deserializer}; use unicode_width::UnicodeWidthChar; use winit::keyboard::{Key, ModifiersState}; diff --git a/alacritty/src/display/hint.rs b/alacritty/src/display/hint.rs index bd09a881..f118dbe0 100644 --- a/alacritty/src/display/hint.rs +++ b/alacritty/src/display/hint.rs @@ -204,7 +204,8 @@ pub struct HintMatch { impl HintMatch { #[inline] pub fn should_highlight(&self, point: Point, pointed_hyperlink: Option<&Hyperlink>) -> bool { - self.bounds.contains(&point) && self.hyperlink.as_ref() == pointed_hyperlink + self.hyperlink.as_ref() == pointed_hyperlink + && (self.hyperlink.is_some() || self.bounds.contains(&point)) } #[inline] @@ -400,49 +401,30 @@ pub fn highlighted_at<T>( } /// Retrieve the hyperlink with its range, if there is one at the specified point. +/// +/// This will only return contiguous cells, even if another hyperlink with the same ID exists. fn hyperlink_at<T>(term: &Term<T>, point: Point) -> Option<(Hyperlink, Match)> { let hyperlink = term.grid()[point].hyperlink()?; - let viewport_start = Line(-(term.grid().display_offset() as i32)); - let viewport_end = viewport_start + term.bottommost_line(); - - let mut match_start = Point::new(point.line, Column(0)); - let mut match_end = Point::new(point.line, Column(term.columns() - 1)); let grid = term.grid(); - // Find adjacent lines that have the same `hyperlink`. The end purpose to highlight hyperlinks - // that span across multiple lines or not directly attached to each other. - - // Find the closest to the viewport start adjacent line. - while match_start.line > viewport_start { - let next_line = match_start.line - 1i32; - // Iterate over all the cells in the grid's line and check if any of those cells contains - // the hyperlink we've found at original `point`. - let line_contains_hyperlink = grid[next_line] - .into_iter() - .any(|cell| cell.hyperlink().map_or(false, |h| h == hyperlink)); - - // There's no hyperlink on the next line, break. - if !line_contains_hyperlink { + let mut match_end = point; + for cell in grid.iter_from(point) { + if cell.hyperlink().map_or(false, |link| link == hyperlink) { + match_end = cell.point; + } else { break; } - - match_start.line = next_line; } - // Ditto for the end. - while match_end.line < viewport_end { - let next_line = match_end.line + 1i32; - - let line_contains_hyperlink = grid[next_line] - .into_iter() - .any(|cell| cell.hyperlink().map_or(false, |h| h == hyperlink)); - - if !line_contains_hyperlink { + let mut match_start = point; + let mut iter = grid.iter_from(point); + while let Some(cell) = iter.prev() { + if cell.hyperlink().map_or(false, |link| link == hyperlink) { + match_start = cell.point; + } else { break; } - - match_end.line = next_line; } Some((hyperlink, match_start..=match_end)) diff --git a/alacritty/src/display/mod.rs b/alacritty/src/display/mod.rs index dc37794d..4dafa80f 100644 --- a/alacritty/src/display/mod.rs +++ b/alacritty/src/display/mod.rs @@ -20,7 +20,7 @@ use winit::dpi::PhysicalSize; use winit::keyboard::ModifiersState; use winit::window::CursorIcon; -use crossfont::{self, Rasterize, Rasterizer, Size as FontSize}; +use crossfont::{Rasterize, Rasterizer, Size as FontSize}; use unicode_width::UnicodeWidthChar; use alacritty_terminal::event::{EventListener, OnResize, WindowSize}; diff --git a/alacritty/src/logging.rs b/alacritty/src/logging.rs index 42f1536e..a3833a5b 100644 --- a/alacritty/src/logging.rs +++ b/alacritty/src/logging.rs @@ -12,7 +12,7 @@ use std::sync::{Arc, Mutex, OnceLock}; use std::time::Instant; use std::{env, process}; -use log::{self, Level, LevelFilter}; +use log::{Level, LevelFilter}; use winit::event_loop::EventLoopProxy; use crate::cli::Options; |