@@ -90,98 +90,54 @@ pub use crossterm::event::{KeyCode, KeyEvent as Key, KeyModifiers as Modifiers};
90type Keymap = HashMap<Vec<Key>, Command>;
90type Keymap = HashMap<Vec<Key>, Command>;
91type Keymaps = HashMap<state::Mode, Keymap>;
91type Keymaps = HashMap<state::Mode, Keymap>;
96+ code: KeyCode::Char($ch),
97+ modifiers: Modifiers::NONE,
105+ code: KeyCode::Char($ch),
106+ modifiers: Modifiers::SHIFT,
93pub fn default() -> Keymaps {
111pub fn default() -> Keymaps {
94 hashmap!(
112 hashmap!(
95 state::Mode::Normal =>
113 state::Mode::Normal =>
114+ // as long as you cast the first item, rust is able to infer the other cases
96 hashmap!(
115 hashmap!(
98− code: KeyCode::Char('h'),
99− modifiers: Modifiers::NONE
100− }] => commands::move_char_left as Command,
116+ vec![key!('h')] => commands::move_char_left as Command,
102− code: KeyCode::Char('j'),
103− modifiers: Modifiers::NONE
104− }] => commands::move_line_down as Command,
117+ vec![key!('j')] => commands::move_line_down,
106− code: KeyCode::Char('k'),
107− modifiers: Modifiers::NONE
108− }] => commands::move_line_up as Command,
118+ vec![key!('k')] => commands::move_line_up,
110− code: KeyCode::Char('0'),
111− modifiers: Modifiers::NONE
112− }] => commands::move_line_start as Command,
119+ vec![key!('0')] => commands::move_line_start,
114− code: KeyCode::Char('$'),
115− modifiers: Modifiers::NONE
116− }] => commands::move_line_end as Command,
120+ vec![key!('$')] => commands::move_line_end,
118− code: KeyCode::Char('l'),
119− modifiers: Modifiers::NONE
120− }] => commands::move_char_right as Command,
121+ vec![key!('l')] => commands::move_char_right,
122− code: KeyCode::Char('H'),
123− modifiers: Modifiers::SHIFT
124− }] => commands::extend_char_left as Command,
122+ vec![shift!('H')] => commands::extend_char_left,
126− code: KeyCode::Char('J'),
127− modifiers: Modifiers::SHIFT
128− }] => commands::extend_line_down as Command,
123+ vec![shift!('J')] => commands::extend_line_down,
130− code: KeyCode::Char('K'),
131− modifiers: Modifiers::SHIFT
132− }] => commands::extend_line_up as Command,
124+ vec![shift!('K')] => commands::extend_line_up,
134− code: KeyCode::Char('L'),
135− modifiers: Modifiers::SHIFT
136− }] => commands::extend_char_right as Command,
125+ vec![shift!('L')] => commands::extend_char_right,
138− code: KeyCode::Char('w'),
139− modifiers: Modifiers::NONE
140− }] => commands::move_next_word_start as Command,
126+ vec![key!('w')] => commands::move_next_word_start,
142− code: KeyCode::Char('b'),
143− modifiers: Modifiers::NONE
144− }] => commands::move_prev_word_start as Command,
127+ vec![key!('b')] => commands::move_prev_word_start,
146− code: KeyCode::Char('e'),
147− modifiers: Modifiers::NONE
148− }] => commands::move_next_word_end as Command,
128+ vec![key!('e')] => commands::move_next_word_end,
150− code: KeyCode::Char('i'),
151− modifiers: Modifiers::NONE
152− }] => commands::insert_mode as Command,
129+ vec![key!('i')] => commands::insert_mode,
154− code: KeyCode::Char('I'),
155− modifiers: Modifiers::SHIFT,
156− }] => commands::prepend_to_line as Command,
130+ vec![shift!('I')] => commands::prepend_to_line,
158− code: KeyCode::Char('a'),
159− modifiers: Modifiers::NONE
160− }] => commands::append_mode as Command,
131+ vec![key!('a')] => commands::append_mode,
162− code: KeyCode::Char('A'),
163− modifiers: Modifiers::SHIFT,
164− }] => commands::append_to_line as Command,
132+ vec![shift!('A')] => commands::append_to_line,
166− code: KeyCode::Char('o'),
167− modifiers: Modifiers::NONE
168− }] => commands::open_below as Command,
133+ vec![key!('o')] => commands::open_below,
170− code: KeyCode::Char('d'),
171− modifiers: Modifiers::NONE
172− }] => commands::delete_selection as Command,
134+ vec![key!('d')] => commands::delete_selection,
174− code: KeyCode::Char('c'),
175− modifiers: Modifiers::NONE
176− }] => commands::change_selection as Command,
135+ vec![key!('c')] => commands::change_selection,
178− code: KeyCode::Char('s'),
179− modifiers: Modifiers::NONE
180− }] => commands::split_selection_on_newline as Command,
136+ vec![key!('s')] => commands::split_selection_on_newline,
181 vec![Key {
137 vec![Key {
182 code: KeyCode::Esc,
138 code: KeyCode::Esc,
183 modifiers: Modifiers::NONE
139 modifiers: Modifiers::NONE
184− }] => commands::normal_mode as Command,
140+ }] => commands::normal_mode,
186 state::Mode::Insert => hashmap!(
142 state::Mode::Insert => hashmap!(
187 vec![Key {
143 vec![Key {
@@ -191,15 +147,15 @@ pub fn default() -> Keymaps {
191 vec![Key {
147 vec![Key {
192 code: KeyCode::Backspace,
148 code: KeyCode::Backspace,
193 modifiers: Modifiers::NONE
149 modifiers: Modifiers::NONE
194− }] => commands::delete_char_backward as Command,
150+ }] => commands::delete_char_backward,
195 vec![Key {
151 vec![Key {
196 code: KeyCode::Delete,
152 code: KeyCode::Delete,
197 modifiers: Modifiers::NONE
153 modifiers: Modifiers::NONE
198− }] => commands::delete_char_forward as Command,
154+ }] => commands::delete_char_forward,
199 vec![Key {
155 vec![Key {
200 code: KeyCode::Enter,
156 code: KeyCode::Enter,
201 modifiers: Modifiers::NONE
157 modifiers: Modifiers::NONE
202− }] => commands::insert_newline as Command,
158+ }] => commands::insert_newline,