splitSelectionIntolines was toggling block selection instead

This commit is contained in:
nightwing 2012-04-26 23:49:32 +04:00
commit e34fb3668a
2 changed files with 70 additions and 28 deletions

View file

@ -117,7 +117,7 @@ var EditSession = require("./edit_session").EditSession;
range && this.fromOrientedRange(range);
};
/**
* Selection.addRange(pos) -> Range
* pos: {row, column}
@ -193,6 +193,37 @@ var EditSession = require("./edit_session").EditSession;
};
this.splitIntoLines = function () {
if (this.rangeCount > 1) {
var ranges = this.rangeList.ranges;
var lastRange = ranges[ranges.length - 1];
var range = Range.fromPoints(ranges[0].start, lastRange.end);
this.toSingleRange();
this.setSelectionRange(range, lastRange.cursor == lastRange.start);
} else {
var range = this.getRange();
var startRow = range.start.row;
var endRow = range.end.row;
if (startRow == endRow)
return;
var rectSel = [];
var r = this.getLineRange(startRow, true);
r.start.column = range.start.column;
rectSel.push(r);
for (var i = startRow + 1; i < endRow; i++)
rectSel.push(this.getLineRange(i, true));
r = this.getLineRange(endRow, true);
r.end.column = range.end.column;
rectSel.push(r);
rectSel.forEach(this.addRange, this);
}
};
this.toggleBlockSelection = function () {
if (this.rangeCount > 1) {
var ranges = this.rangeList.ranges;
var lastRange = ranges[ranges.length - 1];
@ -346,13 +377,13 @@ var Editor = require("./editor").Editor;
this.renderer.updateCursor();
this.renderer.updateBackMarkers();
};
this.$onRemoveRange = function(e) {
this.removeSelectionMarkers(e.ranges);
this.renderer.updateCursor();
this.renderer.updateBackMarkers();
};
this.$onMultiSelect = function(e) {
if (this.inMultiSelectMode)
return;
@ -365,7 +396,7 @@ var Editor = require("./editor").Editor;
this.renderer.updateCursor();
this.renderer.updateBackMarkers();
};
this.$onSingleSelect = function(e) {
if (this.session.multiSelect.inVirtualMode)
return;
@ -433,7 +464,7 @@ var Editor = require("./editor").Editor;
this.onCursorChange();
this.onSelectionChange();
};
/**
* Editor.exitMultiSelectMode() -> Void
*
@ -465,29 +496,29 @@ var Editor = require("./editor").Editor;
this._emit("paste", text);
if (!this.inMultiSelectMode)
return this.insert(text);
var lines = text.split(this.session.getDocument().getNewLineCharacter());
var ranges = this.selection.rangeList.ranges;
if (lines.length > ranges.length) {
this.commands.exec("insertstring", this, text);
return;
}
for (var i = ranges.length; i--; ) {
var range = ranges[i];
if (!range.isEmpty())
this.session.remove(range);
this.session.insert(range.start, lines[i]);
}
};
/**
* Editor.findAll(dir, options) -> Number
* - needle: text to find
* - options: search options
* - additive: keeps
* - additive: keeps
*
* finds and selects all the occurencies of needle
* returns number of found ranges
@ -503,10 +534,10 @@ var Editor = require("./editor").Editor;
this.$blockScrolling += 1;
var selection = this.multiSelect;
if (!additive)
selection.toSingleRange(ranges[0]);
for (var i = ranges.length; i--; )
selection.addRange(ranges[i], true);
@ -565,7 +596,7 @@ var Editor = require("./editor").Editor;
* Editor.transposeSelections(dir) -> Void
* - dir: direction to rotate selections
*
* contents
* contents
* empty ranges are expanded to word
**/
this.transposeSelections = function(dir) {
@ -584,7 +615,7 @@ var Editor = require("./editor").Editor;
}
}
sel.mergeOverlappingRanges();
var words = [];
for (var i = all.length; i--; ) {
var range = all[i];
@ -695,7 +726,7 @@ function MultiSelect(editor) {
editor.on("mousedown", onMouseDown);
editor.commands.addCommands(exports.commands.defaultCommands);
addAltCursorListeners(editor);
}
@ -713,7 +744,7 @@ function addAltCursorListeners(editor){
contentEl.style.cursor = "";
}
});
el.addEventListener("keyup", reset);
el.addEventListener("blur", reset);
function reset() {

View file

@ -243,10 +243,17 @@ var Selection = function(session) {
this.$moveSelection(this.moveCursorWordLeft);
};
this.getWordRange = function(row, column) {
if (typeof column == "undefined") {
var cursor = row || this.selectionLead;
row = cursor.row;
column = cursor.column;
}
return this.session.getWordRange(row, column);
};
this.selectWord = function() {
var cursor = this.getCursor();
var range = this.session.getWordRange(cursor.row, cursor.column);
this.setSelectionRange(range);
this.setSelectionRange(this.getWordRange());
};
// Selects a word including its right whitespace
@ -256,8 +263,8 @@ var Selection = function(session) {
this.setSelectionRange(range);
};
this.selectLine = function() {
var rowStart = this.selectionLead.row;
this.getLineRange = function(row, excludeLastChar) {
var rowStart = typeof row == "number" ? row : this.selectionLead.row;
var rowEnd;
var foldLine = this.session.getFoldLine(rowStart);
@ -267,10 +274,14 @@ var Selection = function(session) {
} else {
rowEnd = rowStart;
}
this.setSelectionAnchor(rowStart, 0);
this.$moveSelection(function() {
this.moveCursorTo(rowEnd + 1, 0);
});
if (excludeLastChar)
return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);
else
return new Range(rowStart, 0, rowEnd + 1, 0);
};
this.selectLine = function() {
this.setSelectionRange(this.getLineRange());
};
this.moveCursorUp = function() {
@ -532,14 +543,14 @@ var Selection = function(session) {
else
this.moveCursorShortWordRight();
};
this.moveCursorWordLeft = function() {
if (this.session.$selectLongWords)
this.moveCursorLongWordLeft();
else
this.moveCursorShortWordLeft();
};
this.moveCursorBy = function(rows, chars) {
var screenPos = this.session.documentToScreenPosition(
this.selectionLead.row,