add some more commands
This commit is contained in:
parent
fc500bb37a
commit
d85e8b24f6
1 changed files with 138 additions and 23 deletions
|
|
@ -88,10 +88,16 @@ function exec(command, editor, args) {
|
||||||
if (editor && editor.$readOnly && !command.readOnly)
|
if (editor && editor.$readOnly && !command.readOnly)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (/^(remove|insert|select|go|jumptomatching|del|backspace|to(?:upp|low)ercase)/.test(command.name)) {
|
if (!command.multiCursor) {
|
||||||
forEachSelection(editor, command, args)
|
|
||||||
}else
|
|
||||||
command.exec(editor, args || {});
|
command.exec(editor, args || {});
|
||||||
|
} else if (command.multiCursor == "forEach") {
|
||||||
|
forEachSelection(editor, command, args)
|
||||||
|
} else if (command.multiCursor == "single") {
|
||||||
|
exitMultiSelectMode(editor);
|
||||||
|
command.exec(editor, args || {});
|
||||||
|
} else {
|
||||||
|
command.multiCursor(editor, args || {});
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -199,7 +205,7 @@ function addCursorV(editor, dir){
|
||||||
var newRange = Range.fromPoints(anchor, lead)
|
var newRange = Range.fromPoints(anchor, lead)
|
||||||
newRange.cursor = newRange.end
|
newRange.cursor = newRange.end
|
||||||
}
|
}
|
||||||
newRange.desiredColumn = editor.selection.$desiredColumn
|
newRange.desiredColumn = screenLead.column;
|
||||||
if (!editor.inMultiSelectMode) {
|
if (!editor.inMultiSelectMode) {
|
||||||
addSelectionRange(editor, range)
|
addSelectionRange(editor, range)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -212,27 +218,140 @@ function addCursorV(editor, dir){
|
||||||
if (toRemove)
|
if (toRemove)
|
||||||
editor.selection.rangeList.substractPoint(toRemove)
|
editor.selection.rangeList.substractPoint(toRemove)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function transposeSelections(editor, dir) {
|
||||||
|
var session = editor.session;
|
||||||
|
var sel = session.multiSelection;
|
||||||
|
var all = sel.rangeList.all;
|
||||||
|
|
||||||
|
var words = [];
|
||||||
|
for (var i = all.length; i--; ) {
|
||||||
|
var range = all[i]
|
||||||
|
if (range.isEmpty()) {
|
||||||
|
var tmp = session.getWordRange(range.start.row, range.start.column)
|
||||||
|
range.start.row = tmp.start.row;
|
||||||
|
range.start.column = tmp.start.column;
|
||||||
|
range.end.row = tmp.end.row;
|
||||||
|
range.end.column = tmp.end.column;
|
||||||
|
}
|
||||||
|
|
||||||
|
words.unshift(editor.session.getTextRange(range));
|
||||||
|
}
|
||||||
|
if (dir < 0)
|
||||||
|
words.unshift(words.pop());
|
||||||
|
else
|
||||||
|
words.push(words.shift());
|
||||||
|
|
||||||
|
for (var i = all.length; i--; ) {
|
||||||
|
var range = all[i];
|
||||||
|
var tmp = range.clone();
|
||||||
|
session.replace(range, words[i]);
|
||||||
|
range.start.row = tmp.start.row;
|
||||||
|
range.start.column = tmp.start.column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function splitIntoLines(editor) {
|
||||||
|
var sel = editor.session.multiSelection
|
||||||
|
if (sel.rangeCount > 1) {
|
||||||
|
var ranges = sel.rangeList.ranges;
|
||||||
|
var lastRange = ranges[ranges.length - 1]
|
||||||
|
var range = Range.fromPoints(ranges[0].start, lastRange.end)
|
||||||
|
|
||||||
|
exitMultiSelectMode(editor)
|
||||||
|
sel.setSelectionRange(range, lastRange.cursor == lastRange.start)
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var Search = require("ace/search").Search
|
||||||
|
var search = new Search
|
||||||
|
|
||||||
|
function find(session, needle, dir) {
|
||||||
|
search.$options.wrap = false;
|
||||||
|
search.$options.needle = needle;
|
||||||
|
search.$options.backwards = dir == -1;
|
||||||
|
return search.find(session)
|
||||||
|
}
|
||||||
|
function addRange(editor, dir, skip) {
|
||||||
|
var session = editor.session;
|
||||||
|
var sel = session.multiSelection;
|
||||||
|
var all = sel.rangeList.all;
|
||||||
|
|
||||||
|
var range = sel.getRange();
|
||||||
|
if (range.isEmpty()) {
|
||||||
|
var tmp = session.getWordRange(range.start.row, range.start.column)
|
||||||
|
var offset = tmp.start.column - range.start.column
|
||||||
|
range = tmp;
|
||||||
|
}
|
||||||
|
var needle = session.getTextRange(range);
|
||||||
|
|
||||||
|
if (skip) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var newRange = find(session, needle, dir);
|
||||||
|
|
||||||
|
newRange.cursor = dir == -1 ? newRange.start : newRange.end;
|
||||||
|
addSelectionRange(editor, newRange)
|
||||||
|
}
|
||||||
// commands
|
// commands
|
||||||
|
// add multicursor annotations to default commands
|
||||||
|
var defaultCommands = require("./commands/default_commands").commands;
|
||||||
|
|
||||||
|
defaultCommands.forEach(function(command) {
|
||||||
|
var single = RegExp(["selectall"].join("|"), "");
|
||||||
|
var mapOverCommands = RegExp(["backspace", "del",
|
||||||
|
"golinedown", "golineup", "gotoend", "gotoleft", "gotolineend", "gotolinestart",
|
||||||
|
"gotoright", "gotostart", "gotowordleft", "gotowordright",
|
||||||
|
"indent", "insertstring", "inserttext", "jumptomatching", "outdent",
|
||||||
|
"removetolineend", "removetolinestart", "removewordleft", "removewordright",
|
||||||
|
"selectdown", "selectleft", "selectlineend", "selectlinestart", "selectright",
|
||||||
|
"selecttoend", "selecttolineend", "selecttolinestart", "selecttostart",
|
||||||
|
"selectup", "selectwordleft", "selectwordright",
|
||||||
|
"splitline", "tolowercase", "touppercase"].join("|"), "");
|
||||||
|
|
||||||
|
if (single.test(command.name))
|
||||||
|
command.multiCursor = "single";
|
||||||
|
else if (mapOverCommands.test(command.name))
|
||||||
|
command.multiCursor = "forEach";
|
||||||
|
else if (command.name == "transposeletters")
|
||||||
|
command.multiCursor = transposeSelections
|
||||||
|
});
|
||||||
|
|
||||||
|
// commands to to enter multicursor mode
|
||||||
exports.defaultCommands = [{
|
exports.defaultCommands = [{
|
||||||
name: "addCursorAbove",
|
name: "addCursorAbove",
|
||||||
exec: function(editor) {
|
exec: function(editor) {addCursorV(editor, -1); },
|
||||||
addCursorV(editor, -1)
|
bindKey: {win: "Alt-Shift-Up", mac: "Alt-Shift-Up"}
|
||||||
},
|
|
||||||
bindKey: {
|
|
||||||
win: "Alt-Shift-Up",
|
|
||||||
mac: "Alt-Shift-Up"
|
|
||||||
}
|
|
||||||
}, {
|
}, {
|
||||||
name: "addCursorBelow",
|
name: "addCursorBelow",
|
||||||
exec: function(editor) {
|
exec: function(editor) {addCursorV(editor, 1); },
|
||||||
addCursorV(editor, 1)
|
bindKey: {win: "Alt-Shift-Down", mac: "Alt-Shift-Down"}
|
||||||
},
|
}, {
|
||||||
bindKey: {
|
name: "selectMoreBefore",
|
||||||
win: "Alt-Shift-Down",
|
exec: function(editor) {addRange(editor, -1); },
|
||||||
mac: "Alt-Shift-Down"
|
bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"}
|
||||||
}
|
}, {
|
||||||
}];
|
name: "selectMoreAfter",
|
||||||
|
exec: function(editor) {addRange(editor, 1); },
|
||||||
|
bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"}
|
||||||
|
}, {
|
||||||
|
name: "selectNextBefore",
|
||||||
|
exec: function(editor) {addCursorV(editor, -1, true); },
|
||||||
|
bindKey: {win: "Ctrl-Shift-PageUp", mac: "Ctrl-Shift-PageUp"}
|
||||||
|
}, {
|
||||||
|
name: "selectNextAfter",
|
||||||
|
exec: function(editor) {addCursorV(editor, 1, true); },
|
||||||
|
bindKey: {win: "Ctrl-Shift-PageDown", mac: "Ctrl-Shift-PageDown"}
|
||||||
|
}, {
|
||||||
|
name: "splitIntoLines",
|
||||||
|
exec: function(editor) {splitIntoLines(editor); },
|
||||||
|
bindKey: {win: "Ctrl-Shift-L", mac: "Ctrl-Shift-L"}
|
||||||
|
}, ];
|
||||||
|
|
||||||
|
// commands active when multiple cursors are present
|
||||||
exports.multiEditCommands = [{
|
exports.multiEditCommands = [{
|
||||||
name: "singleSelection",
|
name: "singleSelection",
|
||||||
bindKey: "esc",
|
bindKey: "esc",
|
||||||
|
|
@ -421,10 +540,6 @@ function onMouseDown(e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function altSelect(ev) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// MultiCursor
|
// MultiCursor
|
||||||
function MultiCursor(editor) {
|
function MultiCursor(editor) {
|
||||||
initSession(editor.session);
|
initSession(editor.session);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue