diff --git a/lib/ace/keyboard/emacs.js b/lib/ace/keyboard/emacs.js index e912f589..5f9fbe8d 100644 --- a/lib/ace/keyboard/emacs.js +++ b/lib/ace/keyboard/emacs.js @@ -38,8 +38,8 @@ define(function(require, exports, module) { "use strict"; -var StateHandler = require("../state_handler").StateHandler; -var matchCharacterOnly = require("../state_handler").matchCharacterOnly; +var StateHandler = require("./state_handler").StateHandler; +var matchCharacterOnly = require("./state_handler").matchCharacterOnly; var emacsState = { start: [ diff --git a/lib/ace/keyboard/vim.js b/lib/ace/keyboard/vim.js index 78367c2d..f1392ba9 100644 --- a/lib/ace/keyboard/vim.js +++ b/lib/ace/keyboard/vim.js @@ -1,138 +1,27 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Skywriter. - * - * The Initial Developer of the Original Code is - * Mozilla. - * Portions created by the Initial Developer are Copyright (C) 2009 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Julian Viereck (julian.viereck@gmail.com) - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - define(function(require, exports, module) { "use strict"; -var StateHandler = require("../state_handler").StateHandler; -var matchCharacterOnly = require("../state_handler").matchCharacterOnly; +"never use strict"; -var vimcommand = function(key, exec, then) { - return { - regex: [ "([0-9]*)", key ], - exec: exec, - params: [ - { - name: "times", - match: 1, - type: "number", - defaultValue: 1 - } - ], - then: then - } -} +var commands = require("./vim/commands"); +var util = require("./vim/maps/util"); -var vimStates = { - start: [ - { - key: "i", - then: "insertMode" - }, - { - key: "d", - then: "deleteMode" - }, - { - key: "a", - exec: "gotoright", - then: "insertMode" - }, - { - key: "shift-i", - exec: "gotolinestart", - then: "insertMode" - }, - { - key: "shift-a", - exec: "gotolineend", - then: "insertMode" - }, - { - key: "shift-c", - exec: "removetolineend", - then: "insertMode" - }, - { - key: "shift-r", - exec: "overwrite", - then: "replaceMode" - }, - vimcommand("(k|up)", "golineup"), - vimcommand("(j|down)", "golinedown"), - vimcommand("(l|right)", "gotoright"), - vimcommand("(h|left)", "gotoleft"), - { - key: "shift-g", - exec: "gotoend" - }, - vimcommand("b", "gotowordleft"), - vimcommand("e", "gotowordright"), - vimcommand("x", "del"), - vimcommand("shift-x", "backspace"), - vimcommand("shift-d", "removetolineend"), - vimcommand("u", "undo"), // [count] on this may/may not work, depending on browser implementation... - { - comment: "Catch some keyboard input to stop it here", - match: matchCharacterOnly - } - ], - insertMode: [ - { - key: "esc", - then: "start" - } - ], - replaceMode: [ - { - key: "esc", - exec: "overwrite", - then: "start" - } - ], - deleteMode: [ - { - key: "d", - exec: "removeline", - then: "start" - } - ] +exports.handler = require("./vim/keyboard").handler; + +exports.onCursorMove = function() { + commands.onCursorMove(); + onCursorMove.scheduled = false; }; -exports.handler = new StateHandler(vimStates); +exports.attach = function(editor){ + editor.on("click", exports.onCursorMove); + if (util.currentMode !== "insert") + commands.coreCommands.stop.exec(editor); +}; + +exports.detach = function(editor){ + editor.removeListener("click", exports.onCursorMove); + commands.coreCommands.start.exec(editor); +}; }); diff --git a/lib/ace/keyboard/vim/commands.js b/lib/ace/keyboard/vim/commands.js index a952047f..5e1a1912 100644 --- a/lib/ace/keyboard/vim/commands.js +++ b/lib/ace/keyboard/vim/commands.js @@ -8,14 +8,13 @@ define(function(require, exports, module) { -"use strict"; +"never use strict"; -var Editors = require("ext/editors/editors"); -var util = require("ext/vim/maps/util"); -var motions = require("ext/vim/maps/motions"); -var operators = require("ext/vim/maps/operators"); -var alias = require("ext/vim/maps/aliases"); -var registers = require("ext/vim/registers"); +var util = require("./maps/util"); +var motions = require("./maps/motions"); +var operators = require("./maps/operators"); +var alias = require("./maps/aliases"); +var registers = require("./registers"); var NUMBER = 1; var OPERATOR = 2; @@ -390,7 +389,7 @@ var inputBuffer = exports.inputBuffer = { a.fn(editor, editor.getSelectionRange(), a.count, param); this.reset(); } - handleCursorMove(); + handleCursorMove(editor); }, isAccepting: function(type) { @@ -411,7 +410,7 @@ function setPreviousCommand(fn) { inputBuffer.previous = { action: { action: { fn: fn } } }; } -exports.commands = { +exports.coreCommands = { start: { exec: function start(editor) { util.insertMode(editor); @@ -451,12 +450,13 @@ exports.commands = { util.insertMode(editor); setPreviousCommand(appendEnd); } + }, + builder: { + exec: function builder(editor) {} } }; -var handleCursorMove = exports.onCursorMove = function() { - var editor = Editors.currentEditor.amlEditor.$editor; - +var handleCursorMove = exports.onCursorMove = function(editor) { if(util.currentMode === 'insert' || handleCursorMove.running) return; else if(!editor.selection.isEmpty()) { diff --git a/lib/ace/keyboard/vim/keyboard.js b/lib/ace/keyboard/vim/keyboard.js index 4786b5eb..a51a5e7a 100644 --- a/lib/ace/keyboard/vim/keyboard.js +++ b/lib/ace/keyboard/vim/keyboard.js @@ -1,11 +1,11 @@ define(function(require, exports, module) { -"use strict"; +"never use strict"; var StateHandler = require("ace/keyboard/state_handler").StateHandler; -var cmds = require("ext/vim/commands"); -var editors = require("ext/editors/editors"); +var cmds = require("./commands"); +var coreCommands = cmds.coreCommands; var matchChar = function(buffer, hashId, key, symbolicName, keyId) { // If no command keys are pressed, then catch the input. @@ -20,13 +20,9 @@ var matchChar = function(buffer, hashId, key, symbolicName, keyId) { keyId = String.fromCharCode(parseInt(keyId.replace("U+", "0x"), 10)); } - var editor = editors.currentEditor.amlEditor.$editor; - editor.commands.addCommand({ - name: "builder", - exec: function(editor) { - cmds.inputBuffer.push.call(cmds.inputBuffer, editor, symbolicName, keyId); - } - }); + coreCommands.builder.exec = function(editor) { + cmds.inputBuffer.push.call(cmds.inputBuffer, editor, symbolicName, keyId); + } } return matched; }; @@ -42,43 +38,43 @@ var states = exports.states = { start: [ // normal mode { key: "esc", - exec: "stop", + exec: coreCommands.stop, then: "start" }, { regex: "^i$", match: inIdleState, - exec: "start", + exec: coreCommands.start, then: "insertMode" }, { regex: "^shift-i$", match: inIdleState, - exec: "startBeginning", + exec: coreCommands.startBeginning, then: "insertMode" }, { regex: "^a$", match: inIdleState, - exec: "append", + exec: coreCommands.append, then: "insertMode" }, { regex: "^shift-a$", match: inIdleState, - exec: "appendEnd", + exec: coreCommands.appendEnd, then: "insertMode" }, { // The rest of input will be processed here match: matchChar, - exec: "builder" + exec: coreCommands.builder } ], insertMode: [ { key: "esc", - exec: "stop", + exec: coreCommands.stop, then: "start" }, { @@ -89,4 +85,4 @@ var states = exports.states = { }; exports.handler = new StateHandler(states); -}); +}); \ No newline at end of file diff --git a/lib/ace/keyboard/vim/maps/aliases.js b/lib/ace/keyboard/vim/maps/aliases.js index 35ceb93f..34b6d971 100644 --- a/lib/ace/keyboard/vim/maps/aliases.js +++ b/lib/ace/keyboard/vim/maps/aliases.js @@ -1,4 +1,4 @@ -"use strict" +"never use strict" define(function(require, exports, module) { module.exports = { diff --git a/lib/ace/keyboard/vim/maps/motions.js b/lib/ace/keyboard/vim/maps/motions.js index 3bf66aa4..89b77a18 100644 --- a/lib/ace/keyboard/vim/maps/motions.js +++ b/lib/ace/keyboard/vim/maps/motions.js @@ -1,8 +1,8 @@ -"use strict" +"never use strict" define(function(require, exports, module) { -var util = require("ext/vim/maps/util"); +var util = require("./util"); var keepScrollPosition = function(editor, fn) { var scrollTopRow = editor.renderer.getScrollTopRow(); diff --git a/lib/ace/keyboard/vim/maps/operators.js b/lib/ace/keyboard/vim/maps/operators.js index a946d4c8..2b332dce 100644 --- a/lib/ace/keyboard/vim/maps/operators.js +++ b/lib/ace/keyboard/vim/maps/operators.js @@ -1,9 +1,9 @@ define(function(require, exports, module) { -"use strict"; +"never use strict"; -var util = require("ext/vim/maps/util"); -var registers = require("ext/vim/registers"); +var util = require("./util"); +var registers = require("../registers"); module.exports = { "d": { diff --git a/lib/ace/keyboard/vim/maps/util.js b/lib/ace/keyboard/vim/maps/util.js index 18348125..60e120cf 100644 --- a/lib/ace/keyboard/vim/maps/util.js +++ b/lib/ace/keyboard/vim/maps/util.js @@ -1,7 +1,5 @@ -"use strict"; - define(function(require, exports, module) { -var registers = require("ext/vim/registers"); +var registers = require("../registers"); module.exports = { onVisualMode: false, diff --git a/lib/ace/keyboard/vim/registers.js b/lib/ace/keyboard/vim/registers.js index 24b98314..05fb765c 100644 --- a/lib/ace/keyboard/vim/registers.js +++ b/lib/ace/keyboard/vim/registers.js @@ -1,7 +1,7 @@ define(function(require, exports, module) { -"use strict"; +"never use strict"; module.exports = { _default: {