@@ -254,6 +254,7 @@ impl Editor {
254254 let mode = match view.state.mode() {
255255 Mode::Insert => "INS",
256256 Mode::Normal => "NOR",
257+ Mode::Goto => "GOTO",
257258 };
258259 self.surface.set_style(
259260 Rect::new(0, self.size.1 - 1, self.size.0, 1),
@@ -278,6 +279,7 @@ impl Editor {
278279 match view.state.mode() {
279280 Mode::Insert => write!(stdout, "\x1B[6 q"),
280281 Mode::Normal => write!(stdout, "\x1B[2 q"),
282+ Mode::Goto => write!(stdout, "\x1B[2 q"),
281283 };
282284
283285 // render the cursor
@@ -326,6 +328,7 @@ impl Editor {
326328 }))) => {
327329 break;
328330 }
331+
329332 Some(Ok(Event::Key(event))) => {
330333 if let Some(view) = &mut self.view {
331334 match view.state.mode() {
@@ -356,6 +359,19 @@ impl Editor {
356359 // TODO: simplistic ensure cursor in view for now
357360 view.ensure_cursor_in_view();
358361
362+ self.render();
363+ }
364+ }
365+ Mode::Goto => {
366+ // TODO: handle modes and sequences (`gg`)
367+ let keys = vec![event];
368+ if let Some(command) = keymap[&Mode::Goto].get(&keys) {
369+ // TODO: handle count other than 1
370+ command(view, 1);
371+
372+ // TODO: simplistic ensure cursor in view for now
373+ view.ensure_cursor_in_view();
374+
359375 self.render();
360376 }
361377 }