automatically pick range for align command
This commit is contained in:
parent
5a26604657
commit
5607fc9de2
1 changed files with 28 additions and 7 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue