splitSelectionIntolines was toggling block selection instead
This commit is contained in:
parent
907b46aed1
commit
e34fb3668a
2 changed files with 70 additions and 28 deletions
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue