Add transformInput and transformRemove hooks into edit modes
This commit is contained in:
parent
e9ddafe9ee
commit
0d9b5dd8b9
2 changed files with 28 additions and 3 deletions
|
|
@ -412,6 +412,11 @@ var Editor =function(renderer, session) {
|
||||||
var mode = session.getMode();
|
var mode = session.getMode();
|
||||||
|
|
||||||
var cursor = this.getCursorPosition();
|
var cursor = this.getCursorPosition();
|
||||||
|
var transform = mode.transformInput(session.getState(cursor.row), this, session, text);
|
||||||
|
|
||||||
|
if (transform)
|
||||||
|
text = transform.text;
|
||||||
|
|
||||||
text = text.replace("\t", this.session.getTabString());
|
text = text.replace("\t", this.session.getTabString());
|
||||||
|
|
||||||
// remove selected text
|
// remove selected text
|
||||||
|
|
@ -427,12 +432,19 @@ var Editor =function(renderer, session) {
|
||||||
|
|
||||||
this.clearSelection();
|
this.clearSelection();
|
||||||
|
|
||||||
|
var start = cursor.column;
|
||||||
var lineState = session.getState(cursor.row);
|
var lineState = session.getState(cursor.row);
|
||||||
var shouldOutdent = mode.checkOutdent(lineState, session.getLine(cursor.row), text);
|
var shouldOutdent = mode.checkOutdent(lineState, session.getLine(cursor.row), text);
|
||||||
var line = session.getLine(cursor.row);
|
var line = session.getLine(cursor.row);
|
||||||
var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());
|
var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());
|
||||||
var end = session.insert(cursor, text);
|
var end = session.insert(cursor, text);
|
||||||
|
|
||||||
|
if (transform && transform.selection) {
|
||||||
|
this.selection.setSelectionRange(
|
||||||
|
new Range(cursor.row, start + transform.selection[0],
|
||||||
|
cursor.row, start + transform.selection[1]));
|
||||||
|
}
|
||||||
|
|
||||||
var lineState = session.getState(cursor.row);
|
var lineState = session.getState(cursor.row);
|
||||||
|
|
||||||
// TODO disabled multiline auto indent
|
// TODO disabled multiline auto indent
|
||||||
|
|
@ -601,7 +613,12 @@ var Editor =function(renderer, session) {
|
||||||
if (this.selection.isEmpty())
|
if (this.selection.isEmpty())
|
||||||
this.selection.selectLeft();
|
this.selection.selectLeft();
|
||||||
|
|
||||||
this.session.remove(this.getSelectionRange());
|
var session = this.session;
|
||||||
|
var selection = this.getSelectionRange();
|
||||||
|
var state = session.getState(selection.start.row);
|
||||||
|
var range = session.getMode().transformRemove(state, this, session, selection);
|
||||||
|
|
||||||
|
this.session.remove(range);
|
||||||
this.clearSelection();
|
this.clearSelection();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,7 @@ var Mode = function() {
|
||||||
this.$modes[this.$embeds[i]] = new mapping[this.$embeds[i]]();
|
this.$modes[this.$embeds[i]] = new mapping[this.$embeds[i]]();
|
||||||
}
|
}
|
||||||
|
|
||||||
var delegations = ['toggleCommentLines', 'getNextLineIndent', 'checkOutdent', 'autoOutdent'];
|
var delegations = ['toggleCommentLines', 'getNextLineIndent', 'checkOutdent', 'autoOutdent', 'transformInput', 'transformRemove'];
|
||||||
|
|
||||||
for (var i = 0; i < delegations.length; i++) {
|
for (var i = 0; i < delegations.length; i++) {
|
||||||
(function(scope) {
|
(function(scope) {
|
||||||
|
|
@ -179,6 +179,14 @@ var Mode = function() {
|
||||||
return defaultHandler ? defaultHandler.apply(this, args) : undefined;
|
return defaultHandler ? defaultHandler.apply(this, args) : undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.transformInput = function(state, editor, session, text) {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.transformRemove = function(state, editor, session, range) {
|
||||||
|
return range;
|
||||||
|
};
|
||||||
|
|
||||||
}).call(Mode.prototype);
|
}).call(Mode.prototype);
|
||||||
|
|
||||||
exports.Mode = Mode;
|
exports.Mode = Mode;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue