aboutsummaryrefslogtreecommitdiff
path: root/helix-view/src/keymap.rs
diff options
context:
space:
mode:
authorBlaž Hrastnik2020-12-10 09:13:42 +0000
committerBlaž Hrastnik2020-12-10 09:13:42 +0000
commit5103dc96173afaa1c0793db56f60ec1fef1e0fc3 (patch)
treeeda1e63fa536b589974c5bc7c7aff12fdac8c4f2 /helix-view/src/keymap.rs
parentbe3c02104600e5bba8e3af7bc9787e62cba30183 (diff)
move commands and keymap back to terminal.
Command needs to be able to deal with UI. We'll separate it again later on.
Diffstat (limited to 'helix-view/src/keymap.rs')
-rw-r--r--helix-view/src/keymap.rs217
1 files changed, 0 insertions, 217 deletions
diff --git a/helix-view/src/keymap.rs b/helix-view/src/keymap.rs
deleted file mode 100644
index c815911e..00000000
--- a/helix-view/src/keymap.rs
+++ /dev/null
@@ -1,217 +0,0 @@
-use crate::commands::{self, Command};
-use crate::document::Mode;
-use helix_core::hashmap;
-use std::collections::HashMap;
-
-// Kakoune-inspired:
-// mode = {
-// normal = {
-// q = record_macro
-// w = (next) word
-// W = next WORD
-// e = end of word
-// E = end of WORD
-// r =
-// t = 'till char
-// y = yank
-// u = undo
-// U = redo
-// i = insert
-// I = INSERT (start of line)
-// o = open below (insert on new line below)
-// O = open above (insert on new line above)
-// p = paste (before cursor)
-// P = PASTE (after cursor)
-// ` =
-// [ = select to text object start (alt = select whole object)
-// ] = select to text object end
-// { = extend to inner object start
-// } = extend to inner object end
-// a = append
-// A = APPEND (end of line)
-// s = split
-// S = select
-// d = delete()
-// f = find_char()
-// g = goto (gg, G, gc, gd, etc)
-//
-// h = move_char_left(n)
-// j = move_line_down(n)
-// k = move_line_up(n)
-// l = move_char_right(n)
-// : = command line
-// ; = collapse selection to cursor
-// " = use register
-// ` = convert case? (to lower) (alt = swap case)
-// ~ = convert to upper case
-// . = repeat last command
-// \ = disable hook?
-// / = search
-// > = indent
-// < = deindent
-// % = select whole buffer (in vim = jump to matching bracket)
-// * = search pattern in selection
-// ( = rotate main selection backward
-// ) = rotate main selection forward
-// - = trim selections? (alt = merge contiguous sel together)
-// @ = convert tabs to spaces
-// & = align cursor
-// ? = extend to next given regex match (alt = to prev)
-//
-// in kakoune these are alt-h alt-l / gh gl
-// select from curs to begin end / move curs to begin end
-// 0 = start of line
-// ^ = start of line (first non blank char)
-// $ = end of line
-//
-// z = save selections
-// Z = restore selections
-// x = select line
-// X = extend line
-// c = change selected text
-// C = copy selection?
-// v = view menu (viewport manipulation)
-// b = select to previous word start
-// B = select to previous WORD start
-//
-//
-//
-//
-//
-//
-// = = align?
-// + =
-// }
-//
-// gd = goto definition
-// gr = goto reference
-// }
-
-#[cfg(feature = "term")]
-pub use crossterm::event::{KeyCode, KeyEvent as Key, KeyModifiers as Modifiers};
-
-// TODO: could be trie based
-pub type Keymap = HashMap<Vec<Key>, Command>;
-pub type Keymaps = HashMap<Mode, Keymap>;
-
-macro_rules! key {
- ($ch:expr) => {
- Key {
- code: KeyCode::Char($ch),
- modifiers: Modifiers::NONE,
- }
- };
-}
-
-macro_rules! shift {
- ($ch:expr) => {
- Key {
- code: KeyCode::Char($ch),
- modifiers: Modifiers::SHIFT,
- }
- };
-}
-
-macro_rules! ctrl {
- ($ch:expr) => {
- Key {
- code: KeyCode::Char($ch),
- modifiers: Modifiers::CONTROL,
- }
- };
-}
-
-// macro_rules! alt {
-// ($ch:expr) => {
-// Key {
-// code: KeyCode::Char($ch),
-// modifiers: Modifiers::ALT,
-// }
-// };
-// }
-
-pub fn default() -> Keymaps {
- hashmap!(
- Mode::Normal =>
- // as long as you cast the first item, rust is able to infer the other cases
- hashmap!(
- vec![key!('h')] => commands::move_char_left as Command,
- vec![key!('j')] => commands::move_line_down,
- vec![key!('k')] => commands::move_line_up,
- vec![key!('0')] => commands::move_line_start,
- vec![key!('$')] => commands::move_line_end,
- vec![key!('l')] => commands::move_char_right,
- vec![shift!('H')] => commands::extend_char_left,
- vec![shift!('J')] => commands::extend_line_down,
- vec![shift!('K')] => commands::extend_line_up,
- vec![shift!('L')] => commands::extend_char_right,
- vec![key!('w')] => commands::move_next_word_start,
- vec![key!('b')] => commands::move_prev_word_start,
- vec![key!('e')] => commands::move_next_word_end,
- vec![key!('g')] => commands::goto_mode,
- vec![key!('i')] => commands::insert_mode,
- vec![shift!('I')] => commands::prepend_to_line,
- vec![key!('a')] => commands::append_mode,
- vec![shift!('A')] => commands::append_to_line,
- vec![key!('o')] => commands::open_below,
- vec![key!('d')] => commands::delete_selection,
- vec![key!('c')] => commands::change_selection,
- vec![key!('s')] => commands::split_selection_on_newline,
- vec![key!(';')] => commands::collapse_selection,
- // TODO should be alt(;)
- vec![key!('%')] => commands::flip_selections,
- vec![key!('x')] => commands::select_line,
- vec![key!('u')] => commands::undo,
- vec![shift!('U')] => commands::redo,
- vec![key!('y')] => commands::yank,
- vec![key!('p')] => commands::paste,
- vec![key!('>')] => commands::indent,
- vec![key!('<')] => commands::unindent,
- vec![key!(':')] => commands::command_mode,
- vec![Key {
- code: KeyCode::Esc,
- modifiers: Modifiers::NONE
- }] => commands::normal_mode,
- vec![Key {
- code: KeyCode::PageUp,
- modifiers: Modifiers::NONE
- }] => commands::page_up,
- vec![Key {
- code: KeyCode::PageDown,
- modifiers: Modifiers::NONE
- }] => commands::page_down,
- vec![ctrl!('u')] => commands::half_page_up,
- vec![ctrl!('d')] => commands::half_page_down,
- ),
- Mode::Insert => hashmap!(
- vec![Key {
- code: KeyCode::Esc,
- modifiers: Modifiers::NONE
- }] => commands::normal_mode as Command,
- vec![Key {
- code: KeyCode::Backspace,
- modifiers: Modifiers::NONE
- }] => commands::insert::delete_char_backward,
- vec![Key {
- code: KeyCode::Delete,
- modifiers: Modifiers::NONE
- }] => commands::insert::delete_char_forward,
- vec![Key {
- code: KeyCode::Enter,
- modifiers: Modifiers::NONE
- }] => commands::insert::insert_newline,
- vec![Key {
- code: KeyCode::Tab,
- modifiers: Modifiers::NONE
- }] => commands::insert::insert_tab,
- ),
- Mode::Goto => hashmap!(
- vec![Key {
- code: KeyCode::Esc,
- modifiers: Modifiers::NONE
- }] => commands::normal_mode as Command,
- vec![key!('g')] => commands::move_file_start as Command,
- vec![key!('e')] => commands::move_file_end as Command,
- ),
- )
-}