From cab675b5fb20d4e26dfdd819b96ed9208adbd78d Mon Sep 17 00:00:00 2001 From: Dongdong Zhou Date: Thu, 12 Nov 2020 22:15:36 +0000 Subject: [PATCH] matching brackets --- core/src/buffer.rs | 11 ++++++----- core/src/editor.rs | 19 +++++++++++-------- core/src/keypress.rs | 4 ++++ core/src/movement.rs | 4 ++-- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/core/src/buffer.rs b/core/src/buffer.rs index f8c9ea93..7061bfc6 100644 --- a/core/src/buffer.rs +++ b/core/src/buffer.rs @@ -995,15 +995,14 @@ fn matching_char(&self, c: char) -> Option { pub fn next_unmatched(&mut self, c: char) -> Option { let other = self.matching_char(c)?; let mut n = 0; - let mut candidate = self.inner.pos(); while let Some(current) = self.inner.next_codepoint() { - if current == c { - if n == 0 { - return Some(self.inner.pos()); - } + if current == c && n == 0 { + return Some(self.inner.pos()); } if current == other { n += 1; + } else if current == c { + n -= 1; } } None @@ -1020,6 +1019,8 @@ pub fn previous_unmatched(&mut self, c: char) -> Option { } if current == other { n += 1; + } else if current == c { + n -= 1; } } None diff --git a/core/src/editor.rs b/core/src/editor.rs index bb2efa5e..22392b9e 100644 --- a/core/src/editor.rs +++ b/core/src/editor.rs @@ -298,14 +298,17 @@ fn move_command( LapceCommand::WordBackward => Some(Movement::WordBackward), LapceCommand::WordFoward => Some(Movement::WordForward), LapceCommand::WordEndForward => Some(Movement::WordEndForward), - LapceCommand::NextUnmatchedRightBracket => - Some(Movement::NextUnmatched(')')), - LapceCommand::PreviousUnmatchedLeftBracket => - Some(Movement::PreviousUnmatched('(')), - LapceCommand::NextUnmatchedRightCurlyBracket => - Some(Movement::NextUnmatched('}')), - LapceCommand::PreviousUnmatchedLeftCurlyBracket => - Some(Movement::PreviousUnmatched('{')), + LapceCommand::NextUnmatchedRightBracket => { + Some(Movement::NextUnmatched(')')) + } + LapceCommand::PreviousUnmatchedLeftBracket => { + Some(Movement::PreviousUnmatched('(')) + } + LapceCommand::NextUnmatchedRightCurlyBracket => { + Some(Movement::NextUnmatched('}')) + } + LapceCommand::PreviousUnmatchedLeftCurlyBracket => { + Some(Movement::PreviousUnmatched('{')) } _ => None, } diff --git a/core/src/keypress.rs b/core/src/keypress.rs index 017236dd..43693a46 100644 --- a/core/src/keypress.rs +++ b/core/src/keypress.rs @@ -3,6 +3,7 @@ use std::{fs::File, sync::Arc}; use anyhow::{anyhow, Result}; +use druid::KbKey; use druid::{ Color, Data, Env, EventCtx, ExtEventSink, KeyEvent, Modifiers, Target, WidgetId, WindowId, @@ -152,6 +153,9 @@ pub fn key_down( key_event: &KeyEvent, env: &Env, ) { + if key_event.key == KbKey::Shift { + return; + } let mut mods = key_event.mods.clone(); mods.set(Modifiers::SHIFT, false); let keypress = KeyPress { diff --git a/core/src/movement.rs b/core/src/movement.rs index 3d323d52..f12f3b69 100644 --- a/core/src/movement.rs +++ b/core/src/movement.rs @@ -478,8 +478,8 @@ pub fn update_region( Movement::NextUnmatched(c) => { let mut end = region.end; for i in 0..count { - if let Some(new) = buffer.next_unmmatched(end, *c) { - end = new; + if let Some(new) = buffer.next_unmmatched(end + 1, *c) { + end = new - 1; } else { break; }