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 232607 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.
Support for yank/paste
file_411183.txt (text/plain), 10.55 KB, created by
Bogdan Gheorghe
on 2013-06-20 13:32:02 EDT
(
hide
)
Description:
Support for yank/paste
Filename:
MIME Type:
Creator:
Bogdan Gheorghe
Created:
2013-06-20 13:32:02 EDT
Size:
10.55 KB
patch
obsolete
>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 778e58e..4097729 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 >@@ -136,6 +136,10 @@ > > //vi > "vi": "vi", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vimove": "(Move)", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viyank": "(Yank)", //$NON-NLS-1$ //$NON-NLS-0$ >+ "videlete": "(Delete)", //$NON-NLS-1$ //$NON-NLS-0$ >+ "vichange": "(Change)", //$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$ >@@ -165,17 +169,19 @@ > "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$ >+ "viycd": "${0} Current 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$ >+ "vip": "Paste After Char or Line", //$NON-NLS-1$ //$NON-NLS-0$ >+ "viP": "Paste Before Char or Line", //$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$ >diff --git a/bundles/org.eclipse.orion.client.editor/web/orion/editor/textView.js b/bundles/org.eclipse.orion.client.editor/web/orion/editor/textView.js >index 705ac06..786632c 100644 >--- a/bundles/org.eclipse.orion.client.editor/web/orion/editor/textView.js >+++ b/bundles/org.eclipse.orion.client.editor/web/orion/editor/textView.js >@@ -4015,6 +4015,9 @@ > } > line.destroy(); > } else { >+ if (args.count && args.count > 0) { >+ lineIndex = Math.min (lineIndex + args.count - 1, model.getLineCount() - 1); >+ } > offset = model.getLineEnd(lineIndex); > } > selection.extend(offset); >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 fe07a2e..5820cb0 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 >@@ -7,6 +7,8 @@ > "orion/util" //$NON-NLS-0$ > ], function (messages, mKeyMode, mKeyBinding, util) { > >+ var yankText, yankEditLine; >+ > function mixin(object, proto) { > for (var p in proto) { > if (proto.hasOwnProperty(p)) { >@@ -513,7 +515,8 @@ > _invoke: function(action, data) { > data = data || {}; > var view = this.getView(); >- var startOffset = view.getCaretOffset(); >+ var caretOffset = view.getCaretOffset(); >+ var startOffset = caretOffset; > var model = view.getModel(); > var self = this; > data.editDone = function() { >@@ -527,7 +530,13 @@ > startOffset = model.getLineStart(model.getLineAtOffset(startOffset)); > endOffset = model.getLineEnd(model.getLineAtOffset(endOffset), self.key === "c" ? false : true); //$NON-NLS-0$ > } >- view.setText("", startOffset, endOffset); >+ if (self.key === "y") { //$NON-NLS-0$ >+ yankText = view.getText(startOffset, endOffset); >+ yankEditLine = data.editLine; >+ view.setCaretOffset(caretOffset); >+ } else { >+ view.setText("", startOffset, endOffset); >+ } > view.removeKeyMode(self); > view.addKeyMode(self.nextMode); > }; >@@ -557,14 +566,8 @@ > 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$ >+ return self._invoke("lineEnd", {editLine:true}); //$NON-NLS-0$ >+ }, this._msg("viycd")); //$NON-NLS-0$ > }, > storeNumber: function(number) { > this.firstNumber = number; >@@ -614,10 +617,11 @@ > }); > > function VIMode(textView, statusReporter){ >- NumberMode.call(this, textView, "", "(Move)"); //$NON-NLS-0$ >+ NumberMode.call(this, textView, "", messages.vimove); > this.insertMode = new InsertMode(this); >- 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.changeMode = new EditMode(this, this.insertMode, "c", messages.vichange); //$NON-NLS-0$ >+ this.deleteMode = new EditMode(this, this, "d", messages.videlete); //$NON-NLS-0$ >+ this.yankMode = new EditMode(this, this, "y", messages.viyank); //$NON-NLS-0$ > this.statusReporter = statusReporter; > } > VIMode.prototype = new NumberMode(); >@@ -649,9 +653,14 @@ > 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$ > >+ //Paste >+ bindings.push({actionID: "vi-p", keyBinding: createStroke("p", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ bindings.push({actionID: "vi-P", keyBinding: createStroke("P", false, false, false, false, "keypress"), predefined: true}); //$NON-NLS-2$ //$NON-NLS-1$ //$NON-NLS-0$ >+ > //Change > 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-y", keyBinding: createStroke("y", 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$ >@@ -678,6 +687,14 @@ > 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); >+ keyBindings = this.yankMode.getKeyBindings(actionID); >+ if (!this.yankMode.isActive()) { >+ for (i=0; i<keyBindings.length; i++) { >+ keyBindings[i] = createSequence([createStroke("y", false, false, false, false, "keypress"), keyBindings[i]]); //$NON-NLS-1$ //$NON-NLS-0$ > > } > } >@@ -752,19 +769,61 @@ > return self._toInsertMode("deleteLines", {unit: "line"}); //$NON-NLS-1$ //$NON-NLS-0$ > }, {name: messages.viS}); > >+ //Paste >+ view.setAction("vi-p", function() { //$NON-NLS-0$ >+ return self._invoke(function() { >+ var view = self.getView(); >+ var selection = view.getSelection(); >+ if (selection.start === selection.end) { >+ var model = view.getModel(); >+ var caretOffset = view.getCaretOffset(); >+ if (yankEditLine) { >+ selection.start = selection.end = model.getLineEnd(model.getLineAtOffset(caretOffset), true); >+ } else { >+ selection.start++; >+ selection.end++; >+ } >+ } >+ view.setText(yankText, selection.start, selection.end); >+ }); >+ }, {name: messages.vip}); >+ >+ view.setAction("vi-P", function() { //$NON-NLS-0$ >+ return self._invoke(function() { >+ var view = self.getView(); >+ var selection = view.getSelection(); >+ if (selection.start === selection.end) { >+ var model = view.getModel(); >+ var caretOffset = view.getCaretOffset(); >+ if (yankEditLine) { >+ selection.start = selection.end = model.getLineStart(model.getLineAtOffset(caretOffset)); >+ } >+ } >+ view.setText(yankText, selection.start, selection.end); >+ }); >+ }, {name: messages.viP}); >+ > //Change actions > view.setAction("vi-c", function() { //$NON-NLS-0$ >- self.changeMode.storeNumber(self.number); > view.removeKeyMode(self); > view.addKeyMode(self.changeMode); >+ self.changeMode.storeNumber(self.number); > self.number = ""; > return true; > }); > > view.setAction("vi-d", function() { //$NON-NLS-0$ >- self.deleteMode.storeNumber(self.number); > view.removeKeyMode(self); > view.addKeyMode(self.deleteMode); >+ self.deleteMode.storeNumber(self.number); >+ self.number = ""; >+ return true; >+ }); >+ >+ view.setAction("vi-y", function() { //$NON-NLS-0$ >+ view.removeKeyMode(self); >+ view.addKeyMode(self.yankMode); >+ self.yankMode.storeNumber(self.number); > self.number = ""; > return true; > }); >@@ -831,7 +890,6 @@ > }); > > return { >- VIMode: VIMode, >- InsertMode: InsertMode >+ VIMode: VIMode > }; > }); >\ No newline at end of file
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