Update desired column on insert text
This commit is contained in:
parent
cf5f5a4e4b
commit
09c9aa81df
4 changed files with 39 additions and 9 deletions
|
|
@ -449,12 +449,12 @@ var Editor =function(renderer, session) {
|
||||||
|
|
||||||
this.clearSelection();
|
this.clearSelection();
|
||||||
|
|
||||||
var start = cursor.column;
|
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) {
|
if (transform && transform.selection) {
|
||||||
if (transform.selection.length == 2) { // Transform relative to the current column
|
if (transform.selection.length == 2) { // Transform relative to the current column
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,16 @@ module.exports = {
|
||||||
|
|
||||||
editor.navigateUp();
|
editor.navigateUp();
|
||||||
assert.position(editor.getCursorPosition(), 0, 1);
|
assert.position(editor.getCursorPosition(), 0, 1);
|
||||||
|
},
|
||||||
|
|
||||||
|
"test: typing text should update the desired column": function() {
|
||||||
|
var editor = new Editor(new MockRenderer(), new EditSession(["1234", "1234567890"]));
|
||||||
|
|
||||||
|
editor.navigateTo(0, 3);
|
||||||
|
editor.insert("juhu");
|
||||||
|
|
||||||
|
editor.navigateDown();
|
||||||
|
assert.position(editor.getCursorPosition(), 1, 7);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,12 +110,17 @@ var Marker = function(parentEl) {
|
||||||
return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;
|
return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws a marker, which spans a range of text in a single line
|
||||||
|
*/
|
||||||
this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig) {
|
this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig) {
|
||||||
// selection start
|
// selection start
|
||||||
var row = range.start.row;
|
var row = range.start.row;
|
||||||
|
|
||||||
var lineRange = new Range(row, range.start.column,
|
var lineRange = new Range(
|
||||||
row, this.session.getScreenLastRowColumn(row));
|
row, range.start.column,
|
||||||
|
row, this.session.getScreenLastRowColumn(row)
|
||||||
|
);
|
||||||
this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1);
|
this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1);
|
||||||
|
|
||||||
// selection end
|
// selection end
|
||||||
|
|
@ -131,7 +136,10 @@ var Marker = function(parentEl) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.drawMultiLineMarker = function(stringBuilder, range, clazz, layerConfig, ignorePadding) {
|
/**
|
||||||
|
* Draws a multi line marker, where lines span the full width
|
||||||
|
*/
|
||||||
|
this.drawMultiLineMarker = function(stringBuilder, range, clazz, layerConfig, ignorePadding) {
|
||||||
// from selection start to the end of the line
|
// from selection start to the end of the line
|
||||||
var padding = ignorePadding ? 0 : this.$padding;
|
var padding = ignorePadding ? 0 : this.$padding;
|
||||||
var height = layerConfig.lineHeight;
|
var height = layerConfig.lineHeight;
|
||||||
|
|
@ -141,7 +149,6 @@ var Marker = function(parentEl) {
|
||||||
padding + range.start.column * layerConfig.characterWidth
|
padding + range.start.column * layerConfig.characterWidth
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
stringBuilder.push(
|
stringBuilder.push(
|
||||||
"<div class='", clazz, "' style='",
|
"<div class='", clazz, "' style='",
|
||||||
"height:", height, "px;",
|
"height:", height, "px;",
|
||||||
|
|
@ -178,8 +185,15 @@ var Marker = function(parentEl) {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength, ignorePadding) {
|
this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength, ignorePadding) {
|
||||||
var padding = ignorePadding ? 0 : this.$padding;
|
var padding = ignorePadding ? 0 : this.$padding;
|
||||||
|
=======
|
||||||
|
/**
|
||||||
|
* Draws a marker which covers one single full line
|
||||||
|
*/
|
||||||
|
this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength) {
|
||||||
|
>>>>>>> Update desired column on insert text
|
||||||
var height = layerConfig.lineHeight;
|
var height = layerConfig.lineHeight;
|
||||||
var width = Math.round((range.end.column + (extraLength || 0) - range.start.column) * layerConfig.characterWidth);
|
var width = Math.round((range.end.column + (extraLength || 0) - range.start.column) * layerConfig.characterWidth);
|
||||||
var top = this.$getTop(range.start.row, layerConfig);
|
var top = this.$getTop(range.start.row, layerConfig);
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,8 @@ var Selection = function(session) {
|
||||||
_self._dispatchEvent("changeCursor");
|
_self._dispatchEvent("changeCursor");
|
||||||
if (!_self.$isEmpty)
|
if (!_self.$isEmpty)
|
||||||
_self._dispatchEvent("changeSelection");
|
_self._dispatchEvent("changeSelection");
|
||||||
|
if (!_self.$preventUpdateDesiredColumnOnChange && e.old.column != e.value.column)
|
||||||
|
_self.$updateDesiredColumn();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.selectionAnchor.on("change", function() {
|
this.selectionAnchor.on("change", function() {
|
||||||
|
|
@ -447,7 +449,11 @@ var Selection = function(session) {
|
||||||
row = fold.start.row;
|
row = fold.start.row;
|
||||||
column = fold.start.column;
|
column = fold.start.column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.$preventUpdateDesiredColumnOnChange = true;
|
||||||
this.selectionLead.setPosition(row, column);
|
this.selectionLead.setPosition(row, column);
|
||||||
|
this.$preventUpdateDesiredColumnOnChange = false;
|
||||||
|
|
||||||
if (!preventUpdateDesiredColumn)
|
if (!preventUpdateDesiredColumn)
|
||||||
this.$updateDesiredColumn(this.selectionLead.column);
|
this.$updateDesiredColumn(this.selectionLead.column);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue