From 8e74e57bad8a1f6adf078314b6007617897d6c43 Mon Sep 17 00:00:00 2001 From: Christian Duerr Date: Fri, 8 Jan 2021 16:40:45 +0000 Subject: [PATCH] Fix jumping between matches in reverse vi search Fixes #4676. --- CHANGELOG.md | 8 ++++++++ alacritty/src/input.rs | 16 ++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7b0b416..2b441b9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ The sections should follow the order `Packaging`, `Added`, `Changed`, `Fixed` an The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## 0.8.0-dev + +## 0.7.1 + +### Fixed + +- Jumping between matches in backward vi search + ## 0.7.0 ### Added diff --git a/alacritty/src/input.rs b/alacritty/src/input.rs index 2be0c8c4..155fab07 100644 --- a/alacritty/src/input.rs +++ b/alacritty/src/input.rs @@ -176,10 +176,12 @@ impl Execute for Action { }, Action::ViAction(ViAction::SearchNext) => { let terminal = ctx.terminal(); - let origin = terminal - .visible_to_buffer(terminal.vi_mode_cursor.point) - .add_absolute(terminal, Boundary::Wrap, 1); let direction = ctx.search_direction(); + let vi_point = terminal.visible_to_buffer(terminal.vi_mode_cursor.point); + let origin = match direction { + Direction::Right => vi_point.add_absolute(terminal, Boundary::Wrap, 1), + Direction::Left => vi_point.sub_absolute(terminal, Boundary::Wrap, 1), + }; let regex_match = terminal.search_next(origin, direction, Side::Left, None); if let Some(regex_match) = regex_match { @@ -188,10 +190,12 @@ impl Execute for Action { }, Action::ViAction(ViAction::SearchPrevious) => { let terminal = ctx.terminal(); - let origin = terminal - .visible_to_buffer(terminal.vi_mode_cursor.point) - .sub_absolute(terminal, Boundary::Wrap, 1); let direction = ctx.search_direction().opposite(); + let vi_point = terminal.visible_to_buffer(terminal.vi_mode_cursor.point); + let origin = match direction { + Direction::Right => vi_point.add_absolute(terminal, Boundary::Wrap, 1), + Direction::Left => vi_point.sub_absolute(terminal, Boundary::Wrap, 1), + }; let regex_match = terminal.search_next(origin, direction, Side::Left, None); if let Some(regex_match) = regex_match {