Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 232573 Details for
Bug 411183
More VI keybindings
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
Patch
file_411183.txt (text/plain), 67.84 KB, created by
Bogdan Gheorghe
on 2013-06-19 17:00:06 EDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Bogdan Gheorghe
Created:
2013-06-19 17:00:06 EDT
Size:
67.84 KB
patch
obsolete
>diff --git a/bundles/org.eclipse.orion.client.editor/web/orion/editor/editor.js b/bundles/org.eclipse.orion.client.editor/web/orion/editor/editor.js >index c97c1b3..1c13256 100644 >--- a/bundles/org.eclipse.orion.client.editor/web/orion/editor/editor.js >+++ b/bundles/org.eclipse.orion.client.editor/web/orion/editor/editor.js >@@ -802,7 +802,7 @@ > * @param {Number|String} column > * @param {Number} [end] > */ >- onGotoLine: function(line, column, end) { >+ onGotoLine: function(line, column, end, callback) { > if (this._textView) { > var model = this.getModel(); > line = Math.max(0, Math.min(line, model.getLineCount() - 1)); >@@ -823,7 +823,7 @@ > start = Math.min(start, lineLength); > end = Math.min(end, lineLength); > } >- this.moveSelection(lineStart + start, lineStart + end); >+ this.moveSelection(lineStart + start, lineStart + end, callback); > } > }, > >diff --git a/bundles/org.eclipse.orion.client.editor/web/orion/editor/nls/root/messages.js b/bundles/org.eclipse.orion.client.editor/web/orion/editor/nls/root/messages.js >index f57efb0..778e58e 100644 >--- a/bundles/org.eclipse.orion.client.editor/web/orion/editor/nls/root/messages.js >+++ b/bundles/org.eclipse.orion.client.editor/web/orion/editor/nls/root/messages.js >@@ -134,6 +134,49 @@ > "contentAssist": "Content Assist", //$NON-NLS-1$ //$NON-NLS-0$ > "lineColumn": "Line ${0} : Col ${1}", //$NON-NLS-1$ //$NON-NLS-0$ > >+ //vi >+ "vi": "vi", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viLeft": "${0} Left", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viRight": "${0} Right", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viUp": "${0} Up", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viDown": "${0} Down", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viw": "${0} Next Word", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vib": "${0} Beginning of Word", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viW": "${0} Next Word (ws stop)", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viB": "${0} Beginning of Word (ws stop)", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vie": "${0} End of Word", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viE": "${0} End of Word (ws stop)", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vi$": "${0} End of the line", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vi^_": "${0} First non-blank Char Current Line", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vi+": "${0} First Char Next Line", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vi-": "${0} First Char Previous Line", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vi|": "${0} nth Column in Line", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viH": "${0} Top of Page", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viM": "${0} Middle of Page", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viL": "${0} Bottom of Page", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vi/": "${0} Search Forward", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vi?": "${0} Search Backward", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vin": "${0} Next Search", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viN": "${0} Previous Search", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vif": "${0} Search Char Fwd", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viF": "${0} Search Char Bckwd", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vit": "${0} Search Before Char Fwd", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viT": "${0} Search Before Char Bckwd", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vi,": "${0} Repeat Reverse Char Search", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vi;": "${0} Repeat Char Search", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viG": "${0} Go to Line", //$NON-NLS-1$ //$NON-NLS-0$ >+ "via": "Append after cursor", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viA": "Append to end of line", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vii": "Insert before cursor", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viI": "Insert at beginning of line", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viO": "Insert line above", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vio": "Insert line below", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viR": "Begin overwriting text", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vis": "Substitute a character", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viS": "Substitute entire line", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viC": "Change text until line end", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viD": "", //$NON-NLS-1$ //$NON-NLS-0$ >+ > "replaceAll": "Replacing all...", //$NON-NLS-1$ //$NON-NLS-0$ > "replacedMatches": "Replaced ${0} matches", //$NON-NLS-1$ //$NON-NLS-0$ > "nothingReplaced": "Nothing replaced", //$NON-NLS-1$ //$NON-NLS-0$ >diff --git a/bundles/org.eclipse.orion.client.editor/web/orion/editor/vi.js b/bundles/org.eclipse.orion.client.editor/web/orion/editor/vi.js >index a447e0a..95a6f23 100644 >--- a/bundles/org.eclipse.orion.client.editor/web/orion/editor/vi.js >+++ b/bundles/org.eclipse.orion.client.editor/web/orion/editor/vi.js >@@ -1,9 +1,11 @@ > /*global define window log */ > >-define("orion/editor/vi", [ >+define("orion/editor/vi", [ //$NON-NLS-0$ >+ "i18n!orion/editor/nls/messages", //$NON-NLS-0$ > "orion/editor/keyModes", //$NON-NLS-0$ >- "orion/keyBinding" //$NON-NLS-0$ >-], function (mKeyMode, mKeyBinding) { >+ "orion/keyBinding", //$NON-NLS-0$ >+ "orion/util" //$NON-NLS-0$ >+], function (messages, mKeyMode, mKeyBinding, util) { > > function mixin(object, proto) { > for (var p in proto) { >@@ -13,74 +15,472 @@ > } > } > >- function NumberMode(textView, key){ >+ function createStroke(keyCode, mod1, mod2, mod3, mod4, type, scope) { >+ var result = new mKeyBinding.KeyStroke(keyCode, mod1, mod2, mod3, mod4, type); >+ result.scopeName = scope || messages.vi; >+ return result; >+ } >+ >+ function createSequence(keys, scope) { >+ var result = new mKeyBinding.KeySequence(keys); >+ result.scopeName = scope || messages.vi; >+ return result; >+ } >+ >+ >+ function NumberMode(textView, key, msg){ > this.key = key; >+ this.msg = msg; > this.number = ""; > mKeyMode.KeyMode.call(this, textView); >+ //Create actions >+ if (textView) { >+ this._createActions(textView); >+ } > } > NumberMode.prototype = new mKeyMode.KeyMode(); > mixin(NumberMode.prototype, /** @lends orion.editor.viMode.NumberMode.prototype */ { >+ _msg: function(key){ >+ return {name: util.formatMessage(messages[key], this.msg)}; >+ }, > createKeyBindings: function() { >- var KeyBinding = mKeyBinding.KeyBinding; > var bindings = []; >- var view = this.getView(); > var key = this.key; >- //Numbers >- for (var i=0; i<9; i++) { >- bindings.push({actionID: key + "storeNumber" + i, keyBinding: new KeyBinding(i+"", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >+ >+ if (key) { >+ key = "-" + key + "-"; //$NON-NLS-1$ //$NON-NLS-0$ >+ } else { >+ key = "-"; //$NON-NLS-0$ > } >- var self = this; >- view.setAction(key+"storeNumber0", function() {return self._storeNumber(0);}); >- view.setAction(key+"storeNumber1", function() {return self._storeNumber(1);}); >- view.setAction(key+"storeNumber2", function() {return self._storeNumber(2);}); >- view.setAction(key+"storeNumber3", function() {return self._storeNumber(3);}); >- view.setAction(key+"storeNumber4", function() {return self._storeNumber(4);}); >- view.setAction(key+"storeNumber5", function() {return self._storeNumber(5);}); >- view.setAction(key+"storeNumber6", function() {return self._storeNumber(6);}); >- view.setAction(key+"storeNumber7", function() {return self._storeNumber(7);}); >- view.setAction(key+"storeNumber8", function() {return self._storeNumber(8);}); >- view.setAction(key+"storeNumber9", function() {return self._storeNumber(9);}); >+ >+ //Numbers >+ for (var i=0; i<=9; i++) { >+ bindings.push({actionID: "vi" + key + i, keyBinding: createStroke(i+"", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ } >+ >+ //Movement >+ //left >+ bindings.push({actionID: "vi" + key + "Left", keyBinding: createStroke("h", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "Left", keyBinding: createStroke("h", true, false, false, false)}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "Left", keyBinding: createStroke(8)}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "Left", keyBinding: createStroke(37)}); //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ //down >+ bindings.push({actionID: "vi" + key + "Down", keyBinding: createStroke("j", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "Down", keyBinding: createStroke(40)}); //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ //up >+ bindings.push({actionID: "vi" + key + "Up", keyBinding: createStroke("k", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "Up", keyBinding: createStroke(38)}); //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ //right >+ bindings.push({actionID: "vi" + key + "Right", keyBinding: createStroke("l", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "Right", keyBinding: createStroke(39)}); //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "Right", keyBinding: createStroke(32)}); //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ //text movement >+ bindings.push({actionID: "vi" + key + "w", keyBinding: createStroke("w", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "b", keyBinding: createStroke("b", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ //TODO: add >+ bindings.push({actionID: "vi" + key + "W", keyBinding: createStroke("W", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ //TODO: add >+ bindings.push({actionID: "vi" + key + "B", keyBinding: createStroke("B", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ //TODO: >+ bindings.push({actionID: "vi" + key + "e", keyBinding: createStroke("e", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "E", keyBinding: createStroke("E", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ //bindings.push({actionID: "vi" + key + ")", keyBinding: createStroke(")", false, false, false, false, "keypress")}); //$NON-NLS-0$ >+ //bindings.push({actionID: "vi" + key + "(", keyBinding: createStroke("(", false, false, false, false, "keypress")}); //$NON-NLS-0$ >+ //bindings.push({actionID: "vi" + key + "}", keyBinding: createStroke("}", false, false, false, false, "keypress")}); //$NON-NLS-0$ >+ //bindings.push({actionID: "vi" + key + "{", keyBinding: createStroke("{", false, false, false, false, "keypress")}); //$NON-NLS-0$ >+ //bindings.push({actionID: "vi" + key + "]]", keyBinding: createStroke("]]", false, false, false, false, "keypress")}); //$NON-NLS-0$ >+ //bindings.push({actionID: "vi" + key + "[[", keyBinding: createStroke("[[", false, false, false, false, "keypress")}); //$NON-NLS-0$ > >+ //Lines >+ bindings.push({actionID: "vi" + key + "$", keyBinding: createStroke("$", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ bindings.push({actionID: "vi" + key + "^_", keyBinding: createStroke("^", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "^_", keyBinding: createStroke("_", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ bindings.push({actionID: "vi" + key + "+", keyBinding: createStroke("+", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "+", keyBinding: createStroke(13)}); //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "-", keyBinding: createStroke("-", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "|", keyBinding: createStroke("|", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ bindings.push({actionID: "vi" + key + "H", keyBinding: createStroke("H", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "M", keyBinding: createStroke("M", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "L", keyBinding: createStroke("L", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ //Screens >+ >+ //Searches >+ bindings.push({actionID: "vi" + key + "/", keyBinding: createStroke("/", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "?", keyBinding: createStroke("?", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "n", keyBinding: createStroke("n", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "N", keyBinding: createStroke("N", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "f", keyBinding: createStroke("f", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "F", keyBinding: createStroke("F", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "t", keyBinding: createStroke("t", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + "T", keyBinding: createStroke("T", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + ",", keyBinding: createStroke(",", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi" + key + ";", keyBinding: createStroke(";", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ //Line numbering >+ bindings.push({actionID: "vi" + key + "G", keyBinding: createStroke("G", false, false, false, false, "keypress")}); //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ > return bindings; > }, >+ _createActions: function(view) { >+ >+ var key = this.key; >+ if (key) { >+ key = "-" + key + "-"; //$NON-NLS-1$ //$NON-NLS-0$ >+ } else { >+ key = "-"; //$NON-NLS-0$ >+ } >+ var self = this; >+ view.setAction("vi" + key +"0", function() {return self._storeNumber(0);}); //$NON-NLS-1$ //$NON-NLS-0$ >+ view.setAction("vi" + key +"1", function() {return self._storeNumber(1);}); //$NON-NLS-1$ //$NON-NLS-0$ >+ view.setAction("vi" + key +"2", function() {return self._storeNumber(2);}); //$NON-NLS-1$ //$NON-NLS-0$ >+ view.setAction("vi" + key +"3", function() {return self._storeNumber(3);}); //$NON-NLS-1$ //$NON-NLS-0$ >+ view.setAction("vi" + key +"4", function() {return self._storeNumber(4);}); //$NON-NLS-1$ //$NON-NLS-0$ >+ view.setAction("vi" + key +"5", function() {return self._storeNumber(5);}); //$NON-NLS-1$ //$NON-NLS-0$ >+ view.setAction("vi" + key +"6", function() {return self._storeNumber(6);}); //$NON-NLS-1$ //$NON-NLS-0$ >+ view.setAction("vi" + key +"7", function() {return self._storeNumber(7);}); //$NON-NLS-1$ //$NON-NLS-0$ >+ view.setAction("vi" + key +"8", function() {return self._storeNumber(8);}); //$NON-NLS-1$ //$NON-NLS-0$ >+ view.setAction("vi" + key +"9", function() {return self._storeNumber(9);}); //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ //Utility >+ function firstNonBlankChar(lineIndex) { >+ var model = view.getModel(); >+ var lineText = model.getLine(lineIndex); >+ var offsetInLine = 0; >+ var c = lineText.charCodeAt(offsetInLine); >+ while (c === 32 || c === 9) { >+ offsetInLine++; >+ c = lineText.charCodeAt(offsetInLine); >+ } >+ return offsetInLine; >+ } >+ >+ function findCallback(range, data){ >+ if (range) { >+ self.getView().setCaretOffset(range.start); >+ } >+ if (data.editDone) { >+ data.editDone(); >+ } >+ } >+ // >+ >+ //Movement >+ view.setAction("vi" + key + "Left", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("charPrevious", {unit: "character"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, this._msg("viLeft")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "Right", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("charNext", {unit: "character"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, this._msg("viRight")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "Up", function() {//$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("lineUp", {editLine:true}); //$NON-NLS-0$ >+ }, this._msg("viUp")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "Down", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("lineDown", {editLine:true}); //$NON-NLS-0$ >+ }, this._msg("viDown")); //$NON-NLS-0$ >+ >+ //text movement >+ view.setAction("vi" + key + "w", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("wordNext", {unit: "word"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, this._msg("viw")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "b", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("wordPrevious", {unit: "word"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, this._msg("vib")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "W", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("wordNext", {unit: "wordWS"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, this._msg("viW")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "B", function() {//$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("wordPrevious", {unit: "wordWS"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, this._msg("viB")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "e", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("wordNext", {unit: "wordend"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, this._msg("vie")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "E", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("wordNext", {unit: "wordendWS"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, this._msg("viE")); //$NON-NLS-0$ >+ >+ //Lines >+ view.setAction("vi" + key + "$", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke("lineEnd"); //$NON-NLS-0$ >+ }, this._msg("vi$")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "^_", function() {//$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke(function () { >+ var model = view.getModel(); >+ var offset = view.getCaretOffset(); >+ var lineIndex = model.getLineAtOffset(offset); >+ view.setCaretOffset(model.getLineStart(lineIndex) + firstNonBlankChar(lineIndex)); >+ }); >+ }, this._msg("vi^_")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "+", function() { ///$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke(function (data) { >+ var model = view.getModel(); >+ var offset = view.getCaretOffset(); >+ var lastLineCount = model.getLineCount() - 1; >+ var lineIndex = Math.min (model.getLineAtOffset(offset) + data.count, lastLineCount); >+ view.setCaretOffset(model.getLineStart(lineIndex) + firstNonBlankChar(lineIndex)); >+ }, {editLine:true}); >+ }, this._msg("vi+")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "-", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke(function (data) { >+ var model = view.getModel(); >+ var offset = view.getCaretOffset(); >+ var lineIndex = Math.max(model.getLineAtOffset(offset) - data.count, 0); >+ view.setCaretOffset(model.getLineStart(lineIndex) + firstNonBlankChar(lineIndex)); >+ }, {editLine:true}); >+ }, this._msg("vi-")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "|", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke(function (data) { >+ var model = view.getModel(); >+ var offset = view.getCaretOffset(); >+ var lineIndex = model.getLineAtOffset(offset); >+ view.setCaretOffset(Math.min(model.getLineStart(lineIndex) + data.count - 1, model.getLineEnd(lineIndex))); >+ }); >+ }, this._msg("vi|")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "H", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke(function (data) { >+ var topIndex = view.getModel().getLineStart(view.getTopIndex(true) + (data.count - 1)); >+ view.setCaretOffset(topIndex); >+ }, {editLine:true}); >+ }, this._msg("viH")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "M", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke(function (data) { >+ var middleIndex = Math.ceil((view.getBottomIndex(true) - view.getTopIndex(true))/2) + view.getTopIndex(true); >+ view.setCaretOffset(view.getModel().getLineStart(middleIndex)); >+ }, {editLine:true}); >+ }, this._msg("viM")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "L", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._invoke(function (data) { >+ view.setCaretOffset(view.getModel().getLineStart(view.getBottomIndex(true) - (data.count - 1))); >+ }, {editLine:true}); >+ }, this._msg("viL")); //$NON-NLS-0$ >+ >+ //Searches >+ view.setAction("vi" + key + "/", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ var data = {hideAfterFind:true, incremental:false, reverse:false, findCallback: function(range) { >+ self._searchFwd = true; >+ findCallback(range, data); >+ }}; >+ return self._invoke("find", data); //$NON-NLS-0$ >+ }, this._msg("vi/")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "?", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ var data = {hideAfterFind:true, incremental:false, reverse:true, findCallback: function(range) { >+ self._searchFwd = false; >+ findCallback(range, data); >+ }}; >+ return self._invoke("find", data); //$NON-NLS-0$ >+ }, this._msg("vi?")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "n", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ var findAction, start = view.getCaretOffset(); >+ if (self._searchFwd) { >+ findAction = "findNext"; //$NON-NLS-0$ >+ start++; >+ } else { >+ findAction = "findPrevious"; //$NON-NLS-0$ >+ } >+ var data = {start: start, findCallback: function(range) { >+ findCallback(range, data); >+ }}; >+ return self._invoke(findAction, data); >+ }, this._msg("vin")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "N", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ var findAction, start = view.getCaretOffset(); >+ if (!self._searchFwd) { >+ findAction = "findNext"; //$NON-NLS-0$ >+ start++; >+ } else { >+ findAction = "findPrevious"; //$NON-NLS-0$ >+ } >+ var data = {start: start, findCallback: function(range) { >+ findCallback(range, data); >+ }}; >+ return self._invoke(findAction, data); >+ }, this._msg("viN")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "f", function() {//$NON-NLS-1$ //$NON-NLS-0$ >+ var model = view.getModel(); >+ var start = view.getCaretOffset(); >+ return self._findChar(start, model.getLineEnd(model.getLineAtOffset(start)), false, 0); >+ }, this._msg("vif")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "F", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ var model = view.getModel(); >+ var end = view.getCaretOffset(); >+ return self._findChar( model.getLineStart(model.getLineAtOffset(end)), end, true, 0); >+ }, this._msg("viF")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "t", function() {//$NON-NLS-1$ //$NON-NLS-0$ >+ var model = view.getModel(); >+ var start = view.getCaretOffset(); >+ return self._findChar(start, model.getLineEnd(model.getLineAtOffset(start)), false, -1); >+ }, this._msg("vit")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + "T", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ var model = view.getModel(); >+ var end = view.getCaretOffset(); >+ return self._findChar( model.getLineStart(model.getLineAtOffset(end)), end, true, 1); >+ }, this._msg("viT")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + ",", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._findNextChar(self._charTempOptions.reverse); >+ }, this._msg("vi,")); //$NON-NLS-0$ >+ >+ view.setAction("vi" + key + ";", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ return self._findNextChar(!self._charTempOptions.reverse); >+ }, this._msg("vi;")); //$NON-NLS-0$ >+ >+ //Line numbering >+ view.setAction("vi" + key + "G", function() { //$NON-NLS-1$ //$NON-NLS-0$ >+ if (self.number === "") { //$NON-NLS-0$ >+ var model = view.getModel(); >+ if (model.getBaseModel) { >+ model = model.getBaseModel(); >+ } >+ self.number = model.getLineCount(); >+ } >+ return self._invoke(function (data) { >+ data = data || {}; >+ data.line=data.count; >+ data.editLine=true; >+ data.callback = function() { >+ if (data.editDone) { >+ data.editDone(); >+ } >+ }; >+ view.invokeAction("gotoLine", false, data); //$NON-NLS-0$ >+ }); >+ //TODO: this works if gotoLine is registered (not part of textview) - need to handle fail case >+ }, this._msg("viG")); //$NON-NLS-0$ >+ }, >+ _invoke: function(action, data) { >+ var view = this.getView(); >+ data = data || {}; >+ data.count = this._getCount(); >+ if (typeof action === "function") { //$NON-NLS-0$ >+ action(data); >+ } else { >+ view.invokeAction(action, false, data); >+ } >+ return true; >+ }, >+ _getCount: function() { >+ var num = 1; >+ if (this.number !== "") { //$NON-NLS-0$ >+ num = this.number >> 0; >+ } >+ this.number = ""; //$NON-NLS-0$ >+ return num; >+ }, >+ _findChar: function (start, end, reverse, offset) { >+ this._charTempOptions = {}; >+ this._charTempOptions.start = start; >+ this._charTempOptions.end= end; >+ this._charTempOptions.hideAfterFind = true; >+ this._charTempOptions.incremental = false; >+ this._charTempOptions.reverse = reverse; >+ this._charTempOptions.offset = offset; >+ var data = this._charTempOptions; >+ var self = this; >+ this._charTempOptions.findCallback = function(range) { >+ if (range) { >+ self.getView().setCaretOffset(range.start + offset); >+ } >+ if (data.editDone) { >+ data.editDone(); >+ } >+ }; >+ return this._invoke("find", this._charTempOptions); //$NON-NLS-0$ >+ }, >+ _findNextChar: function (forward) { >+ if (this._charTempOptions) { >+ var view = this.getView(); >+ var tempTempOptions = {}; >+ tempTempOptions.hideAfterFind = this._charTempOptions.hideAfterFind; >+ tempTempOptions.incremental = this._charTempOptions.incremental; >+ tempTempOptions.reverse = this._charTempOptions.reverse; >+ tempTempOptions.wrap = false; >+ var data = tempTempOptions; >+ var self = this; >+ tempTempOptions.findCallback = function(range){ >+ if (range) { >+ self.getView().setCaretOffset(range.start + self._charTempOptions.offset); >+ } >+ if (data.editDone) { >+ data.editDone(); >+ } >+ }; >+ var model = view.getModel(); >+ if (forward) { >+ tempTempOptions.start = view.getCaretOffset() + 1 - this._charTempOptions.offset; >+ tempTempOptions.end= model.getLineEnd(model.getLineAtOffset(tempTempOptions.start)); >+ tempTempOptions.reverse = false; >+ return this._invoke("findNext", tempTempOptions); //$NON-NLS-0$ >+ } else { >+ tempTempOptions.start = view.getCaretOffset() - this._charTempOptions.offset; >+ tempTempOptions.end = model.getLineStart(model.getLineAtOffset(tempTempOptions.start)); >+ tempTempOptions.reverse = true; >+ return this._invoke("findPrevious", tempTempOptions); //$NON-NLS-0$ >+ } >+ } >+ return true; >+ }, > _storeNumber: function(index) { >+ var self = this; > if (index === 0 && !this.number) { >- this.getView().invokeAction("lineStart", true); //$NON-NLS-1$ //$NON-NLS-0$ >- this.number = ""; >- return true; >+ return this._invoke(function() { >+ self.getView().invokeAction("lineStart", true); //$NON-NLS-0$) >+ }); > } > this.number += index; > return true; > } > }); > >- > //Status Line Mode >- function StatusLineMode(viMode){ >- mKeyMode.KeyMode.call(this, viMode.getView()); >+ function StatusLineMode(viMode) { >+ var view = viMode.getView(); > this.viMode = viMode; >+ mKeyMode.KeyMode.call(this, view); >+ this._createActions(view); > } > StatusLineMode.prototype = new mKeyMode.KeyMode(); >- >- > mixin(StatusLineMode.prototype, /** @lends orion.editor.viMode.StatusLineMode.prototype */ { > createKeyBindings: function() { >- var KeyBinding = mKeyBinding.KeyBinding; > var bindings = []; >- bindings.push({actionID: "cancel", keyBinding: new KeyBinding(27), predefined: true}); //$NON-NLS-0$ >- this._createActions(); >+ bindings.push({actionID: "cancel", keyBinding: createStroke(27), predefined: true}); //$NON-NLS-0$ > return bindings; > }, >- _createActions: function() { >- var view = this.getView(); >- if (view) { >- var self = this; >- view.setAction("cancel", function() { //$NON-NLS-0$ >- view.removeKeyMode(self); >- view.addKeyMode(self.viMode); >- return true; >- }); >- } >+ _createActions: function(view) { >+ var self = this; >+ view.setAction("cancel", function() { //$NON-NLS-0$ >+ view.removeKeyMode(self); >+ view.addKeyMode(self.viMode); >+ return true; >+ }); > }, > match: function(e) { > var result = mKeyMode.KeyMode.prototype.match.call(this, e); >@@ -94,83 +494,77 @@ > } > }); > >- //Change Mode >- function ChangeMode(viMode, insertMode){ >- NumberMode.call(this, viMode.getView(), "change"); >+ >+ //Edit Mode >+ function EditMode(viMode, nextMode, key, msg) { > this.viMode = viMode; >- this.insertMode = insertMode; >+ this.nextMode = nextMode; >+ NumberMode.call(this, viMode.getView(), key, msg); > } >- ChangeMode.prototype = new NumberMode(); >- >- mixin(ChangeMode.prototype, /** @lends orion.editor.viMode.ChangeMode.prototype */ { >+ >+ EditMode.prototype = new NumberMode(); >+ mixin(EditMode.prototype, /** @lends orion.editor.viMode.EditMode.prototype */ { > createKeyBindings: function() { >- var KeyBinding = mKeyBinding.KeyBinding; > var bindings = NumberMode.prototype.createKeyBindings.call(this); >- >- bindings.push({actionID: "cancel", keyBinding: new KeyBinding(27), predefined: true}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-chng-w", keyBinding: new KeyBinding("w", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-chng-d", keyBinding: new KeyBinding("d", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- this._createActions(); >+ bindings.push({actionID: "cancel", keyBinding: createStroke(27), predefined: true}); //$NON-NLS-0$ >+ bindings.push({actionID: "vi-"+this.key+"-"+this.key, keyBinding: createStroke(this.key, false, false, false, false, "keypress")});//$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ > return bindings; > }, >- _createActions: function() { >+ _invoke: function(action, data) { >+ data = data || {}; > var view = this.getView(); >- if (view) { >- var self = this; >- view.setAction("cancel", function() { //$NON-NLS-0$ >- view.removeKeyMode(self); >- view.addKeyMode(self.viMode); >- return true; >- }); >- >- view.setAction("vi-chng-w", function() { //$NON-NLS-0$ >- var num = 1; >- if (self.firstNumber !== "") { >- num = self.firstNumber >> 0; >- } >- var secondNum = 1; >- if (self.number !== "" ) { >- secondNum = self.number >> 0; >- } >- num *= secondNum; >- view.invokeAction("deleteWordNext", false, {count:num}); //$NON-NLS-1$ //$NON-NLS-0$ >- if (self.command === "c") { >- view.addKeyMode(self.insertMode); >- } else if (self.command === "d") { >- view.addKeyMode(self.viMode); >- } >- view.removeKeyMode(self); >- return true; >- }); >- >- view.setAction("vi-chng-d", function() { //$NON-NLS-0$ >- var num = 1; >- if (self.firstNumber !== "") { >- num = self.firstNumber >> 0; >- } >- var secondNum = 1; >- if (self.number !== "" ) { >- secondNum = self.number >> 0; >- } >- num *= secondNum; >- view.invokeAction("deleteLines", false, {count:num}); //$NON-NLS-1$ //$NON-NLS-0$ >- if (self.command === "d") { >- view.addKeyMode(self.viMode); >- } >- view.removeKeyMode(self); >- return true; >- }); >- } >+ var startOffset = view.getCaretOffset(); >+ var model = view.getModel(); >+ var self = this; >+ data.editDone = function() { >+ var endOffset = view.getCaretOffset(); >+ if (startOffset > endOffset) { >+ var tmp = startOffset; >+ startOffset = endOffset; >+ endOffset = tmp; >+ } >+ if (data.editLine) { >+ startOffset = model.getLineStart(model.getLineAtOffset(startOffset)); >+ endOffset = model.getLineEnd(model.getLineAtOffset(endOffset), self.key === "c" ? false : true); //$NON-NLS-0$ >+ } >+ view.setText("", startOffset, endOffset); >+ view.addKeyMode(self.nextMode); >+ view.removeKeyMode(self); >+ }; >+ NumberMode.prototype._invoke.call(this, action, data); >+ data.editDone(); >+ return true; > }, >- match: function(e) { >- var result = mKeyMode.KeyMode.prototype.match.call(this, e); >- if (!result) { >- result = this.getView().getKeyModes()[0].match(e); >+ _getCount: function() { >+ var num = 1; >+ if (this.firstNumber !== "") { >+ num = this.firstNumber >> 0; > } >- return result; >+ var secondNum = 1; >+ if (this.number !== "" ) { >+ secondNum = this.number >> 0; >+ } >+ num *= secondNum; >+ this.number = this.firstNumber = ""; >+ return num; > }, >- storeCommand: function(command) { >- this.command = command; >+ _createActions: function(view) { >+ NumberMode.prototype._createActions.call(this, view); >+ var self = this; >+ view.setAction("cancel", function() { //$NON-NLS-0$ >+ view.removeKeyMode(self); >+ view.addKeyMode(self.viMode); >+ return true; >+ }); >+ view.setAction("vi-"+self.key+"-"+self.key, function () { //$NON-NLS-1$ //$NON-NLS-0$ >+ switch (self.key) { >+ case "c": //$NON-NLS-0$ >+ case "d": //$NON-NLS-0$ >+ return self._invoke("deleteLines"); //$NON-NLS-0$ >+ case "y": //$NON-NLS-0$ >+ break; >+ } >+ }, {name: util.formatMessage("${0} current line.", this.msg)}); //$NON-NLS-0$ > }, > storeNumber: function(number) { > this.firstNumber = number; >@@ -185,32 +579,28 @@ > } > }); > >- > //Insert Mode >- function InsertMode(viMode){ >- mKeyMode.KeyMode.call(this, viMode.getView()); >+ function InsertMode(viMode) { >+ var view = viMode.getView(); >+ mKeyMode.KeyMode.call(this, view); > this.viMode = viMode; >+ this._createActions(view); > } > InsertMode.prototype = new mKeyMode.KeyMode(); > > mixin(InsertMode.prototype, /** @lends orion.editor.viMode.InsertMode.prototype */ { > createKeyBindings: function() { >- var KeyBinding = mKeyBinding.KeyBinding; > var bindings = []; >- bindings.push({actionID: "cancel", keyBinding: new KeyBinding(27), predefined: true}); //$NON-NLS-0$ >- this._createActions(); >+ bindings.push({actionID: "cancel", keyBinding: createStroke(27), predefined: true}); //$NON-NLS-0$ > return bindings; > }, >- _createActions: function() { >- var view = this.getView(); >- if (view) { >- var self = this; >- view.setAction("cancel", function() { //$NON-NLS-0$ >- view.removeKeyMode(self); >- view.addKeyMode(self.viMode); >- return true; >- }); >- } >+ _createActions: function(view) { >+ var self = this; >+ view.setAction("cancel", function() { //$NON-NLS-0$ >+ view.removeKeyMode(self); >+ view.addKeyMode(self.viMode); >+ return true; >+ }); > }, > match: function(e) { > var result = mKeyMode.KeyMode.prototype.match.call(this, e); >@@ -224,135 +614,207 @@ > }); > > function VIMode(textView, statusReporter){ >- NumberMode.call(this, textView, "vi"); >+ NumberMode.call(this, textView, "", "(Move)"); //$NON-NLS-0$ > this.insertMode = new InsertMode(this); >- this.changeMode = new ChangeMode(this, this.insertMode); >+ this.changeMode = new EditMode(this, this.insertMode, "c", "(Change)"); //$NON-NLS-1$ //$NON-NLS-0$ >+ this.deleteMode = new EditMode(this, this, "d", "(Delete)"); //$NON-NLS-1$ //$NON-NLS-0$ > this.statusReporter = statusReporter; > } > VIMode.prototype = new NumberMode(); > mixin(VIMode.prototype, /** @lends orion.editor.viMode.VIMode.prototype */ { > createKeyBindings: function() { >- var KeyBinding = mKeyBinding.KeyBinding; > var bindings = NumberMode.prototype.createKeyBindings.call(this); >- >- //Movement >- //left >- bindings.push({actionID: "vi-Left", keyBinding: new KeyBinding("h", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-Left", keyBinding: new KeyBinding("h", true, false, false, false)}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-Left", keyBinding: new KeyBinding(8)}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-Left", keyBinding: new KeyBinding(37)}); //$NON-NLS-0$ >- >- //down >- bindings.push({actionID: "vi-Down", keyBinding: new KeyBinding("j", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-Down", keyBinding: new KeyBinding(40)}); //$NON-NLS-0$ >- >- //up >- bindings.push({actionID: "vi-Up", keyBinding: new KeyBinding("k", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-Up", keyBinding: new KeyBinding(38)}); //$NON-NLS-0$ >- >- //right >- bindings.push({actionID: "vi-Right", keyBinding: new KeyBinding("l", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-Right", keyBinding: new KeyBinding(39)}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-Right", keyBinding: new KeyBinding(32)}); //$NON-NLS-0$ >- >- //text movement >- bindings.push({actionID: "vi-w", keyBinding: new KeyBinding("w", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-b", keyBinding: new KeyBinding("b", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- //TODO: add >- bindings.push({actionID: "vi-W", keyBinding: new KeyBinding("W", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- //TODO: add >- bindings.push({actionID: "vi-B", keyBinding: new KeyBinding("B", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- //TODO: >- bindings.push({actionID: "vi-e", keyBinding: new KeyBinding("e", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-E", keyBinding: new KeyBinding("E", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- //bindings.push({actionID: "vi-)", keyBinding: new KeyBinding(")", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- //bindings.push({actionID: "vi-(", keyBinding: new KeyBinding("(", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- //bindings.push({actionID: "vi-}", keyBinding: new KeyBinding("}", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- //bindings.push({actionID: "vi-{", keyBinding: new KeyBinding("{", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- //bindings.push({actionID: "vi-]]", keyBinding: new KeyBinding("]]", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- //bindings.push({actionID: "vi-[[", keyBinding: new KeyBinding("[[", false, false, false, false, "keypress")}); //$NON-NLS-0$ > >- //Lines >- bindings.push({actionID: "vi-$", keyBinding: new KeyBinding("$", false, false, false, false, "keypress")}); //$NON-NLS-0$ >+ bindings.push({actionID: "vi-ctrl-f", keyBinding: createStroke("f", true)}); //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-ctrl-b", keyBinding: createStroke("b", true)}); //$NON-NLS-1$ //$NON-NLS-0$ > >- bindings.push({actionID: "vi-^_", keyBinding: new KeyBinding("^", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-^_", keyBinding: new KeyBinding("_", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- >- bindings.push({actionID: "vi-+", keyBinding: new KeyBinding("+", false, false, false, false, "keypress")}); >- bindings.push({actionID: "vi-+", keyBinding: new KeyBinding(13)}); >- bindings.push({actionID: "vi--", keyBinding: new KeyBinding("-", false, false, false, false, "keypress")}); >- bindings.push({actionID: "vi-|", keyBinding: new KeyBinding("|", false, false, false, false, "keypress")}); >- >- bindings.push({actionID: "vi-H", keyBinding: new KeyBinding("H", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-M", keyBinding: new KeyBinding("M", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-L", keyBinding: new KeyBinding("L", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- >- //Screens >- >- //Searches >- bindings.push({actionID: "vi-/", keyBinding: new KeyBinding("/", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-?", keyBinding: new KeyBinding("?", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-n", keyBinding: new KeyBinding("n", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-N", keyBinding: new KeyBinding("N", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-f", keyBinding: new KeyBinding("f", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-F", keyBinding: new KeyBinding("F", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-,", keyBinding: new KeyBinding(",", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-;", keyBinding: new KeyBinding(";", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- >- //Line numbering >- bindings.push({actionID: "vi-goToLine", keyBinding: new KeyBinding("G", false, false, false, false, "keypress")}); //$NON-NLS-0$ >- >+ bindings.push({actionID: "vi-ctrl-e", keyBinding: createStroke("e", true)}); //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-ctrl-y", keyBinding: createStroke("y", true)}); //$NON-NLS-1$ //$NON-NLS-0$ >+ > //Status Line mode >- bindings.push({actionID: "statusLineMode", keyBinding: new KeyBinding(":", false, false, false, false, "keypress")}); //$NON-NLS-0$ >+ bindings.push({actionID: "statusLineMode", keyBinding: createStroke(":", false, false, false, false, "keypress")}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ > > > //Insert >- bindings.push({actionID: "vi-a", keyBinding: new KeyBinding("a", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-A", keyBinding: new KeyBinding("A", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >+ bindings.push({actionID: "vi-a", keyBinding: createStroke("a", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-A", keyBinding: createStroke("A", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ > >- bindings.push({actionID: "vi-i", keyBinding: new KeyBinding("i", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-I", keyBinding: new KeyBinding("I", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >+ bindings.push({actionID: "vi-i", keyBinding: createStroke("i", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-I", keyBinding: createStroke("I", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ > >- bindings.push({actionID: "vi-o", keyBinding: new KeyBinding("o", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-O", keyBinding: new KeyBinding("O", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >+ bindings.push({actionID: "vi-o", keyBinding: createStroke("o", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-O", keyBinding: createStroke("O", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ > >- bindings.push({actionID: "vi-R", keyBinding: new KeyBinding("R", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-s", keyBinding: new KeyBinding("s", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-S", keyBinding: new KeyBinding("S", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >+ bindings.push({actionID: "vi-R", keyBinding: createStroke("R", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-s", keyBinding: createStroke("s", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-S", keyBinding: createStroke("S", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ > > //Change >- bindings.push({actionID: "vi-c", keyBinding: new KeyBinding("c", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-d", keyBinding: new KeyBinding("d", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >- bindings.push({actionID: "vi-~", keyBinding: new KeyBinding("~", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-0$ >+ bindings.push({actionID: "vi-c", keyBinding: createStroke("c", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-d", keyBinding: createStroke("d", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-~", keyBinding: createStroke("~", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ bindings.push({actionID: "vi-x", keyBinding: createStroke("x", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-X", keyBinding: createStroke("X", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ > >- //Create actions >- this._createActions(this.getView()); >+ bindings.push({actionID: "vi-C", keyBinding: createStroke("C", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-D", keyBinding: createStroke("D", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ > > return bindings; > }, >- _findNextChar: function (forward) { >- var num = this.number >> 0 || 1; >- if (this._charTempOptions) { >- var view = this.getView(); >- var tempTempOptions = {}; >- tempTempOptions.count = num; >- tempTempOptions.hideAfterFind = this._charTempOptions.hideAfterFind; >- tempTempOptions.incremental = this._charTempOptions.incremental; >- tempTempOptions.reverse = this._charTempOptions.reverse; >- tempTempOptions.wrap = false; >- var model = view.getModel(); >- if (forward) { >- tempTempOptions.start = view.getCaretOffset() + 1; >- tempTempOptions.end= model.getLineEnd(model.getLineAtOffset(tempTempOptions.start)); >- tempTempOptions.reverse = false; >- view.invokeAction("findNext", false, tempTempOptions); //$NON-NLS-0$ >- } else { >- tempTempOptions.start = view.getCaretOffset() - 1; >- tempTempOptions.end = model.getLineStart(model.getLineAtOffset(tempTempOptions.start)); >- tempTempOptions.reverse = true; >- view.invokeAction("findPrevious", false, tempTempOptions); //$NON-NLS-0$ >+ getKeyBindings: function (actionID) { >+ var result = mKeyMode.KeyMode.prototype.getKeyBindings.call(this, actionID); >+ result = result || []; >+ var keyBindings = this.changeMode.getKeyBindings(actionID); >+ var i; >+ if (!this.changeMode.isActive()) { >+ for (i=0; i<keyBindings.length; i++) { >+ keyBindings[i] = createSequence([createStroke("c", false, false, false, false, "keypress"), keyBindings[i]]); //$NON-NLS-1$ //$NON-NLS-0$ >+ > } > } >+ result = result.concat(keyBindings); >+ keyBindings = this.deleteMode.getKeyBindings(actionID); >+ if (!this.deleteMode.isActive()) { >+ for (i=0; i<keyBindings.length; i++) { >+ keyBindings[i] = createSequence([createStroke("d", false, false, false, false, "keypress"), keyBindings[i]]); //$NON-NLS-1$ //$NON-NLS-0$ >+ >+ } >+ } >+ result = result.concat(keyBindings); >+ return result; >+ }, >+// isStatusActive: function() { >+// return this.isActive(); >+// }, >+ match: function(e) { >+ var result = mKeyMode.KeyMode.prototype.match.call(this, e); >+ if (!result && e.type === "keypress") { //$NON-NLS-0$ >+ result = "noop"; //$NON-NLS-0$ >+ } >+ return result; >+ }, >+ _createActions: function(view) { >+ NumberMode.prototype._createActions.call(this, view); >+ >+ var self = this; >+ >+ view.setAction("vi-ctrl-f", function() { //$NON-NLS-0$ >+ return self._invoke("pageDown"); //$NON-NLS-0$ >+ }, {name: messages.pageDown}); >+ >+ view.setAction("vi-ctrl-b", function() { //$NON-NLS-0$ >+ return self._invoke("pageUp"); //$NON-NLS-0$ >+ }, {name: messages.pageUp}); >+ >+ view.setAction("vi-ctrl-e", function() { //$NON-NLS-0$ >+ return self._invoke("scrollLineDown"); //$NON-NLS-0$ >+ }, {name: messages.scrollLineDown}); >+ >+ view.setAction("vi-ctrl-y", function() { //$NON-NLS-0$ >+ return self._invoke("scrollLineUp"); //$NON-NLS-0$ >+ }, {name: messages.scrollLineUp}); >+ >+ //Insert >+ view.setAction("vi-a", function() { //$NON-NLS-0$ >+ return self._toInsertMode("charNext"); //$NON-NLS-0$ >+ }, {name: messages.via}); >+ >+ view.setAction("vi-A", function() { //$NON-NLS-0$ >+ return self._toInsertMode("lineEnd"); //$NON-NLS-0$ >+ }, {name: messages.viA}); >+ >+ view.setAction("vi-i", function() { //$NON-NLS-0$ >+ return self._toInsertMode("noop"); //$NON-NLS-0$ >+ }, {name: messages.vii}); >+ >+ view.setAction("vi-I", function() { //$NON-NLS-0$ >+ return self._toInsertMode("lineStart"); //$NON-NLS-0$ >+ }, {name: messages.viI}); >+ >+ view.setAction("vi-O", function() { //$NON-NLS-0$ >+ return self._toInsertMode("enter", {insert:"above"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, {name: messages.viO}); >+ >+ view.setAction("vi-o", function() { //$NON-NLS-0$ >+ return self._toInsertMode("enter", {insert:"below"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, {name: messages.vio}); >+ >+ view.setAction("vi-R", function() { //$NON-NLS-0$ >+ return self._toInsertMode("toggleOverwriteMode"); //$NON-NLS-0$ >+ }, {name: messages.viR}); >+ >+ view.setAction("vi-s", function() { //$NON-NLS-0$ >+ return self._toInsertMode("deleteNext", {unit: "char"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, {name: messages.vis}); >+ >+ view.setAction("vi-S", function() { //$NON-NLS-0$ >+ return self._toInsertMode("deleteLines", {unit: "line"}); //$NON-NLS-1$ //$NON-NLS-0$ >+ }, {name: messages.viS}); >+ >+ //Change actions >+ view.setAction("vi-c", function() { //$NON-NLS-0$ >+ self.changeMode.storeNumber(self.number); >+ view.addKeyMode(self.changeMode); >+ view.removeKeyMode(self); >+ self.number = ""; >+ return true; >+ }); >+ >+ view.setAction("vi-d", function() { //$NON-NLS-0$ >+ self.deleteMode.storeNumber(self.number); >+ view.addKeyMode(self.deleteMode); >+ view.removeKeyMode(self); >+ self.number = ""; >+ return true; >+ }); >+ >+ view.setAction("vi-~", function() { //$NON-NLS-0$ >+ return self._invoke("reversecase"); //$NON-NLS-0$ >+ }, {name: messages.reversecase}); >+ >+ view.setAction("vi-x", function() { //$NON-NLS-0$ >+ return self._invoke("deleteNext"); //$NON-NLS-0$ >+ }, {name: messages.deleteNext}); >+ >+ view.setAction("vi-X", function() { //$NON-NLS-0$ >+ return self._invoke("deletePrevious"); //$NON-NLS-0$ >+ }, {name: messages.deletePrevious}); >+ >+ view.setAction("vi-C", function() { //$NON-NLS-0$ >+ return self._toInsertMode("deleteLineEnd"); //$NON-NLS-0$ >+ }, {name: messages.viC}); >+ >+ view.setAction("vi-D", function() { //$NON-NLS-0$ >+ return self._invoke("deleteLineEnd"); //$NON-NLS-0$ >+ }, {name: messages.deleteLineEnd}); >+ >+// Status Line Mode >+// view.setAction("statusLineMode", function() { //$NON-NLS-0$ >+// self.insertMode.storeNumber(self.number); >+// view.addKeyMode(self.insertMode); >+// view.removeKeyMode(self); >+// self.number = ""; >+// return true; >+// }); >+ }, >+ _reportStatus: function(msg) { >+ if (this.statusReporter) { >+ this.statusReporter(msg); >+ } >+ }, >+ _toInsertMode: function(action, data) { >+ data = data || {}; >+ var num = 1; >+ if (this.number !== "") { >+ num = this.number >> 0; >+ } >+ data.count = num; >+ var view = this.getView(); >+ this.insertMode.storeNumber(this.number); >+ view.invokeAction(action, false, data); >+ view.addKeyMode(this.insertMode); >+ view.removeKeyMode(this); > this.number = ""; > return true; > }, >@@ -361,395 +823,7 @@ > }, > _modeRemoved: function() { > this.getView().setOptions({blockCursorVisible: false}); >- }, >- _findChar: function (start, end, reverse) { >- var num = this.number >> 0 || 1; >- this._charTempOptions = {}; >- this._charTempOptions.start = start; >- this._charTempOptions.end= end; >- this._charTempOptions.count = num; >- this._charTempOptions.hideAfterFind = true; >- this._charTempOptions.incremental = false; >- this._charTempOptions.reverse = reverse; >- this.getView().invokeAction("find", false, this._charTempOptions); //$NON-NLS-0$ >- this.number = ""; >- return true; >- }, >- _createActions: function() { >- var view = this.getView(); >- >- //Utility >- function firstNonBlankChar(lineIndex) { >- var model = view.getModel(); >- var lineText = model.getLine(lineIndex); >- var offsetInLine = 0; >- var c = lineText.charCodeAt(offsetInLine); >- while (c === 32 || c === 9) { >- offsetInLine++; >- c = lineText.charCodeAt(offsetInLine); >- } >- return offsetInLine; >- } >- // >- >- if (view) { >- var self = this; >- //Movement >- view.setAction("vi-Left", function() { //$NON-NLS-0$ >- var result = view.invokeAction("charPrevious", true, {count:self.number >> 0, unit: "character"}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- view.setAction("vi-Right", function() { //$NON-NLS-0$ >- var result = view.invokeAction("charNext", true, {count:self.number >> 0, unit: "character"}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- view.setAction("vi-Up", function() { //$NON-NLS-0$ >- var result = view.invokeAction("lineUp", true, {count:self.number >> 0}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- view.setAction("vi-Down", function() { //$NON-NLS-0$ >- var result = view.invokeAction("lineDown", true, {count:self.number >> 0}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- //text movement >- view.setAction("vi-w", function() { //$NON-NLS-0$ >- var result = view.invokeAction("wordNext", true, {count:self.number >> 0, unit: "word"}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- view.setAction("vi-b", function() { //$NON-NLS-0$ >- var result = view.invokeAction("wordPrevious", true, {count:self.number >> 0, unit: "word"}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- view.setAction("vi-W", function() { //$NON-NLS-0$ >- var result = view.invokeAction("wordNext", true, {count:self.number >> 0, unit: "wordWS"}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- view.setAction("vi-B", function() { //$NON-NLS-0$ >- var result = view.invokeAction("wordPrevious", true, {count:self.number >> 0, unit: "wordWS"}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- view.setAction("vi-e", function() { //$NON-NLS-0$ >- var result = view.invokeAction("wordNext", true, {count:self.number >> 0, unit: "wordend"}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- view.setAction("vi-E", function() { //$NON-NLS-0$ >- var result = view.invokeAction("wordNext", true, {count:self.number >> 0, unit: "wordendWS"}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- //Lines >- view.setAction("vi-0", function() { //$NON-NLS-0$ >- var result = view.invokeAction("lineStart", true); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- view.setAction("vi-$", function() { //$NON-NLS-0$ >- var result = view.invokeAction("lineEnd", true); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- view.setAction("vi-^_", function() { //$NON-NLS-0$ >- var model = view.getModel(); >- var offset = view.getCaretOffset(); >- var lineIndex = model.getLineAtOffset(offset); >- view.setCaretOffset(model.getLineStart(lineIndex) + firstNonBlankChar(lineIndex)); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-+", function() { //$NON-NLS-0$ >- var num = 0; >- if (self.number !== "") { >- num = self.number >> 0; >- } >- var model = view.getModel(); >- var offset = view.getCaretOffset(); >- var lastLineCount = model.getLineCount() - 1; >- var lineIndex = Math.min (model.getLineAtOffset(offset) + 1 + num, lastLineCount); >- view.setCaretOffset(model.getLineStart(lineIndex) + firstNonBlankChar(lineIndex)); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi--", function() { //$NON-NLS-0$ >- var num = 0; >- if (self.number !== "") { >- num = self.number >> 0; >- } >- var model = view.getModel(); >- var offset = view.getCaretOffset(); >- var lineIndex = Math.max(model.getLineAtOffset(offset) - 1 - num, 0); >- view.setCaretOffset(model.getLineStart(lineIndex) + firstNonBlankChar(lineIndex)); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-|", function() { //$NON-NLS-0$ >- var num = 0; >- if (self.number !== "") { >- num = self.number >> 0; >- } >- var model = view.getModel(); >- var offset = view.getCaretOffset(); >- var lineIndex = model.getLineAtOffset(offset); >- view.setCaretOffset(Math.min(model.getLineStart(lineIndex) + num - 1, model.getLineEnd(lineIndex))); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-H", function() { //$NON-NLS-0$ >- var num = 0; >- if (self.number !== "") { >- num = self.number >> 0; >- } >- var topIndex = view.getModel().getLineStart(view.getTopIndex(true) + num); >- view.setCaretOffset(topIndex); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-M", function() { //$NON-NLS-0$ >- var middleIndex = Math.ceil((view.getBottomIndex(true) - view.getTopIndex(true))/2) + view.getTopIndex(true); >- view.setCaretOffset(view.getModel().getLineStart(middleIndex)); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-L", function() { //$NON-NLS-0$ >- var num = 0; >- if (self.number !== "") { >- num = self.number >> 0; >- } >- view.setCaretOffset(view.getModel().getLineStart(view.getBottomIndex(true) - num)); >- self.number = ""; >- return true; >- }); >- >- //Searches >- view.setAction("vi-/", function() { //$NON-NLS-0$ >- var num = 0; >- if (self.number !== "") { >- num = self.number >> 0; >- } >- view.invokeAction("find", false, {hideAfterFind:true, incremental:false, reverse:false}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-?", function() { //$NON-NLS-0$ >- var num = 0; >- if (self.number !== "") { >- num = self.number >> 0; >- } >- view.invokeAction("find", false, {hideAfterFind:true, incremental:false, reverse:true}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-n", function() { //$NON-NLS-0$ >- var num = self.number >> 0 || 1; >- view.invokeAction("findNext", false, {count:num}); //$NON-NLS-0$ >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-N", function() { //$NON-NLS-0$ >- var num = self.number >> 0 || 1; >- view.invokeAction("findPrevious", false, {count:num}); //$NON-NLS-0$ >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-f", function() { //$NON-NLS-0$ >- var model = view.getModel(); >- var start = view.getCaretOffset(); >- return self._findChar(start, model.getLineEnd(model.getLineAtOffset(start)), false); >- }); >- >- view.setAction("vi-F", function() { //$NON-NLS-0$ >- var model = view.getModel(); >- var end = view.getCaretOffset(); >- return self._findChar( model.getLineStart(model.getLineAtOffset(end)), end, true); >- }); >- >- >- view.setAction("vi-,", function() { //$NON-NLS-0$ >- return self._findNextChar(self._charTempOptions.reverse); >- }); >- >- view.setAction("vi-;", function() { //$NON-NLS-0$ >- return self._findNextChar(!self._charTempOptions.reverse); >- }); >- >- //Line numbering >- view.setAction("vi-goToLine", function() { //$NON-NLS-0$ >- if (self.statusReporter) { >- self.statusReporter("Go to Line!"); >- } >- if (self.number === "") { >- var model = view.getModel(); >- if (model.getBaseModel) { >- model = model.getBaseModel(); >- } >- self.number = model.getLineCount(); >- } >- var result = view.invokeAction("gotoLine", false, {line:self.number >> 0}); //$NON-NLS-1$ //$NON-NLS-0$ >- //TODO: this works if gotoLine is registered (not part of textview) - need to handle fail case >- self.number = ""; >- return result; >- }); >- >- //Insert >- view.setAction("vi-a", function() { //$NON-NLS-0$ >- self.insertMode.storeNumber(self.number); >- view.invokeAction("charNext", true); //$NON-NLS-0$ >- view.addKeyMode(self.insertMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-A", function() { //$NON-NLS-0$ >- self.insertMode.storeNumber(self.number); >- view.invokeAction("lineEnd", true); //$NON-NLS-0$ >- view.addKeyMode(self.insertMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-i", function() { //$NON-NLS-0$ >- self.insertMode.storeNumber(self.number); >- view.addKeyMode(self.insertMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-I", function() { //$NON-NLS-0$ >- self.insertMode.storeNumber(self.number); >- view.invokeAction("lineStart", true); //$NON-NLS-0$ >- view.addKeyMode(self.insertMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-O", function() { //$NON-NLS-0$ >- self.insertMode.storeNumber(self.number); >- view.invokeAction("enter", false, {insert:"above"}); //$NON-NLS-1$ //$NON-NLS-0$ >- view.addKeyMode(self.insertMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-o", function() { //$NON-NLS-0$ >- self.insertMode.storeNumber(self.number); >- view.invokeAction("enter", false, {insert:"below"}); //$NON-NLS-1$ //$NON-NLS-0$ >- view.addKeyMode(self.insertMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-R", function() { //$NON-NLS-0$ >- self.insertMode.storeNumber(self.number); >- self.insertMode._overwriteModeEnabled = true; >- view.invokeAction("toggleOverwriteMode", true); //$NON-NLS-0$ >- view.addKeyMode(self.insertMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-s", function() { //$NON-NLS-0$ >- self.insertMode.storeNumber(self.number); >- view.invokeAction("deleteNext", false); //$NON-NLS-1$ //$NON-NLS-0$ >- view.addKeyMode(self.insertMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-S", function() { //$NON-NLS-0$ >- var num = self.number >> 0 || 1; >- view.invokeAction("deleteLines", false, {unit: "line", count:num}); //$NON-NLS-1$ //$NON-NLS-0$ >- view.addKeyMode(self.insertMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- //Change actions >- view.setAction("vi-c", function() { //$NON-NLS-0$ >- self.changeMode.storeNumber(self.number); >- self.changeMode.storeCommand("c"); >- view.addKeyMode(self.changeMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-d", function() { //$NON-NLS-0$ >- self.changeMode.storeNumber(self.number); >- self.changeMode.storeCommand("d"); >- view.addKeyMode(self.changeMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- view.setAction("vi-~", function() { //$NON-NLS-0$ >- var num = self.number >> 0 || 1; >- var result = view.invokeAction("reversecase", false, {count:num}); //$NON-NLS-1$ //$NON-NLS-0$ >- self.number = ""; >- return result; >- }); >- >- //Status Line Mode >- view.setAction("statusLineMode", function() { //$NON-NLS-0$ >- self.insertMode.storeNumber(self.number); >- view.addKeyMode(self.insertMode); >- view.removeKeyMode(self); >- self.number = ""; >- return true; >- }); >- >- >- } >- }, >- match: function(e) { >- var result = mKeyMode.KeyMode.prototype.match.call(this, e); >- if (!result && e.type === "keypress") { >- result = "noop"; >- } >- return result; > } >-// isStatusActive: function() { >-// return this.isActive(); >-// } > }); > > return { >diff --git a/bundles/org.eclipse.orion.client.ui/web/orion/editorCommands.js b/bundles/org.eclipse.orion.client.ui/web/orion/editorCommands.js >index be5b3d2..624daab 100644 >--- a/bundles/org.eclipse.orion.client.ui/web/orion/editorCommands.js >+++ b/bundles/org.eclipse.orion.client.ui/web/orion/editorCommands.js >@@ -213,7 +213,7 @@ > // override the editor binding > editor.getTextView().setAction("gotoLine", function (data) { //$NON-NLS-0$ > if (data) { >- editor.onGotoLine(data.line - 1, 0); >+ editor.onGotoLine(data.line - 1, 0, undefined, data.callback); > return true; > } > self.commandService.runCommand("orion.gotoLine"); //$NON-NLS-0$
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 411183
: 232573 |
232607