diff --git a/content/buffer.js b/content/buffer.js index 830601a3..99ccf36d 100644 --- a/content/buffer.js +++ b/content/buffer.js @@ -335,7 +335,7 @@ vimperator.Buffer = function () //{{{ function () { vimperator.tabs.reload(getBrowser().mCurrentTab, true); }); // yanking - vimperator.options.add(modes, ["Y"], + vimperator.mappings.add(modes, ["Y"], "Copy selected text", function () { @@ -407,6 +407,8 @@ vimperator.Buffer = function () //{{{ "Print file information", function (count) { vimperator.buffer.showPageInfo(true); }); + + /////////////////////////////////////////////////////////////////////////////}}} ////////////////////// COMMANDS //////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////{{{ diff --git a/content/editor.js b/content/editor.js index e2a19c4f..e14c6b3f 100644 --- a/content/editor.js +++ b/content/editor.js @@ -54,17 +54,351 @@ vimperator.Editor = function () //{{{ return ed.controllers.getControllerForCommand("cmd_beginLine"); } + function selectPreviousLine() + { + vimperator.editor.executeCommand("cmd_selectLinePrevious"); + if ((vimperator.modes.extended & vimperator.modes.LINE) && !vimperator.editor.selectedText()) + vimperator.editor.executeCommand("cmd_selectLinePrevious"); + } + function selectNextLine() + { + vimperator.editor.executeCommand("cmd_selectLineNext"); + if ((vimperator.modes.extended & vimperator.modes.LINE) && !vimperator.editor.selectedText()) + vimperator.editor.executeCommand("cmd_selectLineNext"); + } + + // add mappings for commands like h,j,k,l,etc. in CARET, VISUAL and TEXTAREA mode + function addMovementMap(keys, hasCount, caretModeMethod, caretModeArg, textareaCommand, visualTextareaCommand) + { + var extraInfo = {}; + if (hasCount) + extraInfo.flags = vimperator.Mappings.flags.COUNT; + + vimperator.mappings.add([vimperator.modes.CARET], keys, "", + function (count) + { + if (typeof count != "number" || count < 1) + count = 1; + + var controller = getBrowser().docShell + .QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsISelectionDisplay) + .QueryInterface(Components.interfaces.nsISelectionController); + + while (count--) + controller[caretModeMethod](caretModeArg, false); + }, + extraInfo); + + vimperator.mappings.add([vimperator.modes.VISUAL], keys, "", + function (count) + { + if (typeof count != "number" || count < 1 || !hasCount) + count = 1; + + var controller = getBrowser().docShell + .QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsISelectionDisplay) + .QueryInterface(Components.interfaces.nsISelectionController); + + while (count--) + { + if (vimperator.modes.extended & vimperator.modes.TEXTAREA) + { + if (typeof visualTextareaCommand == "function") + visualTextareaCommand(); + else + vimperator.editor.executeCommand(visualTextareaCommand); + } + else + controller[caretModeMethod](caretModeArg, true); + } + }, + extraInfo); + + vimperator.mappings.add([vimperator.modes.TEXTAREA], keys, "", + function (count) + { + if (typeof count != "number" || count < 1) + count = 1; + + vimperator.editor.executeCommand(textareaCommand, count); + }, + extraInfo); + } + + // add mappings for commands like i,a,s,c,etc. in TEXTAREA mode + function addBeginInsertModeMap(keys, commands) + { + vimperator.mappings.add([vimperator.modes.TEXTAREA], keys, "", + function (count) + { + for (let c = 0; c < commands.length; c++) + vimperator.editor.executeCommand(commands[c], 1); + + vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + }); + } + + function addMotionMap(key) + { + vimperator.mappings.add([vimperator.modes.TEXTAREA], [key], + "Motion command", + function (motion, count) { vimperator.editor.executeCommandWithMotion(key, motion, count); }, + { flags: vimperator.Mappings.flags.MOTION | vimperator.Mappings.flags.COUNT }); + } + /////////////////////////////////////////////////////////////////////////////}}} ////////////////////// OPTIONS ///////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////{{{ - // + vimperator.options.add(["editor"], "Set the external text editor", "string", "gvim -f"); + vimperator.options.add(["insertmode", "im"], "Use Insert mode as the default for text areas", "boolean", true); + /////////////////////////////////////////////////////////////////////////////}}} + ////////////////////// MAPPINGS //////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////{{{ + var modes = [vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE]; + + /* KEYS COUNT CARET TEXTAREA VISUAL_TEXTAREA */ + addMovementMap(["k", ""], true, "lineMove", false, "cmd_linePrevious", selectPreviousLine); + addMovementMap(["j", "", ""], true, "lineMove", true, "cmd_lineNext", selectNextLine); + addMovementMap(["h", "", ""], true, "characterMove", false, "cmd_charPrevious", "cmd_selectCharPrevious"); + addMovementMap(["l", "", ""], true, "characterMove", true, "cmd_charNext", "cmd_selectCharNext"); + addMovementMap(["b", "B", ""], true, "wordMove", false, "cmd_wordPrevious", "cmd_selectWordPrevious"); + addMovementMap(["w", "W", "e", ""], true, "wordMove", true, "cmd_wordNext", "cmd_selectWordNext"); + addMovementMap(["", ""], true, "pageMove", true, "cmd_movePageDown", "cmd_selectNextPage"); + addMovementMap(["", ""], true, "pageMove", false, "cmd_movePageUp", "cmd_selectPreviousPage"); + addMovementMap(["gg", ""], false, "completeMove", false, "cmd_moveTop", "cmd_selectTop"); + addMovementMap(["G", ""], false, "completeMove", true, "cmd_moveBottom", "cmd_selectBottom"); + addMovementMap(["0", "^", ""], false, "intraLineMove", false, "cmd_beginLine", "cmd_selectBeginLine"); + addMovementMap(["$", ""], false, "intraLineMove", true, "cmd_endLine" , "cmd_selectEndLine" ); + + addBeginInsertModeMap(["i", ""], "Delete previous word", + function () { vimperator.editor.executeCommand("cmd_deleteWordBackward", 1); }); + + vimperator.mappings.add(modes, + [""], "Delete until beginning of current line", + function () + { + // broken in FF3, deletes the whole line: + // vimperator.editor.executeCommand("cmd_deleteToBeginningOfLine", 1); + vimperator.editor.executeCommand("cmd_selectBeginLine", 1); + vimperator.editor.executeCommand("cmd_delete", 1); + }); + + vimperator.mappings.add(modes, + [""], "Delete until end of current line", + function () { vimperator.editor.executeCommand("cmd_deleteToEndOfLine", 1); }); + + vimperator.mappings.add(modes, + ["", ""], "Move cursor to beginning of current line", + function () { vimperator.editor.executeCommand("cmd_beginLine", 1); }); + + vimperator.mappings.add(modes, + ["", ""], "Move cursor to end of current line", + function () { vimperator.editor.executeCommand("cmd_endLine", 1); }); + + vimperator.mappings.add(modes, + [""], "Delete character to the left", + function () { vimperator.editor.executeCommand("cmd_deleteCharBackward", 1); }); + + vimperator.mappings.add(modes, + [""], "Delete character to the right", + function () { vimperator.editor.executeCommand("cmd_deleteCharForward", 1); }); + + vimperator.mappings.add(modes, + [""], "Insert clipboard/selection", + function () { vimperator.editor.pasteClipboard(); }); + + vimperator.mappings.add([vimperator.modes.INSERT, vimperator.modes.TEXTAREA], + [""], "Edit text field with an external editor", + function () { vimperator.editor.editWithExternalEditor(); }); + + vimperator.mappings.add([vimperator.modes.INSERT], + ["", ""], "Expand insert mode abbreviation", + function () { return vimperator.editor.expandAbbreviation("i"); }, + { flags: vimperator.Mappings.flags.ALLOW_EVENT_ROUTING }); + + vimperator.mappings.add([vimperator.modes.INSERT], + [""], "Expand insert mode abbreviation", + function () { vimperator.editor.expandAbbreviation("i"); document.commandDispatcher.advanceFocus(); }); + + vimperator.mappings.add([vimperator.modes.INSERT], + ["", ""], "Expand insert mode abbreviation", + function () { vimperator.editor.expandAbbreviation("i"); }); + + // textarea mode + vimperator.mappings.add([vimperator.modes.TEXTAREA], + ["u"], "Undo", + function (count) + { + vimperator.editor.executeCommand("cmd_undo", count); + vimperator.mode = vimperator.modes.TEXTAREA; + }, + { flags: vimperator.Mappings.flags.COUNT }); + + vimperator.mappings.add([vimperator.modes.TEXTAREA], + [""], "Redo", + function (count) + { + vimperator.editor.executeCommand("cmd_redo", count); + vimperator.mode = vimperator.modes.TEXTAREA; + }, + { flags: vimperator.Mappings.flags.COUNT }); + + vimperator.mappings.add([vimperator.modes.TEXTAREA], + ["o"], "Open line below current", + function (count) + { + vimperator.editor.executeCommand("cmd_endLine", 1); + vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + vimperator.events.feedkeys(""); + }); + + vimperator.mappings.add([vimperator.modes.TEXTAREA], + ["O"], "Open line above current", + function (count) + { + vimperator.editor.executeCommand("cmd_beginLine", 1); + vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + vimperator.events.feedkeys(""); + vimperator.editor.executeCommand("cmd_linePrevious", 1); + }); + + // visual mode + vimperator.mappings.add([vimperator.modes.CARET, vimperator.modes.TEXTAREA, vimperator.modes.VISUAL], + ["v"], "Start visual mode", + function (count) { vimperator.modes.set(vimperator.modes.VISUAL, vimperator.mode); }); + + vimperator.mappings.add([vimperator.modes.TEXTAREA], + ["V"], "Start visual line mode", + function (count) + { + vimperator.modes.set(vimperator.modes.VISUAL, vimperator.modes.TEXTAREA | vimperator.modes.LINE); + vimperator.editor.executeCommand("cmd_beginLine", 1); + vimperator.editor.executeCommand("cmd_selectLineNext", 1); + }); + + vimperator.mappings.add([vimperator.modes.VISUAL], + ["c", "s"], "Change selected text", + function (count) + { + if (vimperator.modes.extended & vimperator.modes.TEXTAREA) + { + vimperator.editor.executeCommand("cmd_cut"); + vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); + } + else + vimperator.beep(); + }); + + vimperator.mappings.add([vimperator.modes.VISUAL], + ["d"], "Delete selected text", + function (count) + { + if (vimperator.modes.extended & vimperator.modes.TEXTAREA) + { + vimperator.editor.executeCommand("cmd_cut"); + vimperator.modes.set(vimperator.modes.TEXTAREA); + } + else + vimperator.beep(); + }); + + vimperator.mappings.add([vimperator.modes.VISUAL], + ["y"], "Yank selected text", + function (count) + { + if (vimperator.modes.extended & vimperator.modes.TEXTAREA) + { + vimperator.editor.executeCommand("cmd_copy"); + vimperator.modes.set(vimperator.modes.TEXTAREA); + } + else + { + var sel = window.content.document.getSelection(); + if (sel) + vimperator.copyToClipboard(sel, true); + else + vimperator.beep(); + } + }); + + vimperator.mappings.add([vimperator.modes.VISUAL, vimperator.modes.TEXTAREA], + ["p"], "Paste clipboard contents", + function (count) + { + if (!(vimperator.modes.extended & vimperator.modes.CARET)) + { + if (!count) count = 1; + while (count--) + vimperator.editor.executeCommand("cmd_paste"); + vimperator.mode = vimperator.modes.TEXTAREA; + } + else + vimperator.beep(); + }); + + // finding characters + vimperator.mappings.add([vimperator.modes.TEXTAREA, vimperator.modes.VISUAL], + ["f"], "Move to a character on the current line after the cursor", + function (count, arg) + { + var pos = vimperator.editor.findCharForward(arg, count); + if (pos >= 0) + vimperator.editor.moveToPosition(pos, true, vimperator.mode == vimperator.modes.VISUAL); + }, + { flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT}); + + vimperator.mappings.add([vimperator.modes.TEXTAREA, vimperator.modes.VISUAL], + ["F"], "Move to a charater on the current line before the cursor", + function (count, arg) + { + var pos = vimperator.editor.findCharBackward(arg, count); + if (pos >= 0) + vimperator.editor.moveToPosition(pos, false, vimperator.mode == vimperator.modes.VISUAL); + }, + { flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT}); + + vimperator.mappings.add([vimperator.modes.TEXTAREA, vimperator.modes.VISUAL], + ["t"], "Move before a character on the current line", + function (count, arg) + { + var pos = vimperator.editor.findCharForward(arg, count); + if (pos >= 0) + vimperator.editor.moveToPosition(pos - 1, true, vimperator.mode == vimperator.modes.VISUAL); + }, + { flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT}); + + vimperator.mappings.add([vimperator.modes.TEXTAREA, vimperator.modes.VISUAL], + ["T"], "Move before a character on the current line, backwards", + function (count, arg) + { + var pos = vimperator.editor.findCharBackward(arg, count); + if (pos >= 0) + vimperator.editor.moveToPosition(pos + 1, false, vimperator.mode == vimperator.modes.VISUAL); + }, + { flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT}); /////////////////////////////////////////////////////////////////////////////}}} ////////////////////// PUBLIC SECTION ////////////////////////////////////////// diff --git a/content/mappings.js b/content/mappings.js index 81ecdfaa..44b0f874 100644 --- a/content/mappings.js +++ b/content/mappings.js @@ -173,7 +173,7 @@ vimperator.Mappings = function () //{{{ ARGUMENT: 1 << 3 }; - var mappingManager = { + return { // NOTE: just normal mode for now __iterator__: function () @@ -334,621 +334,6 @@ vimperator.Mappings = function () //{{{ } }; - - /////////////////////////////////////////////////////////////////////////////}}} - ////////////////////// DEFAULT MAPPINGS //////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////{{{ - - // CARET mode, most commands should be moved to buffer.js i guess - // {{{ - - function getSelectionController() - { - return getBrowser().docShell - .QueryInterface(Components.interfaces.nsIInterfaceRequestor) - .getInterface(Components.interfaces.nsISelectionDisplay) - .QueryInterface(Components.interfaces.nsISelectionController); - - } - addDefaultMap(new vimperator.Map([vimperator.modes.CARET, vimperator.modes.TEXTAREA], ["v"], - function (count) { vimperator.modes.set(vimperator.modes.VISUAL, vimperator.mode); }, - { shortHelp: "Start visual mode" } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["j", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - getSelectionController().lineMove(true, false); - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["k", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - getSelectionController().lineMove(false, false); - - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["h", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - getSelectionController().characterMove(false, false); - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["l", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - getSelectionController().characterMove(true, false); - - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["b", "B", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - getSelectionController().wordMove(false, false); - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["w", "W", "e", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - getSelectionController().wordMove(true, false); - - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - getSelectionController().pageMove(true, false); - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - getSelectionController().pageMove(false, false); - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["gg", ""], - function (count) { getSelectionController().completeMove(false, false); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["G", ""], - function (count) { getSelectionController().completeMove(true, false); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["0", "^", ""], - function (count) { getSelectionController().intraLineMove(false, false); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.CARET], ["$", ""], - function (count) { getSelectionController().intraLineMove(true, false); }, - { } - )); - - - // }}} - // VISUAL mode, move to buffer.js - // {{{ - - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["j", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - { - vimperator.editor.executeCommand("cmd_selectLineNext"); - if ((vimperator.modes.extended & vimperator.modes.LINE) && !vimperator.editor.selectedText()) - vimperator.editor.executeCommand("cmd_selectLineNext"); - } - else - getSelectionController().lineMove(true, true); - } - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["k", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - { - vimperator.editor.executeCommand("cmd_selectLinePrevious"); - if ((vimperator.modes.extended & vimperator.modes.LINE) && !vimperator.editor.selectedText()) - vimperator.editor.executeCommand("cmd_selectLinePrevious"); - } - else - getSelectionController().lineMove(false, true); - } - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["h", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - vimperator.editor.executeCommand("cmd_selectCharPrevious"); - else - getSelectionController().characterMove(false, true); - } - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["l", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - vimperator.editor.executeCommand("cmd_selectCharNext"); - else - getSelectionController().characterMove(true, true); - } - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["b", "B"], - function (count) - { - if (count < 1) count = 1; - while (count--) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - vimperator.editor.executeCommand("cmd_selectWordPrevious"); - else - getSelectionController().wordMove(false, true); - } - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["w", "W", "e"], - function (count) - { - if (count < 1) count = 1; - while (count--) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - vimperator.editor.executeCommand("cmd_selectWordNext"); - else - getSelectionController().wordMove(true, true); - } - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - ;//vimperator.editor.executeCommand("cmd_selectPageNext"); - else - getSelectionController().pageMove(true, true); - } - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["", ""], - function (count) - { - if (count < 1) count = 1; - while (count--) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - ;//vimperator.editor.executeCommand("cmd_selectWordNext"); - else - getSelectionController().pageMove(false, true); - } - }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["gg", ""], - function (count) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - vimperator.editor.executeCommand("cmd_selectTop"); - else - getSelectionController().completeMove(false, true); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["G", ""], - function (count) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - vimperator.editor.executeCommand("cmd_selectBottom"); - else - getSelectionController().completeMove(true, true); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["0", "^", ""], - function (count) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - vimperator.editor.executeCommand("cmd_selectBeginLine"); - else - getSelectionController().intraLineMove(false, true); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["$", ""], - function (count) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - vimperator.editor.executeCommand("cmd_selectEndLine"); - else - getSelectionController().intraLineMove(true, true); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["c", "s"], - function (count) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - { - vimperator.editor.executeCommand("cmd_cut"); - vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); - } - else - vimperator.beep(); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["d"], - function (count) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - { - vimperator.editor.executeCommand("cmd_cut"); - vimperator.modes.set(vimperator.modes.TEXTAREA); - } - else - vimperator.beep(); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL], ["y"], - function (count) - { - if (vimperator.modes.extended & vimperator.modes.TEXTAREA) - { - vimperator.editor.executeCommand("cmd_copy"); - // vimperator.editor.unselectText(); - vimperator.modes.set(vimperator.modes.TEXTAREA); - } - else - { - var sel = window.content.document.getSelection(); - if (sel) - vimperator.copyToClipboard(sel, true); - else - vimperator.beep(); - } - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.VISUAL, vimperator.modes.TEXTAREA], ["p"], - function (count) - { - if (!(vimperator.modes.extended & vimperator.modes.CARET)) - { - if (!count) count = 1; - while (count--) - vimperator.editor.executeCommand("cmd_paste"); - vimperator.mode = vimperator.modes.TEXTAREA; - } - else - vimperator.beep(); - }, - { } - )); - - // }}} - // TEXTAREA mode, move to editor.js - // {{{ - - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["i", ""], - function (count) { vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["a"], - function (count) - { - vimperator.editor.executeCommand("cmd_charNext", 1); - vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["I", "gI"], - function (count) - { - vimperator.editor.executeCommand("cmd_beginLine", 1); - vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["A"], - function (count) - { - vimperator.editor.executeCommand("cmd_endLine", 1); - vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["s"], - function (count) - { - vimperator.editor.executeCommand("cmd_deleteCharForward", 1); - vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["S"], - function (count) - { - vimperator.editor.executeCommand("cmd_deleteToEndOfLine", 1); - vimperator.editor.executeCommand("cmd_deleteToBeginningOfLine", 1); - vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["C"], - function (count) - { - vimperator.editor.executeCommand("cmd_deleteToEndOfLine", 1); - vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["v"], - function (count) { vimperator.modes.set(vimperator.modes.VISUAL, vimperator.modes.TEXTAREA); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["V"], - function (count) - { - vimperator.modes.set(vimperator.modes.VISUAL, vimperator.modes.TEXTAREA | vimperator.modes.LINE); - vimperator.editor.executeCommand("cmd_beginLine", 1); - vimperator.editor.executeCommand("cmd_selectLineNext", 1); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["u"], - function (count) { vimperator.editor.executeCommand("cmd_undo", count); vimperator.mode = vimperator.modes.TEXTAREA; }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], [""], - function (count) { vimperator.editor.executeCommand("cmd_redo", count); vimperator.mode = vimperator.modes.TEXTAREA; }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["j", "", ""], - function (count) { vimperator.editor.executeCommand("cmd_lineNext", count); }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["k", ""], - function (count) { vimperator.editor.executeCommand("cmd_linePrevious", count); }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["h", "", ""], - function (count) { vimperator.editor.executeCommand("cmd_charPrevious", count); }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["l", "", ""], - function (count) { vimperator.editor.executeCommand("cmd_charNext", count); }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["w", "W", "e", ""], - function (count) { vimperator.editor.executeCommand("cmd_wordNext", count); }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["b", "B", ""], - function (count) { vimperator.editor.executeCommand("cmd_wordPrevious", 1); }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["gg", ""], - function (count) { vimperator.editor.executeCommand("cmd_moveTop", 1); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["G", ""], - function (count) { vimperator.editor.executeCommand("cmd_moveBottom", 1); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["0", "^", ""], - function (count) { vimperator.editor.executeCommand("cmd_beginLine", 1); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["$", ""], - function (count) { vimperator.editor.executeCommand("cmd_endLine", 1); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["", ""], - function (count) { vimperator.editor.executeCommand("cmd_movePageDown", count); }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["", ""], - function (count) { vimperator.editor.executeCommand("cmd_movePageUp", count); }, - { flags: vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["o"], - function (count) - { - vimperator.editor.executeCommand("cmd_endLine", 1); - vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); - vimperator.events.feedkeys(""); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["O"], - function (count) - { - vimperator.editor.executeCommand("cmd_beginLine", 1); - vimperator.modes.set(vimperator.modes.INSERT, vimperator.modes.TEXTAREA); - vimperator.events.feedkeys(""); - vimperator.editor.executeCommand("cmd_linePrevious", 1); - }, - { } - )); - - // no need to check if we are really in TEXTAREA mode, as findCharForward/Backward will return -1 otherwise - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA, vimperator.modes.VISUAL], ["f"], - function (count, arg) - { - var pos = vimperator.editor.findCharForward(arg, count); - if (pos >= 0) - vimperator.editor.moveToPosition(pos, true, vimperator.mode == vimperator.modes.VISUAL); - }, - { flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT} - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA, vimperator.modes.VISUAL], ["F"], - function (count, arg) - { - var pos = vimperator.editor.findCharBackward(arg, count); - if (pos >= 0) - vimperator.editor.moveToPosition(pos, false, vimperator.mode == vimperator.modes.VISUAL); - }, - { flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT} - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA, vimperator.modes.VISUAL], ["t"], - function (count, arg) - { - var pos = vimperator.editor.findCharForward(arg, count); - if (pos >= 0) - vimperator.editor.moveToPosition(pos - 1, true, vimperator.mode = vimperator.modes.VISUAL); - }, - { flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT} - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA, vimperator.modes.VISUAL], ["T"], - function (count, arg) - { - var pos = vimperator.editor.findCharBackward(arg, count); - if (pos >= 0) - vimperator.editor.moveToPosition(pos + 1, false, vimperator.mode = vimperator.modes.VISUAL); - }, - { flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT} - )); - // addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA, vimperator.modes.VISUAL], [";"], - // function (count, arg) - // { - // var pos = vimperator.editor.findCharBackward(null, count); - // if (pos >= 0) - // vimperator.editor.moveToPosition(pos + 1, false, vimperator.mode = vimperator.modes.VISUAL); - // }, - // { flags: vimperator.Mappings.flags.ARGUMENT | vimperator.Mappings.flags.COUNT} - // )); - - // commands which require a motion - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["d"], - function (motion, count) { vimperator.editor.executeCommandWithMotion("d", motion, count); }, - { flags: vimperator.Mappings.flags.MOTION | vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["c"], - function (motion, count) { vimperator.editor.executeCommandWithMotion("c", motion, count); }, - { flags: vimperator.Mappings.flags.MOTION | vimperator.Mappings.flags.COUNT } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.TEXTAREA], ["y"], - function (motion, count) { vimperator.editor.executeCommandWithMotion("y", motion, count); }, - { flags: vimperator.Mappings.flags.MOTION | vimperator.Mappings.flags.COUNT } - )); - - // }}} - // INSERT mode, move to editor.js - // {{{ - - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE], [""], - function () { vimperator.editor.executeCommand("cmd_deleteWordBackward", 1); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE], [""], - function () - { - // broken in FF3, deletes the whole line: - // vimperator.editor.executeCommand("cmd_deleteToBeginningOfLine", 1); - vimperator.editor.executeCommand("cmd_selectBeginLine", 1); - vimperator.editor.executeCommand("cmd_delete", 1); - }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE], [""], - function () { vimperator.editor.executeCommand("cmd_deleteToEndOfLine", 1); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE], ["", ""], - function () { vimperator.editor.executeCommand("cmd_beginLine", 1); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE], ["", ""], - function () { vimperator.editor.executeCommand("cmd_endLine", 1); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE], [""], // let firefox handle - function () { vimperator.editor.executeCommand("cmd_deleteCharBackward", 1); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE], [""], - function () { vimperator.editor.executeCommand("cmd_deleteCharForward", 1); }, - { } - )); -// addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE], [""], -// function () { vimperator.editor.executeCommand("cmd_charPrevious", 1); }, -// { } -// )); -// addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE], [""], -// function () { vimperator.editor.executeCommand("cmd_charNext", 1); }, -// { } -// )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.COMMAND_LINE], [""], - function () { vimperator.editor.pasteClipboard(); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.TEXTAREA], [""], - function () { vimperator.editor.editWithExternalEditor(); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.TEXTAREA], ["", ""], - function () { return vimperator.editor.expandAbbreviation("i"); }, - { flags: vimperator.Mappings.flags.ALLOW_EVENT_ROUTING } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.TEXTAREA], [""], - function () { vimperator.editor.expandAbbreviation("i"); document.commandDispatcher.advanceFocus(); }, - { } - )); - addDefaultMap(new vimperator.Map([vimperator.modes.INSERT, vimperator.modes.TEXTAREA], - ["", ""], function () { vimperator.editor.expandAbbreviation("i"); }, { } - )); - - //}}} - - return mappingManager; }; //}}} // vim: set fdm=marker sw=4 ts=4 et: