fixing emacs multiselect cut/copy/paste
This commit is contained in:
parent
e97d7609b9
commit
a7cccae039
2 changed files with 46 additions and 34 deletions
|
|
@ -367,28 +367,32 @@ exports.handler.addCommands({
|
||||||
selectRectangularRegion: function(editor) {
|
selectRectangularRegion: function(editor) {
|
||||||
editor.multiSelect.toggleBlockSelection();
|
editor.multiSelect.toggleBlockSelection();
|
||||||
},
|
},
|
||||||
setMark: function(editor) {
|
setMark: {
|
||||||
// Emulate emacs highlighting behaviour in transient-mark-mode.
|
exec: function(editor) {
|
||||||
// Sets mark-mode and clears current selection.
|
// Emulate emacs highlighting behaviour in transient-mark-mode.
|
||||||
// When mark is set, keyboard cursor movement commands become
|
// Sets mark-mode and clears current selection.
|
||||||
// selection modification commands. That is,
|
// When mark is set, keyboard cursor movement commands become
|
||||||
// "goto" commands become "select" commands.
|
// selection modification commands. That is,
|
||||||
// Any insertion or mouse click resets mark-mode.
|
// "goto" commands become "select" commands.
|
||||||
// setMark twice in a row at the same place resets markmode
|
// Any insertion or mouse click resets mark-mode.
|
||||||
var markMode = editor.emacsMarkMode();
|
// setMark twice in a row at the same place resets markmode
|
||||||
if (markMode) {
|
var markMode = editor.emacsMarkMode();
|
||||||
var cp = editor.getCursorPosition();
|
if (markMode) {
|
||||||
if (editor.selection.isEmpty() &&
|
var cp = editor.getCursorPosition();
|
||||||
markMode.row == cp.row && markMode.column == cp.column) {
|
if (editor.selection.isEmpty() &&
|
||||||
editor.setEmacsMarkMode(null);
|
markMode.row == cp.row && markMode.column == cp.column) {
|
||||||
// console.log("Mark mode off");
|
editor.setEmacsMarkMode(null);
|
||||||
return;
|
// console.log("Mark mode off");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
// turn on mark mode
|
||||||
// turn on mark mode
|
markMode = editor.getCursorPosition();
|
||||||
markMode = editor.getCursorPosition();
|
editor.setEmacsMarkMode(markMode);
|
||||||
editor.setEmacsMarkMode(markMode);
|
editor.selection.setSelectionAnchor(markMode.row, markMode.column);
|
||||||
editor.selection.setSelectionAnchor(markMode.row, markMode.column);
|
},
|
||||||
|
readonly: true,
|
||||||
|
multiSelectAction: "forEach"
|
||||||
},
|
},
|
||||||
exchangePointAndMark: {
|
exchangePointAndMark: {
|
||||||
exec: function(editor) {
|
exec: function(editor) {
|
||||||
|
|
@ -396,7 +400,7 @@ exports.handler.addCommands({
|
||||||
editor.selection.setSelectionRange(range, !editor.selection.isBackwards());
|
editor.selection.setSelectionRange(range, !editor.selection.isBackwards());
|
||||||
},
|
},
|
||||||
readonly: true,
|
readonly: true,
|
||||||
multiselectAction: "forEach"
|
multiSelectAction: "forEach"
|
||||||
},
|
},
|
||||||
killWord: {
|
killWord: {
|
||||||
exec: function(editor, dir) {
|
exec: function(editor, dir) {
|
||||||
|
|
@ -413,7 +417,7 @@ exports.handler.addCommands({
|
||||||
editor.session.remove(range);
|
editor.session.remove(range);
|
||||||
editor.clearSelection();
|
editor.clearSelection();
|
||||||
},
|
},
|
||||||
multiselectAction: "forEach"
|
multiSelectAction: "forEach"
|
||||||
},
|
},
|
||||||
killLine: function(editor) {
|
killLine: function(editor) {
|
||||||
editor.setEmacsMarkMode(null);
|
editor.setEmacsMarkMode(null);
|
||||||
|
|
@ -438,7 +442,7 @@ exports.handler.addCommands({
|
||||||
editor.clearSelection();
|
editor.clearSelection();
|
||||||
},
|
},
|
||||||
yank: function(editor) {
|
yank: function(editor) {
|
||||||
editor.onPaste(exports.killRing.get());
|
editor.onPaste(exports.killRing.get() || '');
|
||||||
editor.keyBinding.$data.lastCommand = "yank";
|
editor.keyBinding.$data.lastCommand = "yank";
|
||||||
},
|
},
|
||||||
yankRotate: function(editor) {
|
yankRotate: function(editor) {
|
||||||
|
|
@ -448,12 +452,19 @@ exports.handler.addCommands({
|
||||||
editor.onPaste(exports.killRing.rotate());
|
editor.onPaste(exports.killRing.rotate());
|
||||||
editor.keyBinding.$data.lastCommand = "yank";
|
editor.keyBinding.$data.lastCommand = "yank";
|
||||||
},
|
},
|
||||||
killRegion: function(editor) {
|
killRegion: {
|
||||||
exports.killRing.add(editor.getCopyText());
|
exec: function(editor) {
|
||||||
editor.commands.byName.cut.exec(editor);
|
exports.killRing.add(editor.getCopyText());
|
||||||
|
editor.commands.byName.cut.exec(editor);
|
||||||
|
},
|
||||||
|
readonly: true,
|
||||||
|
multiSelectAction: "forEach"
|
||||||
},
|
},
|
||||||
killRingSave: function(editor) {
|
killRingSave: {
|
||||||
exports.killRing.add(editor.getCopyText());
|
exec: function(editor) {
|
||||||
|
exports.killRing.add(editor.getCopyText());
|
||||||
|
},
|
||||||
|
readonly: true
|
||||||
},
|
},
|
||||||
keyboardQuit: function(editor) {
|
keyboardQuit: function(editor) {
|
||||||
editor.selection.clearSelection();
|
editor.selection.clearSelection();
|
||||||
|
|
@ -478,8 +489,9 @@ exports.killRing = {
|
||||||
if (this.$data.length > 30)
|
if (this.$data.length > 30)
|
||||||
this.$data.shift();
|
this.$data.shift();
|
||||||
},
|
},
|
||||||
get: function() {
|
get: function(n) {
|
||||||
return this.$data[this.$data.length - 1] || "";
|
n = n || 1;
|
||||||
|
return this.$data.slice(this.$data.length-n, this.$data.length).reverse().join('\n');
|
||||||
},
|
},
|
||||||
pop: function() {
|
pop: function() {
|
||||||
if (this.$data.length > 1)
|
if (this.$data.length > 1)
|
||||||
|
|
|
||||||
|
|
@ -521,7 +521,7 @@ var Editor = require("./editor").Editor;
|
||||||
|
|
||||||
this.getCopyText = function() {
|
this.getCopyText = function() {
|
||||||
var text = "";
|
var text = "";
|
||||||
if (this.inMultiSelectMode) {
|
if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {
|
||||||
var ranges = this.multiSelect.rangeList.ranges;
|
var ranges = this.multiSelect.rangeList.ranges;
|
||||||
var buf = [];
|
var buf = [];
|
||||||
for (var i = 0; i < ranges.length; i++) {
|
for (var i = 0; i < ranges.length; i++) {
|
||||||
|
|
@ -550,10 +550,10 @@ var Editor = require("./editor").Editor;
|
||||||
var lines = text.split(/\r\n|\r|\n/);
|
var lines = text.split(/\r\n|\r|\n/);
|
||||||
var ranges = this.selection.rangeList.ranges;
|
var ranges = this.selection.rangeList.ranges;
|
||||||
|
|
||||||
if (lines.length > ranges.length || (lines.length <= 2 && !lines[1]))
|
if (lines.length > ranges.length || lines.length < 2 || !lines[1])
|
||||||
return this.commands.exec("insertstring", this, text);
|
return this.commands.exec("insertstring", this, text);
|
||||||
|
|
||||||
for (var i = ranges.length; i--; ) {
|
for (var i = ranges.length; i--;) {
|
||||||
var range = ranges[i];
|
var range = ranges[i];
|
||||||
if (!range.isEmpty())
|
if (!range.isEmpty())
|
||||||
this.session.remove(range);
|
this.session.remove(range);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue