summaryrefslogtreecommitdiff
path: root/helix-term/src
diff options
context:
space:
mode:
authorGokul Soumya2022-02-28 08:56:39 +0000
committerGitHub2022-02-28 08:56:39 +0000
commitc15996aff597aa8cb63850c6080bc69470bb84a5 (patch)
treedde5ce75faae3987edf6f76f69a921a2e5e2373a /helix-term/src
parentf9ad1cafdc4d91fe4378e4213a1b18389f0bd33b (diff)
Show surround delete and replace errors in editor (#1709)
* Refactor surround commands to use early returns * Show surround delete and replace errors in editor
Diffstat (limited to 'helix-term/src')
-rw-r--r--helix-term/src/commands.rs122
1 files changed, 68 insertions, 54 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 3839cbe6..9210d6ca 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -5407,76 +5407,90 @@ fn select_textobject(cx: &mut Context, objtype: textobject::TextObject) {
fn surround_add(cx: &mut Context) {
cx.on_next_key(move |cx, event| {
- if let Some(ch) = event.char() {
- let (view, doc) = current!(cx.editor);
- let selection = doc.selection(view.id);
- let (open, close) = surround::get_pair(ch);
-
- let mut changes = Vec::with_capacity(selection.len() * 2);
- for range in selection.iter() {
- let mut o = Tendril::new();
- o.push(open);
- let mut c = Tendril::new();
- c.push(close);
- changes.push((range.from(), range.from(), Some(o)));
- changes.push((range.to(), range.to(), Some(c)));
- }
-
- let transaction = Transaction::change(doc.text(), changes.into_iter());
- doc.apply(&transaction, view.id);
+ let ch = match event.char() {
+ Some(ch) => ch,
+ None => return,
+ };
+ let (view, doc) = current!(cx.editor);
+ let selection = doc.selection(view.id);
+ let (open, close) = surround::get_pair(ch);
+
+ let mut changes = Vec::with_capacity(selection.len() * 2);
+ for range in selection.iter() {
+ let mut o = Tendril::new();
+ o.push(open);
+ let mut c = Tendril::new();
+ c.push(close);
+ changes.push((range.from(), range.from(), Some(o)));
+ changes.push((range.to(), range.to(), Some(c)));
}
+
+ let transaction = Transaction::change(doc.text(), changes.into_iter());
+ doc.apply(&transaction, view.id);
})
}
fn surround_replace(cx: &mut Context) {
let count = cx.count();
cx.on_next_key(move |cx, event| {
- if let Some(from) = event.char() {
- cx.on_next_key(move |cx, event| {
- if let Some(to) = event.char() {
- let (view, doc) = current!(cx.editor);
- let text = doc.text().slice(..);
- let selection = doc.selection(view.id);
-
- let change_pos = match surround::get_surround_pos(text, selection, from, count)
- {
- Some(c) => c,
- None => return,
- };
+ let from = match event.char() {
+ Some(from) => from,
+ None => return,
+ };
+ let (view, doc) = current!(cx.editor);
+ let text = doc.text().slice(..);
+ let selection = doc.selection(view.id);
- let (open, close) = surround::get_pair(to);
- let transaction = Transaction::change(
- doc.text(),
- change_pos.iter().enumerate().map(|(i, &pos)| {
- let mut t = Tendril::new();
- t.push(if i % 2 == 0 { open } else { close });
- (pos, pos + 1, Some(t))
- }),
- );
- doc.apply(&transaction, view.id);
- }
- });
- }
+ let change_pos = match surround::get_surround_pos(text, selection, from, count) {
+ Ok(c) => c,
+ Err(err) => {
+ cx.editor.set_error(err.to_string());
+ return;
+ }
+ };
+
+ cx.on_next_key(move |cx, event| {
+ let (view, doc) = current!(cx.editor);
+ let to = match event.char() {
+ Some(to) => to,
+ None => return,
+ };
+ let (open, close) = surround::get_pair(to);
+ let transaction = Transaction::change(
+ doc.text(),
+ change_pos.iter().enumerate().map(|(i, &pos)| {
+ let mut t = Tendril::new();
+ t.push(if i % 2 == 0 { open } else { close });
+ (pos, pos + 1, Some(t))
+ }),
+ );
+ doc.apply(&transaction, view.id);
+ });
})
}
fn surround_delete(cx: &mut Context) {
let count = cx.count();
cx.on_next_key(move |cx, event| {
- if let Some(ch) = event.char() {
- let (view, doc) = current!(cx.editor);
- let text = doc.text().slice(..);
- let selection = doc.selection(view.id);
+ let ch = match event.char() {
+ Some(ch) => ch,
+ None => return,
+ };
+ let (view, doc) = current!(cx.editor);
+ let text = doc.text().slice(..);
+ let selection = doc.selection(view.id);
- let change_pos = match surround::get_surround_pos(text, selection, ch, count) {
- Some(c) => c,
- None => return,
- };
+ let change_pos = match surround::get_surround_pos(text, selection, ch, count) {
+ Ok(c) => c,
+ Err(err) => {
+ cx.editor.set_error(err.to_string());
+ return;
+ }
+ };
- let transaction =
- Transaction::change(doc.text(), change_pos.into_iter().map(|p| (p, p + 1, None)));
- doc.apply(&transaction, view.id);
- }
+ let transaction =
+ Transaction::change(doc.text(), change_pos.into_iter().map(|p| (p, p + 1, None)));
+ doc.apply(&transaction, view.id);
})
}