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();
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;
this.multiSelect.addRange(range);
return;
@ -703,7 +703,11 @@ var Editor = require("./editor").Editor;
var newRange = find(session, needle, dir);
if (newRange) {
newRange.cursor = dir == -1 ? newRange.start : newRange.end;
this.$blockScrolling += 1;
this.session.unfold(newRange);
this.multiSelect.addRange(newRange);
this.$blockScrolling -= 1;
this.renderer.scrollCursorIntoView(null, 0.5);
}
if (skip)
this.multiSelect.substractPoint(range.cursor);
@ -721,11 +725,27 @@ var Editor = require("./editor").Editor;
if (!ranges.length) {
var range = this.selection.getRange();
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);
lines = this.$reAlignText(lines);
this.session.doc.insertLines(fr, lines);
range.start.column = 0;
range.end.column = lines[lines.length - 1].length;
lines = this.$reAlignText(lines, guessRange);
this.session.doc.insert({row: fr, column: 0}, lines.join("\n") + "\n");
if (!guessRange) {
range.start.column = 0;
range.end.column = lines[lines.length - 1].length;
}
this.selection.setRange(range);
} else {
// 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 startW, textW, endW;
@ -800,7 +820,8 @@ var Editor = require("./editor").Editor;
endW = m[3].length;
return m;
}).map(isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);
}).map(forceLeft ? alignLeft :
isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);
function spaces(n) {
return lang.stringRepeat(" ", n);