forked from Mirrors/helix
Add a keymap module.
parent
e98cdebf1e
commit
843c20a550
@ -0,0 +1,116 @@
|
||||
use crossterm::event::{KeyEvent as Key, KeyModifiers as Modifiers};
|
||||
use helix_core::commands::{self, Command};
|
||||
use std::collections::HashMap;
|
||||
|
||||
// Kakoune-inspired:
|
||||
// mode = {
|
||||
// normal = {
|
||||
// q = record_macro
|
||||
// w = (next) 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)
|
||||
//
|
||||
// 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?
|
||||
// + =
|
||||
// }
|
||||
// }
|
||||
|
||||
macro_rules! hashmap {
|
||||
(@single $($x:tt)*) => (());
|
||||
(@count $($rest:expr),*) => (<[()]>::len(&[$(hashmap!(@single $rest)),*]));
|
||||
|
||||
($($key:expr => $value:expr,)+) => { hashmap!($($key => $value),+) };
|
||||
($($key:expr => $value:expr),*) => {
|
||||
{
|
||||
let _cap = hashmap!(@count $($key),*);
|
||||
let mut _map = ::std::collections::HashMap::with_capacity(_cap);
|
||||
$(
|
||||
let _ = _map.insert($key, $value);
|
||||
)*
|
||||
_map
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
type Keymap = HashMap<Key, Command>;
|
||||
|
||||
fn default() -> Keymap {
|
||||
hashmap!(
|
||||
Key {
|
||||
code: "h",
|
||||
modifiers: Modifiers::NONE
|
||||
} => commands::move_char_left,
|
||||
Key {
|
||||
code: "j",
|
||||
modifiers: Modifiers::NONE
|
||||
} => commands::move_line_down,
|
||||
Key {
|
||||
code: "k",
|
||||
modifiers: Modifiers::NONE
|
||||
} => commands::move_line_up,
|
||||
Key {
|
||||
code: "l",
|
||||
modifiers: Modifiers::NONE
|
||||
} => commands::move_char_right,
|
||||
);
|
||||
}
|
Loading…
Reference in New Issue