aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--alacritty/src/cli.rs2
-rw-r--r--alacritty/src/config/ui_config.rs2
-rw-r--r--alacritty/src/display/hint.rs48
-rw-r--r--alacritty/src/display/mod.rs2
-rw-r--r--alacritty/src/logging.rs2
-rw-r--r--alacritty_terminal/src/event_loop.rs1
-rw-r--r--alacritty_terminal/src/grid/storage.rs2
-rw-r--r--alacritty_terminal/src/term/mod.rs2
-rw-r--r--alacritty_terminal/src/tty/unix.rs2
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;