reset desiredColumn when needed instead of updating it all the time

This commit is contained in:
nightwing 2012-03-25 14:52:17 +04:00
commit fc500bb37a
2 changed files with 26 additions and 26 deletions

View file

@ -180,6 +180,7 @@ function addCursorV(editor, dir){
range.cursor = isBackwards ? range.start : range.end; range.cursor = isBackwards ? range.start : range.end;
var screenLead = editor.session.documentToScreenPosition(range.cursor); var screenLead = editor.session.documentToScreenPosition(range.cursor);
if (editor.selection.$desiredColumn)
screenLead.column = editor.selection.$desiredColumn; screenLead.column = editor.selection.$desiredColumn;
var lead = editor.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); var lead = editor.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);

View file

@ -59,18 +59,18 @@ var Selection = function(session) {
this.selectionLead = this.doc.createAnchor(0, 0); this.selectionLead = this.doc.createAnchor(0, 0);
this.selectionAnchor = this.doc.createAnchor(0, 0); this.selectionAnchor = this.doc.createAnchor(0, 0);
var _self = this; var self = this;
this.selectionLead.on("change", function(e) { this.selectionLead.on("change", function(e) {
_self._emit("changeCursor"); self._emit("changeCursor");
if (!_self.$isEmpty) if (!self.$isEmpty)
_self._emit("changeSelection"); self._emit("changeSelection");
if (!_self.$preventUpdateDesiredColumnOnChange && e.old.column != e.value.column) if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)
_self.$updateDesiredColumn(); self.$desiredColumn = null;
}); });
this.selectionAnchor.on("change", function() { this.selectionAnchor.on("change", function() {
if (!_self.$isEmpty) if (!self.$isEmpty)
_self._emit("changeSelection"); self._emit("changeSelection");
}); });
}; };
@ -180,12 +180,7 @@ var Selection = function(session) {
this.setSelectionAnchor(range.start.row, range.start.column); this.setSelectionAnchor(range.start.row, range.start.column);
this.selectTo(range.end.row, range.end.column); this.selectTo(range.end.row, range.end.column);
} }
this.$updateDesiredColumn(); this.$desiredColumn = null;
};
this.$updateDesiredColumn = function() {
var cursor = this.getCursor();
this.$desiredColumn = this.session.documentToScreenColumn(cursor.row, cursor.column);
}; };
this.$moveSelection = function(mover) { this.$moveSelection = function(mover) {
@ -470,8 +465,14 @@ var Selection = function(session) {
this.selectionLead.column this.selectionLead.column
); );
var screenCol = (chars === 0 && this.$desiredColumn) || screenPos.column; if (chars === 0) {
var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenCol); if (this.$desiredColumn)
screenPos.column = this.$desiredColumn;
else
this.$desiredColumn = screenPos.column;
}
var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column);
// move the cursor and update the desired column // move the cursor and update the desired column
this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);
@ -481,7 +482,7 @@ var Selection = function(session) {
this.moveCursorTo(position.row, position.column); this.moveCursorTo(position.row, position.column);
}; };
this.moveCursorTo = function(row, column, preventUpdateDesiredColumn) { this.moveCursorTo = function(row, column, keepDesiredColumn) {
// Ensure the row/column is not inside of a fold. // Ensure the row/column is not inside of a fold.
var fold = this.session.getFoldAt(row, column, 1); var fold = this.session.getFoldAt(row, column, 1);
if (fold) { if (fold) {
@ -489,19 +490,17 @@ var Selection = function(session) {
column = fold.start.column; column = fold.start.column;
} }
this.$preventUpdateDesiredColumnOnChange = true; this.$keepDesiredColumnOnChange = true;
this.selectionLead.setPosition(row, column); this.selectionLead.setPosition(row, column);
this.$preventUpdateDesiredColumnOnChange = false; this.$keepDesiredColumnOnChange = false;
if (!preventUpdateDesiredColumn) if (!keepDesiredColumn)
this.$updateDesiredColumn(this.selectionLead.column); this.$desiredColumn = null;
}; };
this.moveCursorToScreen = function(row, column, preventUpdateDesiredColumn) { this.moveCursorToScreen = function(row, column, keepDesiredColumn) {
var pos = this.session.screenToDocumentPosition(row, column); var pos = this.session.screenToDocumentPosition(row, column);
row = pos.row; this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);
column = pos.column;
this.moveCursorTo(row, column, preventUpdateDesiredColumn);
}; };
// remove listeners from document // remove listeners from document