From ca2b7c9fd1255689492c635570f90f2d8448c257 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Fri, 13 Jan 2012 10:57:08 -0800 Subject: [PATCH] Add MoveUp command to VimMode --- spec/atom/vim-mode-spec.coffee | 21 +++++++++++++++------ src/atom/editor.coffee | 3 +++ src/atom/vim-mode-operators.coffee | 8 ++++++++ src/atom/vim-mode.coffee | 17 ++++++++--------- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/spec/atom/vim-mode-spec.coffee b/spec/atom/vim-mode-spec.coffee index 5026ebd1a..0c63759ce 100644 --- a/spec/atom/vim-mode-spec.coffee +++ b/spec/atom/vim-mode-spec.coffee @@ -39,15 +39,24 @@ describe "VimMode", -> expect(editor.buffer.getText()).toBe '1345' expect(editor.getCursor()).toEqual(column: 1, row: 0) - describe "the h/j/k/l keybindings", -> - it "move the cursor left/up/down/right", -> + describe "basic motion bindings", -> + beforeEach -> editor.buffer.setText("12345\nabcde\nABCDE") editor.setCursor(column: 1, row: 1) - editor.trigger keydownEvent('h') - expect(editor.getCursor()).toEqual(column: 0, row: 1) - editor.trigger keydownEvent('h') - expect(editor.getCursor()).toEqual(column: 0, row: 1) + describe "the h keybinding", -> + it "move the cursor left", -> + editor.trigger keydownEvent('h') + expect(editor.getCursor()).toEqual(column: 0, row: 1) + editor.trigger keydownEvent('h') + expect(editor.getCursor()).toEqual(column: 0, row: 1) + + describe "the j keybinding", -> + it "move the cursor up", -> + editor.trigger keydownEvent('j') + expect(editor.getCursor()).toEqual(column: 1, row: 0) + editor.trigger keydownEvent('j') + expect(editor.getCursor()).toEqual(column: 1, row: 0) describe "numeric prefix binding", -> it "repeats the following operation N times", -> diff --git a/src/atom/editor.coffee b/src/atom/editor.coffee index 8a1aa35e4..0e300e146 100644 --- a/src/atom/editor.coffee +++ b/src/atom/editor.coffee @@ -66,3 +66,6 @@ class Editor extends Template moveLeft: -> @aceEditor.navigateLeft() + + moveUp: -> + @aceEditor.navigateUp() diff --git a/src/atom/vim-mode-operators.coffee b/src/atom/vim-mode-operators.coffee index 98f1fe84f..63d335d2a 100644 --- a/src/atom/vim-mode-operators.coffee +++ b/src/atom/vim-mode-operators.coffee @@ -29,3 +29,11 @@ module.exports = editor.moveLeft() if column > 0 isComplete: -> true + + MoveUp: class + execute: (editor) -> + {column, row} = editor.getCursor() + editor.moveUp() if row > 0 + + isComplete: -> true + diff --git a/src/atom/vim-mode.coffee b/src/atom/vim-mode.coffee index 283d00c08..54a97f456 100644 --- a/src/atom/vim-mode.coffee +++ b/src/atom/vim-mode.coffee @@ -1,6 +1,6 @@ _ = require 'underscore' $ = require 'jquery' -{ NumericPrefix, DeleteChar, MoveLeft } = require 'vim-mode-operators' +{ NumericPrefix, DeleteChar, MoveLeft, MoveUp} = require 'vim-mode-operators' module.exports = class VimMode @@ -17,9 +17,13 @@ class VimMode @editor.on 'insert-mode:activate', => @activateInsertMode() @editor.on 'command-mode:activate', => @activateCommandMode() - @editor.on 'command-mode:delete-char', => @deleteChar() - @editor.on 'command-mode:numeric-prefix', (e) => @numericPrefix(e) + @editor.on 'command-mode:delete-char', => @pushOperator(new DeleteChar) + @editor.on 'command-mode:numeric-prefix', (e) => @pushOperator(new NumericPrefix(e.keyEvent.char)) @editor.on 'command-mode:move-left', => @pushOperator(new MoveLeft) + @editor.on 'command-mode:move-up', => @pushOperator(new MoveUp) + + registerCommand: (name, handler) -> + @editor.on "command-mode:#{name}", handler activateInsertMode: -> @editor.removeClass('command-mode') @@ -29,17 +33,12 @@ class VimMode @editor.removeClass('insert-mode') @editor.addClass('command-mode') - deleteChar: -> - @pushOperator(new DeleteChar) - - numericPrefix: (e) -> - @pushOperator(new NumericPrefix(e.keyEvent.char)) - commandModeBindings: -> bindings = 'i': 'insert-mode:activate' 'x': 'command-mode:delete-char' 'h': 'command-mode:move-left' + 'j': 'command-mode:move-up' for i in [0..9] bindings[i] = 'command-mode:numeric-prefix' bindings