on master help sign in
Refactor case where key event is solely a character
8a2fa69Gokul Soumya
helix-term/src/commands.rs+6−30
@@ -3632,11 +3632,7 @@ fn wclose(cx: &mut Context) {
3632
3632
3633fn select_register(cx: &mut Context) {
3633fn select_register(cx: &mut Context) {
3634 cx.on_next_key(move |cx, event| {
3634 cx.on_next_key(move |cx, event| {
3635− if let KeyEvent {
3636− code: KeyCode::Char(ch),
3637− ..
3638− } = event
3635+ if let Some(ch) = event.char() {
3639− {
3640 cx.editor.selected_register.select(ch);
3636 cx.editor.selected_register.select(ch);
3641 }
3637 }
3642 })
3638 })
@@ -3687,11 +3683,7 @@ fn select_textobject_inner(cx: &mut Context) {
3687fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
3683fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
3688 let count = cx.count();
3684 let count = cx.count();
3689 cx.on_next_key(move |cx, event| {
3685 cx.on_next_key(move |cx, event| {
3690− if let KeyEvent {
3691− code: KeyCode::Char(ch),
3692− ..
3693− } = event
3686+ if let Some(ch) = event.char() {
3694− {
3695 let (view, doc) = current!(cx.editor);
3687 let (view, doc) = current!(cx.editor);
3696 let text = doc.text().slice(..);
3688 let text = doc.text().slice(..);
3697
3689
@@ -3713,11 +3705,7 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
3713
3705
3714fn surround_add(cx: &mut Context) {
3706fn surround_add(cx: &mut Context) {
3715 cx.on_next_key(move |cx, event| {
3707 cx.on_next_key(move |cx, event| {
3716− if let KeyEvent {
3717− code: KeyCode::Char(ch),
3718− ..
3719− } = event
3708+ if let Some(ch) = event.char() {
3720− {
3721 let (view, doc) = current!(cx.editor);
3709 let (view, doc) = current!(cx.editor);
3722 let text = doc.text().slice(..);
3710 let text = doc.text().slice(..);
3723 let selection = doc.selection(view.id);
3711 let selection = doc.selection(view.id);
@@ -3743,17 +3731,9 @@ fn surround_add(cx: &mut Context) {
3743fn surround_replace(cx: &mut Context) {
3731fn surround_replace(cx: &mut Context) {
3744 let count = cx.count();
3732 let count = cx.count();
3745 cx.on_next_key(move |cx, event| {
3733 cx.on_next_key(move |cx, event| {
3746− if let KeyEvent {
3734+ if let Some(from) = event.char() {
3747− code: KeyCode::Char(from),
3748− ..
3749− } = event
3750− {
3751 cx.on_next_key(move |cx, event| {
3735 cx.on_next_key(move |cx, event| {
3752− if let KeyEvent {
3753− code: KeyCode::Char(to),
3754− ..
3755− } = event
3736+ if let Some(to) = event.char() {
3756− {
3757 let (view, doc) = current!(cx.editor);
3737 let (view, doc) = current!(cx.editor);
3758 let text = doc.text().slice(..);
3738 let text = doc.text().slice(..);
3759 let selection = doc.selection(view.id);
3739 let selection = doc.selection(view.id);
@@ -3783,11 +3763,7 @@ fn surround_replace(cx: &mut Context) {
3783fn surround_delete(cx: &mut Context) {
3763fn surround_delete(cx: &mut Context) {
3784 let count = cx.count();
3764 let count = cx.count();
3785 cx.on_next_key(move |cx, event| {
3765 cx.on_next_key(move |cx, event| {
3786− if let KeyEvent {
3787− code: KeyCode::Char(ch),
3788− ..
3789− } = event
3766+ if let Some(ch) = event.char() {
3790− {
3791 let (view, doc) = current!(cx.editor);
3767 let (view, doc) = current!(cx.editor);
3792 let text = doc.text().slice(..);
3768 let text = doc.text().slice(..);
3793 let selection = doc.selection(view.id);
3769 let selection = doc.selection(view.id);
helix-view/src/input.rs+2−2
@@ -15,10 +15,10 @@ pub struct KeyEvent {
15}
15}
16
16
17impl KeyEvent {
17impl KeyEvent {
18− /// Get only the character involved in this event
18+ /// If a character was pressed (without modifiers), return it.
19 pub fn char(&self) -> Option<char> {
19 pub fn char(&self) -> Option<char> {
20 match self.code {
20 match self.code {
21− KeyCode::Char(ch) => Some(ch),
21+ KeyCode::Char(ch) if self.modifiers.is_empty() => Some(ch),
22 _ => None,
22 _ => None,
23 }
23 }
24 }
24 }