Skip to content

Commit

Permalink
Merge branch 'alacritty:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
chrhasse authored Mar 12, 2024
2 parents 34cba2e + 275726f commit 1979bc6
Show file tree
Hide file tree
Showing 10 changed files with 22 additions and 42 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion alacritty/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion alacritty/src/config/ui_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};

Expand Down
48 changes: 15 additions & 33 deletions alacritty/src/display/hint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down Expand Up @@ -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))
Expand Down
2 changes: 1 addition & 1 deletion alacritty/src/display/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down
2 changes: 1 addition & 1 deletion alacritty/src/logging.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 0 additions & 1 deletion alacritty_terminal/src/event_loop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion alacritty_terminal/src/grid/storage.rs
Original file line number Diff line number Diff line change
@@ -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};
Expand Down
2 changes: 0 additions & 2 deletions alacritty_terminal/src/term/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2493,10 +2493,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 {
Expand Down
2 changes: 1 addition & 1 deletion alacritty_terminal/src/tty/unix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 1979bc6

Please sign in to comment.