aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlurpahi2021-09-24 01:28:44 +0000
committerGitHub2021-09-24 01:28:44 +0000
commita958d34bfbcf45c01ce0d9c0d76e681fb863fc6a (patch)
tree7993d194fafd1d32806538fe34292b6ae37429b8
parent432bec10eddb3f51f3a6e32aedbfd566d74cde75 (diff)
Add option for automatic insertion of closing-parens/brackets/etc (#779)
* Add auto-pair editor option * Document auto-pair editor option * Make cargo fmt happy * Actually make cargo fmt happy * Rename auto-pair option to auto-pairs * Inline a few constants Co-authored-by: miaomai <cunso@tutanota.com>
-rw-r--r--book/src/configuration.md1
-rw-r--r--helix-term/src/commands.rs11
-rw-r--r--helix-view/src/editor.rs3
3 files changed, 11 insertions, 4 deletions
diff --git a/book/src/configuration.md b/book/src/configuration.md
index 90cdd8a7..60b12bfd 100644
--- a/book/src/configuration.md
+++ b/book/src/configuration.md
@@ -18,6 +18,7 @@ To override global configuration parameters, create a `config.toml` file located
| `shell` | Shell to use when running external commands. | Unix: `["sh", "-c"]`<br/>Windows: `["cmd", "/C"]` |
| `line-number` | Line number display (`absolute`, `relative`) | `absolute` |
| `smart-case` | Enable smart case regex searching (case insensitive unless pattern contains upper case characters) | `true` |
+| `auto-pairs` | Enable automatic insertion of pairs to parenthese, brackets, etc. | `true` |
## LSP
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index ac93b5d0..117ba046 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -3371,17 +3371,20 @@ pub mod insert {
}
use helix_core::auto_pairs;
- const HOOKS: &[Hook] = &[auto_pairs::hook, insert];
- const POST_HOOKS: &[PostHook] = &[completion, signature_help];
pub fn insert_char(cx: &mut Context, c: char) {
let (view, doc) = current!(cx.editor);
+ let hooks: &[Hook] = match cx.editor.config.auto_pairs {
+ true => &[auto_pairs::hook, insert],
+ false => &[insert],
+ };
+
let text = doc.text();
let selection = doc.selection(view.id).clone().cursors(text.slice(..));
// run through insert hooks, stopping on the first one that returns Some(t)
- for hook in HOOKS {
+ for hook in hooks {
if let Some(transaction) = hook(text, &selection, c) {
doc.apply(&transaction, view.id);
break;
@@ -3391,7 +3394,7 @@ pub mod insert {
// TODO: need a post insert hook too for certain triggers (autocomplete, signature help, etc)
// this could also generically look at Transaction, but it's a bit annoying to look at
// Operation instead of Change.
- for hook in POST_HOOKS {
+ for hook in &[completion, signature_help] {
hook(cx, c);
}
}
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index b7df4a9b..b08a2df2 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -41,6 +41,8 @@ pub struct Config {
pub middle_click_paste: bool,
/// Smart case: Case insensitive searching unless pattern contains upper case characters. Defaults to true.
pub smart_case: bool,
+ /// Automatic insertion of pairs to parentheses, brackets, etc. Defaults to true.
+ pub auto_pairs: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
@@ -67,6 +69,7 @@ impl Default for Config {
line_number: LineNumber::Absolute,
middle_click_paste: true,
smart_case: true,
+ auto_pairs: true,
}
}
}