Skip to content

Commit

Permalink
Add support for Unicode input
Browse files Browse the repository at this point in the history
  • Loading branch information
Lindenk authored and omentic committed May 1, 2024
1 parent dd5df01 commit eaf706d
Show file tree
Hide file tree
Showing 7 changed files with 506 additions and 0 deletions.
13 changes: 13 additions & 0 deletions book/src/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -412,3 +412,16 @@ Sets explorer side width and style.
| -------------- | ------------------------------------------- | ------- |
| `column-width` | explorer side width | 30 |
| `position` | explorer widget position, `left` or `right` | `left` |


### `[editor.digraphs]` Section

By default, special characters can be input using the `insert_digraphs` command, bound to `\` in normal mode.
Custom digraphs can be added to the `editor.digraphs` section of the config.

```toml
[editor.digraphs]
ka = ""
ku = { symbols = "", description = "The japanese character Ku" }
shrug = "¯\\_(ツ)_/¯"
```
1 change: 1 addition & 0 deletions book/src/keymap.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ Normal mode is the default mode when you launch helix. You can return to it from
| `a` | Insert after selection (append) | `append_mode` |
| `I` | Insert at the start of the line | `insert_at_line_start` |
| `A` | Insert at the end of the line | `insert_at_line_end` |
| `\` | Insert digraphs | `insert_digraph` |
| `o` | Open new line below selection | `open_below` |
| `O` | Open new line above selection | `open_above` |
| `.` | Repeat last insert | N/A |
Expand Down
48 changes: 48 additions & 0 deletions helix-term/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,7 @@ impl MappableCommand {
extend_to_word, "Extend to a two-character label",
open_or_focus_explorer, "Open or focus explorer",
reveal_current_file, "Reveal current file in explorer",
insert_digraph, "Insert Unicode characters with prompt",
);
}

Expand Down Expand Up @@ -6268,3 +6269,50 @@ fn jump_to_word(cx: &mut Context, behaviour: Movement) {
}
jump_to_label(cx, words, behaviour)
}

fn insert_digraph(cx: &mut Context) {
ui::prompt(
cx,
"digraph:".into(),
Some('K'), // todo: decide on register to use
move |editor, input| {
editor
.config()
.digraphs
.search(input)
.take(10)
.map(|entry| {
// todo: Prompt does not currently allow additional text as part
// of it's suggestions. Show the user the symbol and description
// once prompt has been made more robust
#[allow(clippy::useless_format)]
((0..), Cow::from(format!("{}", entry.sequence)))
})
.collect()
},
move |cx, input, event| {
match event {
PromptEvent::Validate => (),
_ => return,
}
let config = cx.editor.config();
let symbols = if let Some(entry) = config.digraphs.get(input) {
&entry.symbols
} else {
cx.editor.set_error("Digraph not found");
return;
};

let (view, doc) = current!(cx.editor);
let selection = doc.selection(view.id);
let mut changes = Vec::with_capacity(selection.len());

for range in selection.ranges() {
changes.push((range.from(), range.from(), Some(symbols.clone().into())));
}
let trans = Transaction::change(doc.text(), changes.into_iter());
doc.apply(&trans, view.id);
doc.append_changes_to_history(view);
},
)
}
2 changes: 2 additions & 0 deletions helix-term/src/keymap/default.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@ pub fn default() -> HashMap<Mode, KeyTrie> {
"N" => search_prev,
"*" => search_selection,

"\\" => insert_digraph,

"u" => undo,
"U" => redo,
"A-u" => earlier,
Expand Down
Loading

0 comments on commit eaf706d

Please sign in to comment.