aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src/config/bindings.rs
diff options
context:
space:
mode:
authorChristian Duerr <contact@christianduerr.com>2024-11-02 20:05:51 +0000
committerGitHub <noreply@github.com>2024-11-02 20:05:51 +0000
commitfd745a9f4cb3ba81623167c9d1117747353db33a (patch)
treeeffc8817d4d024dd80477fce123bcd2335b95874 /alacritty/src/config/bindings.rs
parent39ea7271e32ad88280191d8040d6f8feafe4307a (diff)
downloadr-alacritty-fd745a9f4cb3ba81623167c9d1117747353db33a.tar.gz
r-alacritty-fd745a9f4cb3ba81623167c9d1117747353db33a.tar.bz2
r-alacritty-fd745a9f4cb3ba81623167c9d1117747353db33a.zip
Fix racing condition in hint triggering
This fixes an issue with hints where it was possible that the terminal content of highlighted hints changed between the highlighted hint update and the activation of the hint. This patch always validates the hint's text content against the hint itself to ensure that the content is still valid for the original hint which triggered the highlight. Closes #8277.
Diffstat (limited to 'alacritty/src/config/bindings.rs')
-rw-r--r--alacritty/src/config/bindings.rs11
1 files changed, 6 insertions, 5 deletions
diff --git a/alacritty/src/config/bindings.rs b/alacritty/src/config/bindings.rs
index dfe31853..931b0583 100644
--- a/alacritty/src/config/bindings.rs
+++ b/alacritty/src/config/bindings.rs
@@ -5,6 +5,7 @@ use std::fmt::{self, Debug, Display};
use bitflags::bitflags;
use serde::de::{self, Error as SerdeError, MapAccess, Unexpected, Visitor};
use serde::{Deserialize, Deserializer};
+use std::rc::Rc;
use toml::Value as SerdeValue;
use winit::event::MouseButton;
use winit::keyboard::{
@@ -96,7 +97,7 @@ pub enum Action {
/// Regex keyboard hints.
#[config(skip)]
- Hint(Hint),
+ Hint(Rc<Hint>),
/// Move vi mode cursor.
#[config(skip)]
@@ -790,7 +791,7 @@ impl<'a> Deserialize<'a> for ModeWrapper {
{
struct ModeVisitor;
- impl<'a> Visitor<'a> for ModeVisitor {
+ impl Visitor<'_> for ModeVisitor {
type Value = ModeWrapper;
fn expecting(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
@@ -844,7 +845,7 @@ impl<'a> Deserialize<'a> for MouseButtonWrapper {
{
struct MouseButtonVisitor;
- impl<'a> Visitor<'a> for MouseButtonVisitor {
+ impl Visitor<'_> for MouseButtonVisitor {
type Value = MouseButtonWrapper;
fn expecting(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
@@ -956,7 +957,7 @@ impl<'a> Deserialize<'a> for RawBinding {
{
struct FieldVisitor;
- impl<'a> Visitor<'a> for FieldVisitor {
+ impl Visitor<'_> for FieldVisitor {
type Value = Field;
fn expecting(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
@@ -1204,7 +1205,7 @@ impl<'a> de::Deserialize<'a> for ModsWrapper {
{
struct ModsVisitor;
- impl<'a> Visitor<'a> for ModsVisitor {
+ impl Visitor<'_> for ModsVisitor {
type Value = ModsWrapper;
fn expecting(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {