Update desired column on insert text

This commit is contained in:
Fabian Jakobs 2011-07-21 11:11:34 +02:00
commit 09c9aa81df
4 changed files with 39 additions and 9 deletions

View file

@ -449,12 +449,12 @@ var Editor =function(renderer, session) {
this.clearSelection();
var start = cursor.column;
var lineState = session.getState(cursor.row);
var start = cursor.column;
var lineState = session.getState(cursor.row);
var shouldOutdent = mode.checkOutdent(lineState, session.getLine(cursor.row), text);
var line = session.getLine(cursor.row);
var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());
var end = session.insert(cursor, text);
var line = session.getLine(cursor.row);
var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());
var end = session.insert(cursor, text);
if (transform && transform.selection) {
if (transform.selection.length == 2) { // Transform relative to the current column

View file

@ -150,6 +150,16 @@ module.exports = {
editor.navigateUp();
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);
}
};

View file

@ -110,12 +110,17 @@ var Marker = function(parentEl) {
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) {
// selection start
var row = range.start.row;
var lineRange = new Range(row, range.start.column,
row, this.session.getScreenLastRowColumn(row));
var lineRange = new Range(
row, range.start.column,
row, this.session.getScreenLastRowColumn(row)
);
this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1);
// 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
var padding = ignorePadding ? 0 : this.$padding;
var height = layerConfig.lineHeight;
@ -141,7 +149,6 @@ var Marker = function(parentEl) {
padding + range.start.column * layerConfig.characterWidth
);
stringBuilder.push(
"<div class='", clazz, "' style='",
"height:", height, "px;",
@ -178,8 +185,15 @@ var Marker = function(parentEl) {
);
};
<<<<<<< HEAD
this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength, ignorePadding) {
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 width = Math.round((range.end.column + (extraLength || 0) - range.start.column) * layerConfig.characterWidth);
var top = this.$getTop(range.start.row, layerConfig);

View file

@ -56,6 +56,8 @@ var Selection = function(session) {
_self._dispatchEvent("changeCursor");
if (!_self.$isEmpty)
_self._dispatchEvent("changeSelection");
if (!_self.$preventUpdateDesiredColumnOnChange && e.old.column != e.value.column)
_self.$updateDesiredColumn();
});
this.selectionAnchor.on("change", function() {
@ -447,7 +449,11 @@ var Selection = function(session) {
row = fold.start.row;
column = fold.start.column;
}
this.$preventUpdateDesiredColumnOnChange = true;
this.selectionLead.setPosition(row, column);
this.$preventUpdateDesiredColumnOnChange = false;
if (!preventUpdateDesiredColumn)
this.$updateDesiredColumn(this.selectionLead.column);
};