allow canceling commands in multi_select mode
This commit is contained in:
parent
db4bd7ffd1
commit
a1fdd1bebc
4 changed files with 47 additions and 18 deletions
|
|
@ -339,7 +339,8 @@ for (var command in keymap) {
|
||||||
name: "emmet:" + command,
|
name: "emmet:" + command,
|
||||||
action: command,
|
action: command,
|
||||||
bindKey: keymap[command],
|
bindKey: keymap[command],
|
||||||
exec: runEmmetCommand
|
exec: runEmmetCommand,
|
||||||
|
multiSelectAction: "forEach"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,12 +85,37 @@ EventEmitter.once = function(eventName, callback) {
|
||||||
|
|
||||||
|
|
||||||
EventEmitter.setDefaultHandler = function(eventName, callback) {
|
EventEmitter.setDefaultHandler = function(eventName, callback) {
|
||||||
this._defaultHandlers = this._defaultHandlers || {};
|
var handlers = this._defaultHandlers
|
||||||
|
if (!handlers)
|
||||||
|
handlers = this._defaultHandlers = {_disabled_: {}};
|
||||||
|
|
||||||
if (this._defaultHandlers[eventName])
|
if (handlers[eventName]) {
|
||||||
throw new Error("The default handler for '" + eventName + "' is already set");
|
var old = handlers[eventName];
|
||||||
|
var disabled = handlers._disabled_[eventName];
|
||||||
|
if (!disabled)
|
||||||
|
handlers._disabled_[eventName] = disabled = [];
|
||||||
|
disabled.push(old);
|
||||||
|
var i = disabled.indexOf(callback);
|
||||||
|
if (i != -1)
|
||||||
|
disabled.splice(i, 1);
|
||||||
|
}
|
||||||
|
handlers[eventName] = callback;
|
||||||
|
};
|
||||||
|
EventEmitter.removeDefaultHandler = function(eventName, callback) {
|
||||||
|
var handlers = this._defaultHandlers
|
||||||
|
if (!handlers)
|
||||||
|
return;
|
||||||
|
var disabled = handlers._disabled_[eventName];
|
||||||
|
|
||||||
this._defaultHandlers[eventName] = callback;
|
if (handlers[eventName] == callback) {
|
||||||
|
var old = handlers[eventName];
|
||||||
|
if (disabled)
|
||||||
|
this.setDefaultHandler(eventName, disabled.pop());
|
||||||
|
} else if (disabled) {
|
||||||
|
var i = disabled.indexOf(callback);
|
||||||
|
if (i != -1)
|
||||||
|
disabled.splice(i, 1);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
EventEmitter.on =
|
EventEmitter.on =
|
||||||
|
|
|
||||||
|
|
@ -420,7 +420,7 @@ var Editor = require("./editor").Editor;
|
||||||
|
|
||||||
this.setStyle("ace_multiselect");
|
this.setStyle("ace_multiselect");
|
||||||
this.keyBinding.addKeyboardHandler(commands.keyboardHandler);
|
this.keyBinding.addKeyboardHandler(commands.keyboardHandler);
|
||||||
this.commands.on("exec", this.$onMultiSelectExec);
|
this.commands.setDefaultHandler("exec", this.$onMultiSelectExec);
|
||||||
|
|
||||||
this.renderer.updateCursor();
|
this.renderer.updateCursor();
|
||||||
this.renderer.updateBackMarkers();
|
this.renderer.updateBackMarkers();
|
||||||
|
|
@ -434,7 +434,7 @@ var Editor = require("./editor").Editor;
|
||||||
this.unsetStyle("ace_multiselect");
|
this.unsetStyle("ace_multiselect");
|
||||||
this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);
|
this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);
|
||||||
|
|
||||||
this.commands.removeEventListener("exec", this.$onMultiSelectExec);
|
this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec);
|
||||||
this.renderer.updateCursor();
|
this.renderer.updateCursor();
|
||||||
this.renderer.updateBackMarkers();
|
this.renderer.updateBackMarkers();
|
||||||
};
|
};
|
||||||
|
|
@ -445,20 +445,20 @@ var Editor = require("./editor").Editor;
|
||||||
if (!editor.multiSelect)
|
if (!editor.multiSelect)
|
||||||
return;
|
return;
|
||||||
if (!command.multiSelectAction) {
|
if (!command.multiSelectAction) {
|
||||||
command.exec(editor, e.args || {});
|
var result = command.exec(editor, e.args || {});
|
||||||
editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());
|
editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());
|
||||||
editor.multiSelect.mergeOverlappingRanges();
|
editor.multiSelect.mergeOverlappingRanges();
|
||||||
} else if (command.multiSelectAction == "forEach") {
|
} else if (command.multiSelectAction == "forEach") {
|
||||||
editor.forEachSelection(command, e.args);
|
result = editor.forEachSelection(command, e.args);
|
||||||
} else if (command.multiSelectAction == "forEachLine") {
|
} else if (command.multiSelectAction == "forEachLine") {
|
||||||
editor.forEachSelection(command, e.args, true);
|
result = editor.forEachSelection(command, e.args, true);
|
||||||
} else if (command.multiSelectAction == "single") {
|
} else if (command.multiSelectAction == "single") {
|
||||||
editor.exitMultiSelectMode();
|
editor.exitMultiSelectMode();
|
||||||
command.exec(editor, e.args || {});
|
result = command.exec(editor, e.args || {});
|
||||||
} else {
|
} else {
|
||||||
command.multiSelectAction(editor, e.args || {});
|
result = command.multiSelectAction(editor, e.args || {});
|
||||||
}
|
}
|
||||||
e.preventDefault();
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -474,6 +474,7 @@ var Editor = require("./editor").Editor;
|
||||||
var session = this.session;
|
var session = this.session;
|
||||||
var selection = this.selection;
|
var selection = this.selection;
|
||||||
var rangeList = selection.rangeList;
|
var rangeList = selection.rangeList;
|
||||||
|
var result;
|
||||||
|
|
||||||
var reg = selection._eventRegistry;
|
var reg = selection._eventRegistry;
|
||||||
selection._eventRegistry = {};
|
selection._eventRegistry = {};
|
||||||
|
|
@ -487,7 +488,9 @@ var Editor = require("./editor").Editor;
|
||||||
}
|
}
|
||||||
tmpSel.fromOrientedRange(rangeList.ranges[i]);
|
tmpSel.fromOrientedRange(rangeList.ranges[i]);
|
||||||
this.selection = session.selection = tmpSel;
|
this.selection = session.selection = tmpSel;
|
||||||
cmd.exec(this, args || {});
|
var cmdResult = cmd.exec(this, args || {});
|
||||||
|
if (!result == undefined)
|
||||||
|
result = cmdResult;
|
||||||
tmpSel.toOrientedRange(rangeList.ranges[i]);
|
tmpSel.toOrientedRange(rangeList.ranges[i]);
|
||||||
}
|
}
|
||||||
tmpSel.detach();
|
tmpSel.detach();
|
||||||
|
|
@ -499,6 +502,7 @@ var Editor = require("./editor").Editor;
|
||||||
|
|
||||||
this.onCursorChange();
|
this.onCursorChange();
|
||||||
this.onSelectionChange();
|
this.onSelectionChange();
|
||||||
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -760,8 +760,7 @@ var TabstopManager = function(editor) {
|
||||||
"Esc": function(ed) {
|
"Esc": function(ed) {
|
||||||
ed.tabstopManager.detach();
|
ed.tabstopManager.detach();
|
||||||
},
|
},
|
||||||
// todo multiselectExec doesn't handle command return values
|
"Return": function(ed) {
|
||||||
"!Return": function(ed) {
|
|
||||||
//ed.tabstopManager.tabNext(1);
|
//ed.tabstopManager.tabNext(1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue