From 5607fc9de2f9e920eb2f5fdd57349b06cb04e265 Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 5 Nov 2013 20:47:30 +0400 Subject: [PATCH] automatically pick range for align command --- lib/ace/multi_select.js | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/lib/ace/multi_select.js b/lib/ace/multi_select.js index a811b6be..2152275e 100644 --- a/lib/ace/multi_select.js +++ b/lib/ace/multi_select.js @@ -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);