diff --git a/lib/ace/editor.js b/lib/ace/editor.js index d1f59655..0bca7288 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -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 diff --git a/lib/ace/editor_navigation_test.js b/lib/ace/editor_navigation_test.js index c3784715..6048aa69 100644 --- a/lib/ace/editor_navigation_test.js +++ b/lib/ace/editor_navigation_test.js @@ -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); } }; diff --git a/lib/ace/layer/marker.js b/lib/ace/layer/marker.js index 6466072d..b3b73a41 100644 --- a/lib/ace/layer/marker.js +++ b/lib/ace/layer/marker.js @@ -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( "