automatically pick range for align command

This commit is contained in:
nightwing 2013-11-05 20:47:30 +04:00
commit 5607fc9de2

View file

@ -693,7 +693,7 @@ var Editor = require("./editor").Editor;
var range = sel.toOrientedRange(); var range = sel.toOrientedRange();
if (range.isEmpty()) { if (range.isEmpty()) {
var range = session.getWordRange(range.start.row, range.start.column); range = session.getWordRange(range.start.row, range.start.column);
range.cursor = dir == -1 ? range.start : range.end; range.cursor = dir == -1 ? range.start : range.end;
this.multiSelect.addRange(range); this.multiSelect.addRange(range);
return; return;
@ -703,7 +703,11 @@ var Editor = require("./editor").Editor;
var newRange = find(session, needle, dir); var newRange = find(session, needle, dir);
if (newRange) { if (newRange) {
newRange.cursor = dir == -1 ? newRange.start : newRange.end; newRange.cursor = dir == -1 ? newRange.start : newRange.end;
this.$blockScrolling += 1;
this.session.unfold(newRange);
this.multiSelect.addRange(newRange); this.multiSelect.addRange(newRange);
this.$blockScrolling -= 1;
this.renderer.scrollCursorIntoView(null, 0.5);
} }
if (skip) if (skip)
this.multiSelect.substractPoint(range.cursor); this.multiSelect.substractPoint(range.cursor);
@ -721,11 +725,27 @@ var Editor = require("./editor").Editor;
if (!ranges.length) { if (!ranges.length) {
var range = this.selection.getRange(); var range = this.selection.getRange();
var fr = range.start.row, lr = range.end.row; var fr = range.start.row, lr = range.end.row;
var guessRange = fr == lr;
if (guessRange) {
var max = this.session.getLength();
var line;
do {
line = this.session.getLine(lr);
} while (/[=:]/.test(line) && ++lr < max);
do {
line = this.session.getLine(fr);
} while (/[=:]/.test(line) && --fr > 0);
if (fr < 0) fr = 0;
if (lr >= max) lr = max - 1;
}
var lines = this.session.doc.removeLines(fr, lr); var lines = this.session.doc.removeLines(fr, lr);
lines = this.$reAlignText(lines); lines = this.$reAlignText(lines, guessRange);
this.session.doc.insertLines(fr, lines); this.session.doc.insert({row: fr, column: 0}, lines.join("\n") + "\n");
range.start.column = 0; if (!guessRange) {
range.end.column = lines[lines.length - 1].length; range.start.column = 0;
range.end.column = lines[lines.length - 1].length;
}
this.selection.setRange(range); this.selection.setRange(range);
} else { } else {
// filter out ranges on same row // filter out ranges on same row
@ -771,7 +791,7 @@ var Editor = require("./editor").Editor;
} }
}; };
this.$reAlignText = function(lines) { this.$reAlignText = function(lines, forceLeft) {
var isLeftAligned = true, isRightAligned = true; var isLeftAligned = true, isRightAligned = true;
var startW, textW, endW; var startW, textW, endW;
@ -800,7 +820,8 @@ var Editor = require("./editor").Editor;
endW = m[3].length; endW = m[3].length;
return m; return m;
}).map(isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); }).map(forceLeft ? alignLeft :
isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);
function spaces(n) { function spaces(n) {
return lang.stringRepeat(" ", n); return lang.stringRepeat(" ", n);