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();
|
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);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue