From b2648723dee6c8139c9d30668650e79a2d896c16 Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Fri, 13 Jan 2012 17:38:33 -0800 Subject: [PATCH] dd deletes an entire line --- spec/atom/vim-mode-spec.coffee | 13 +++++++++++++ src/atom/editor.coffee | 3 +++ src/atom/vim-mode-operators.coffee | 8 ++++++++ src/atom/vim-mode.coffee | 9 +++++++++ 4 files changed, 33 insertions(+) diff --git a/spec/atom/vim-mode-spec.coffee b/spec/atom/vim-mode-spec.coffee index 456b9969d..1010a9da6 100644 --- a/spec/atom/vim-mode-spec.coffee +++ b/spec/atom/vim-mode-spec.coffee @@ -45,6 +45,19 @@ describe "VimMode", -> expect(editor.buffer.getText()).toBe '1345' expect(editor.getCursor()).toEqual(column: 1, row: 0) + describe "the d keybinding", -> + it "deletes the line the cursor is on when 'd' is pressed again", -> + editor.buffer.setText("12345\nabcde\nABCDE") + editor.setCursor(column: 1, row: 1) + spyOn(editor, 'deleteLine').andCallThrough() + + editor.trigger keydownEvent('d') + editor.trigger keydownEvent('d') + + expect(editor.deleteLine).toHaveBeenCalled() + expect(editor.buffer.getText()).toBe "12345\nABCDE" + expect(editor.getCursor()).toEqual(column: 0, row: 1) + describe "basic motion bindings", -> beforeEach -> editor.buffer.setText("12345\nabcde\nABCDE") diff --git a/src/atom/editor.coffee b/src/atom/editor.coffee index 0e300e146..9ddacc090 100644 --- a/src/atom/editor.coffee +++ b/src/atom/editor.coffee @@ -64,6 +64,9 @@ class Editor extends Template deleteChar: -> @aceEditor.remove 'right' + deleteLine: -> + @aceEditor.removeLines() + moveLeft: -> @aceEditor.navigateLeft() diff --git a/src/atom/vim-mode-operators.coffee b/src/atom/vim-mode-operators.coffee index bc291dfc6..386f9b762 100644 --- a/src/atom/vim-mode-operators.coffee +++ b/src/atom/vim-mode-operators.coffee @@ -20,6 +20,14 @@ module.exports = execute: (editor) -> _.times @count, => @operatorToRepeat.execute(editor) + Delete: class + complete: null + + execute: (editor) -> + editor.deleteLine() + + isComplete: -> @complete + DeleteChar: class execute: (editor) -> editor.deleteChar() diff --git a/src/atom/vim-mode.coffee b/src/atom/vim-mode.coffee index 49756c349..cfb37b045 100644 --- a/src/atom/vim-mode.coffee +++ b/src/atom/vim-mode.coffee @@ -25,12 +25,14 @@ class VimMode @bindCommandModeKeys 'i': 'insert' + 'd': 'delete' 'x': 'delete-char' 'h': 'move-left' 'j': 'move-up' @handleCommands 'insert': => @activateInsertMode() + 'delete': => @delete() 'delete-char': => new op.DeleteChar 'move-left': => new op.MoveLeft 'move-up': => new op.MoveUp @@ -65,6 +67,13 @@ class VimMode else @pushOperator(new op.NumericPrefix(num)) + delete: () -> + if @topOperator() instanceof op.Delete + @topOperator().complete = true + @processOpStack() + else + @pushOperator new op.Delete() + pushOperator: (op) -> @opStack.push(op) @processOpStack()