diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-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 | ||||
-rw-r--r-- | alacritty_terminal/src/event_loop.rs | 1 | ||||
-rw-r--r-- | alacritty_terminal/src/grid/storage.rs | 2 | ||||
-rw-r--r-- | alacritty_terminal/src/term/mod.rs | 2 | ||||
-rw-r--r-- | alacritty_terminal/src/tty/unix.rs | 2 |
10 files changed, 22 insertions, 42 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index f5361861..63f2fe96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Mouse cursor not changing on Wayland when cursor theme uses legacy cursor icon names - Config keys are available under proper names - Build failure when compiling with x11 feature on NetBSD +- Hint `Select` action selecting the entire line for URL escapes ### Changed 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; diff --git a/alacritty_terminal/src/event_loop.rs b/alacritty_terminal/src/event_loop.rs index 929c642d..62dd7440 100644 --- a/alacritty_terminal/src/event_loop.rs +++ b/alacritty_terminal/src/event_loop.rs @@ -5,7 +5,6 @@ use std::collections::VecDeque; use std::fmt::{self, Display, Formatter}; use std::fs::File; use std::io::{self, ErrorKind, Read, Write}; -use std::marker::Send; use std::num::NonZeroUsize; use std::sync::mpsc::{self, Receiver, Sender, TryRecvError}; use std::sync::Arc; diff --git a/alacritty_terminal/src/grid/storage.rs b/alacritty_terminal/src/grid/storage.rs index d5709d14..0a2be43b 100644 --- a/alacritty_terminal/src/grid/storage.rs +++ b/alacritty_terminal/src/grid/storage.rs @@ -1,4 +1,4 @@ -use std::cmp::{max, PartialEq}; +use std::cmp::max; use std::mem; use std::mem::MaybeUninit; use std::ops::{Index, IndexMut}; diff --git a/alacritty_terminal/src/term/mod.rs b/alacritty_terminal/src/term/mod.rs index 2ed6d7c9..f17f7462 100644 --- a/alacritty_terminal/src/term/mod.rs +++ b/alacritty_terminal/src/term/mod.rs @@ -2389,10 +2389,8 @@ pub mod test { #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; - use unicode_width::UnicodeWidthChar; use crate::event::VoidListener; - use crate::index::Column; #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct TermSize { diff --git a/alacritty_terminal/src/tty/unix.rs b/alacritty_terminal/src/tty/unix.rs index 8ce04191..455abbd2 100644 --- a/alacritty_terminal/src/tty/unix.rs +++ b/alacritty_terminal/src/tty/unix.rs @@ -11,7 +11,7 @@ use std::process::{Child, Command, Stdio}; use std::sync::Arc; use std::{env, ptr}; -use libc::{self, c_int, TIOCSCTTY}; +use libc::{c_int, TIOCSCTTY}; use log::error; use polling::{Event, PollMode, Poller}; use rustix_openpty::openpty; |