mirror of https://github.com/helix-editor/helix
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>pull/788/head
parent
432bec10ed
commit
a958d34bfb
|
@ -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"]` |
|
| `shell` | Shell to use when running external commands. | Unix: `["sh", "-c"]`<br/>Windows: `["cmd", "/C"]` |
|
||||||
| `line-number` | Line number display (`absolute`, `relative`) | `absolute` |
|
| `line-number` | Line number display (`absolute`, `relative`) | `absolute` |
|
||||||
| `smart-case` | Enable smart case regex searching (case insensitive unless pattern contains upper case characters) | `true` |
|
| `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
|
## LSP
|
||||||
|
|
||||||
|
|
|
@ -3371,17 +3371,20 @@ pub mod insert {
|
||||||
}
|
}
|
||||||
|
|
||||||
use helix_core::auto_pairs;
|
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) {
|
pub fn insert_char(cx: &mut Context, c: char) {
|
||||||
let (view, doc) = current!(cx.editor);
|
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 text = doc.text();
|
||||||
let selection = doc.selection(view.id).clone().cursors(text.slice(..));
|
let selection = doc.selection(view.id).clone().cursors(text.slice(..));
|
||||||
|
|
||||||
// run through insert hooks, stopping on the first one that returns Some(t)
|
// 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) {
|
if let Some(transaction) = hook(text, &selection, c) {
|
||||||
doc.apply(&transaction, view.id);
|
doc.apply(&transaction, view.id);
|
||||||
break;
|
break;
|
||||||
|
@ -3391,7 +3394,7 @@ pub mod insert {
|
||||||
// TODO: need a post insert hook too for certain triggers (autocomplete, signature help, etc)
|
// 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
|
// this could also generically look at Transaction, but it's a bit annoying to look at
|
||||||
// Operation instead of Change.
|
// Operation instead of Change.
|
||||||
for hook in POST_HOOKS {
|
for hook in &[completion, signature_help] {
|
||||||
hook(cx, c);
|
hook(cx, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,8 @@ pub struct Config {
|
||||||
pub middle_click_paste: bool,
|
pub middle_click_paste: bool,
|
||||||
/// Smart case: Case insensitive searching unless pattern contains upper case characters. Defaults to true.
|
/// Smart case: Case insensitive searching unless pattern contains upper case characters. Defaults to true.
|
||||||
pub smart_case: bool,
|
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)]
|
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
|
||||||
|
@ -67,6 +69,7 @@ impl Default for Config {
|
||||||
line_number: LineNumber::Absolute,
|
line_number: LineNumber::Absolute,
|
||||||
middle_click_paste: true,
|
middle_click_paste: true,
|
||||||
smart_case: true,
|
smart_case: true,
|
||||||
|
auto_pairs: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue