on master help sign in
moved insert keymap to keymap.rs
dd94a39Jan Hrastnik
helix-term/src/editor.rs+14−20
@@ -320,29 +320,23 @@ impl Editor {
320 if let Some(view) = &mut self.view {
320 if let Some(view) = &mut self.view {
321 match view.state.mode() {
321 match view.state.mode() {
322 Mode::Insert => {
322 Mode::Insert => {
323+ // TODO: handle modes and sequences (`gg`)
323− match event {
324+ let keys = vec![event];
324− KeyEvent {
325+ if let Some(command) = keymap[&Mode::Insert].get(&keys) {
325− code: KeyCode::Esc, ..
326+ // TODO: handle count other than 1
326− } => commands::normal_mode(view, 1),
327+ command(view, 1);
327− KeyEvent {
328+
328− code: KeyCode::Backspace,
329+ // TODO: simplistic ensure cursor in view for now
329− ..
330+ view.ensure_cursor_in_view();
330− } => commands::delete_char_backward(view, 1),
331+ } else {
331− KeyEvent {
332− code: KeyCode::Delete,
333− ..
334− } => commands::delete_char_forward(view, 1),
335− KeyEvent {
332+ if let KeyEvent {
336 code: KeyCode::Char(c),
333 code: KeyCode::Char(c),
337 ..
334 ..
338− } => commands::insert_char(view, c),
335+ } = event
339− KeyEvent {
336+ {
340− code: KeyCode::Enter,
341− ..
342− } => commands::insert_char(view, '\n'),
337+ commands::insert_char(view, c);
343− _ => (), // skip
338+ }
344 }
339 }
345− // TODO: simplistic ensure cursor in view for now
346 view.ensure_cursor_in_view();
340 view.ensure_cursor_in_view();
347
341
348 self.render();
342 self.render();
helix-view/Cargo.toml+1
@@ -8,6 +8,7 @@ edition = "2018"
8
8
9[features]
9[features]
10term = ["tui", "crossterm"]
10term = ["tui", "crossterm"]
11+default = ["term"]
11
12
12[dependencies]
13[dependencies]
13anyhow = "1"
14anyhow = "1"
helix-view/src/commands.rs+4
@@ -280,6 +280,10 @@ pub fn insert_char(view: &mut View, c: char) {
280 // TODO: need to store into history if successful
280 // TODO: need to store into history if successful
281}
281}
282
282
283+pub fn insert_newline(view: &mut View, _count: usize) {
284+ insert_char(view, '\n');
285+}
286+
283// TODO: handle indent-aware delete
287// TODO: handle indent-aware delete
284pub fn delete_char_backward(view: &mut View, count: usize) {
288pub fn delete_char_backward(view: &mut View, count: usize) {
285 let text = &view.state.doc.slice(..);
289 let text = &view.state.doc.slice(..);
helix-view/src/keymap.rs+18
@@ -182,6 +182,24 @@ pub fn default() -> Keymaps {
182 code: KeyCode::Esc,
182 code: KeyCode::Esc,
183 modifiers: Modifiers::NONE
183 modifiers: Modifiers::NONE
184 }] => commands::normal_mode as Command,
184 }] => commands::normal_mode as Command,
185+ ),
186+ state::Mode::Insert => hashmap!(
187+ vec![Key {
188+ code: KeyCode::Esc,
189+ modifiers: Modifiers::NONE
190+ }] => commands::normal_mode as Command,
191+ vec![Key {
192+ code: KeyCode::Backspace,
193+ modifiers: Modifiers::NONE
194+ }] => commands::delete_char_backward as Command,
195+ vec![Key {
196+ code: KeyCode::Delete,
197+ modifiers: Modifiers::NONE
198+ }] => commands::delete_char_forward as Command,
199+ vec![Key {
200+ code: KeyCode::Enter,
201+ modifiers: Modifiers::NONE
202+ }] => commands::insert_newline as Command,
185 )
203 )
186 )
204 )
187}
205}