diff --git a/chrome/content/vimperator/editor.js b/chrome/content/vimperator/editor.js index 13d98b91..845b6284 100644 --- a/chrome/content/vimperator/editor.js +++ b/chrome/content/vimperator/editor.js @@ -101,13 +101,39 @@ function Editor() //{{{ return true; } + this.startNormal = function() + { + vimperator.setMode(vimperator.modes.TEXTAREA); + this.moveCaret(); + } + + this.startVisual = function() + { + vimperator.setMode(vimperator.modes.VISUAL, vimperator.modes.TEXTAREA); + } + + this.startInsert = function() + { + vimperator.setMode(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + this.moveCaret(); + } + + this.stopInsert = function() + { + vimperator.setMode(vimperator.modes.TEXTAREA); + this.moveCaret(); + } + // very rudimentary testing code this.moveCaret = function(pos) { if (!pos) pos = editor().selectionStart - 1; - editor().setSelectionRange(pos, pos+1); + if (!vimperator.hasMode(vimperator.modes.INSERT)) + editor().setSelectionRange(pos, pos+1); + else if (!vimperator.hasMode(vimperator.modes.VISUAL)) + editor().setSelectionRange(pos, pos); } // cmd = y, d, c diff --git a/chrome/content/vimperator/events.js b/chrome/content/vimperator/events.js index 5dd0c423..19dd2f9a 100644 --- a/chrome/content/vimperator/events.js +++ b/chrome/content/vimperator/events.js @@ -397,9 +397,9 @@ function Events() //{{{ else if (elem && elem instanceof HTMLTextAreaElement) { if (elem.selectionEnd - elem.selectionStart > 0) - vimperator.setMode(vimperator.modes.VISUAL, vimperator.modes.TEXTAREA); + vimperator.editor.startVisual(); else - vimperator.setMode(vimperator.modes.TEXTAREA); + vimperator.editor.startNormal(); vimperator.buffer.lastInputField = elem; } else @@ -436,7 +436,7 @@ function Events() //{{{ else if (vimperator.hasMode(vimperator.modes.INSERT)) { if(vimperator.hasMode(vimperator.modes.TEXTAREA)) - vimperator.setMode(vimperator.modes.TEXTAREA); + vimperator.editor.stopInsert(); else { vimperator.editor.unselectText(); diff --git a/chrome/content/vimperator/mappings.js b/chrome/content/vimperator/mappings.js index beb484c3..9904ce8d 100644 --- a/chrome/content/vimperator/mappings.js +++ b/chrome/content/vimperator/mappings.js @@ -1611,14 +1611,14 @@ function Mappings() //{{{ // {{{ addDefaultMap(new Map([vimperator.modes.TEXTAREA], ["i"], - function(count) { vimperator.setMode(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); }, + function(count) { vimperator.editor.startInsert(); }, { } )); addDefaultMap(new Map([vimperator.modes.TEXTAREA], ["a"], function(count) { vimperator.editor.executeCommand("cmd_charNext", 1); - vimperator.setMode(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + vimperator.editor.startInsert(); }, { } )); @@ -1626,7 +1626,7 @@ function Mappings() //{{{ function(count) { vimperator.editor.executeCommand("cmd_beginLine", 1); - vimperator.setMode(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + vimperator.editor.startInsert(); }, { } )); @@ -1634,7 +1634,7 @@ function Mappings() //{{{ function(count) { vimperator.editor.executeCommand("cmd_endLine", 1); - vimperator.setMode(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + vimperator.editor.startInsert(); }, { } )); @@ -1642,7 +1642,7 @@ function Mappings() //{{{ function(count) { vimperator.editor.executeCommand("cmd_deleteCharForward", 1); - vimperator.setMode(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + vimperator.editor.startInsert(); }, { } )); @@ -1651,7 +1651,7 @@ function Mappings() //{{{ { vimperator.editor.executeCommand("cmd_deleteToEndOfLine", 1); vimperator.editor.executeCommand("cmd_deleteToBeginningOfLine", 1); - vimperator.setMode(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + vimperator.editor.startInsert(); }, { } )); @@ -1659,7 +1659,7 @@ function Mappings() //{{{ function(count) { vimperator.editor.executeCommand("cmd_deleteToEndOfLine", 1); - vimperator.setMode(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + vimperator.editor.startInsert(); }, { } ));