From 28919898e98541b3305b08d8f05606c060b8ae00 Mon Sep 17 00:00:00 2001 From: Blaž Hrastnik Date: Thu, 26 Aug 2021 09:21:41 +0900 Subject: fix: KeyEvent::char needs to ignore modifiers Fixes #595 --- helix-view/src/input.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'helix-view') diff --git a/helix-view/src/input.rs b/helix-view/src/input.rs index 28b204bb..1e0ddfe2 100644 --- a/helix-view/src/input.rs +++ b/helix-view/src/input.rs @@ -15,10 +15,10 @@ pub struct KeyEvent { } impl KeyEvent { - /// If a character was pressed (without modifiers), return it. + /// If a character was pressed, return it. pub fn char(&self) -> Option { match self.code { - KeyCode::Char(ch) if self.modifiers.is_empty() => Some(ch), + KeyCode::Char(ch) => Some(ch), _ => None, } } -- cgit v1.2.3-70-g09d2 From fa4caf7e3d43a40073f6966d37f529d5197bd840 Mon Sep 17 00:00:00 2001 From: Brian Shu Date: Thu, 26 Aug 2021 14:45:23 -0400 Subject: remove unsafe --- helix-core/src/transaction.rs | 2 +- helix-view/src/document.rs | 17 +++++------------ 2 files changed, 6 insertions(+), 13 deletions(-) (limited to 'helix-view') diff --git a/helix-core/src/transaction.rs b/helix-core/src/transaction.rs index d15db000..d682f058 100644 --- a/helix-core/src/transaction.rs +++ b/helix-core/src/transaction.rs @@ -125,7 +125,7 @@ impl ChangeSet { /// In other words, If `this` goes `docA` → `docB` and `other` represents `docB` → `docC`, the /// returned value will represent the change `docA` → `docC`. pub fn compose(self, other: Self) -> Self { - debug_assert!(self.len_after == other.len); + assert!(self.len_after == other.len); // composing fails in weird ways if one of the sets is empty // a: [] len: 0 len_after: 1 | b: [Insert(Tendril(inline: "\n")), Retain(1)] len 1 diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index a238644a..e890a336 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -102,7 +102,7 @@ pub struct Document { language_server: Option>, } -use std::fmt; +use std::{fmt, mem}; impl fmt::Debug for Document { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("Document") @@ -301,20 +301,13 @@ pub async fn to_writer<'a, W: tokio::io::AsyncWriteExt + Unpin + ?Sized>( Ok(()) } -/// Like std::mem::replace() except it allows the replacement value to be mapped from the -/// original value. -fn take_with(mut_ref: &mut T, closure: F) +fn take_with(mut_ref: &mut T, f: F) where + T: Default, F: FnOnce(T) -> T, { - use std::{panic, ptr}; - - unsafe { - let old_t = ptr::read(mut_ref); - let new_t = panic::catch_unwind(panic::AssertUnwindSafe(|| closure(old_t))) - .unwrap_or_else(|_| ::std::process::abort()); - ptr::write(mut_ref, new_t); - } + let t = mem::take(mut_ref); + let _ = mem::replace(mut_ref, f(t)); } use helix_lsp::lsp; -- cgit v1.2.3-70-g09d2