From 281a1ca2a8efb2c9447f76c04a066416b9c48fde Mon Sep 17 00:00:00 2001 From: Vlad Zinculescu Date: Fri, 19 Oct 2012 12:56:44 +0200 Subject: [PATCH 1/2] add sortLines functionality in all modes --- lib/ace/commands/default_commands.js | 5 ++++ lib/ace/editor.js | 35 +++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/ace/commands/default_commands.js b/lib/ace/commands/default_commands.js index ab7f6688..9da2dd1d 100644 --- a/lib/ace/commands/default_commands.js +++ b/lib/ace/commands/default_commands.js @@ -321,6 +321,11 @@ exports.commands = [{ bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), exec: function(editor) { editor.duplicateSelection(); }, multiSelectAction: "forEach" +}, { + name: "sortlines", + bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), + exec: function(editor) { editor.sortLines(); }, + multiSelectAction: "forEach" }, { name: "togglecomment", bindKey: bindKey("Ctrl-/", "Command-/"), diff --git a/lib/ace/editor.js b/lib/ace/editor.js index 1010a49d..cbfe06ac 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -1277,10 +1277,43 @@ var Editor = function(renderer, session) { }; /** - * Editor.toggleCommentLines() + * Editor.sortLines() * * Given the currently selected range, this function either comments all lines or uncomments all lines (depending on whether it's commented or not). **/ + this.sortLines = function() { + var state = this.session.getState(this.getCursorPosition().row); + var rows = this.$getSelectedRows(); + var doc = this.session; + + var lines = []; + for(i = rows.first; i <= rows.last; i++) { + lines.push( doc.getLine(i) ); + } + lines.sort( + function(a, b) { + if (a.toLowerCase() < b.toLowerCase()) return -1; + if (a.toLowerCase() > b.toLowerCase()) return 1; + return 0; + } + ); + + var deleteRange = new Range(0, 0, 0, 0); + for (var i=rows.first; i<= rows.last; i++) + { + var line = doc.getLine(i); + deleteRange.start.row = i; + deleteRange.end.row = i; + deleteRange.end.column = line.length; + doc.replace(deleteRange, lines[i-rows.first]); + } + }; + + /** + * Editor.toggleCommentLines() + * + * Given the currently selected range, this function sorts the lines alphabetically ascending. + **/ this.toggleCommentLines = function() { var state = this.session.getState(this.getCursorPosition().row); var rows = this.$getSelectedRows(); From 27ac92f9b00ab02fab0af24a9b5a1e7526b6fc15 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 21 Oct 2012 00:45:45 +0400 Subject: [PATCH 2/2] cleanup --- lib/ace/editor.js | 66 +++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/lib/ace/editor.js b/lib/ace/editor.js index cbfe06ac..937e0e73 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -1276,43 +1276,35 @@ var Editor = function(renderer, session) { this.session.outdentRows(selection.getRange()); }; - /** - * Editor.sortLines() - * - * Given the currently selected range, this function either comments all lines or uncomments all lines (depending on whether it's commented or not). - **/ + // TODO: move out of core when we have good mechanism for managing extensions this.sortLines = function() { - var state = this.session.getState(this.getCursorPosition().row); var rows = this.$getSelectedRows(); - var doc = this.session; + var session = this.session; var lines = []; - for(i = rows.first; i <= rows.last; i++) { - lines.push( doc.getLine(i) ); - } - lines.sort( - function(a, b) { - if (a.toLowerCase() < b.toLowerCase()) return -1; - if (a.toLowerCase() > b.toLowerCase()) return 1; - return 0; - } - ); + for (i = rows.first; i <= rows.last; i++) + lines.push(session.getLine(i)); + + lines.sort(function(a, b) { + if (a.toLowerCase() < b.toLowerCase()) return -1; + if (a.toLowerCase() > b.toLowerCase()) return 1; + return 0; + }); var deleteRange = new Range(0, 0, 0, 0); - for (var i=rows.first; i<= rows.last; i++) - { - var line = doc.getLine(i); + for (var i = rows.first; i <= rows.last; i++) { + var line = session.getLine(i); deleteRange.start.row = i; deleteRange.end.row = i; deleteRange.end.column = line.length; - doc.replace(deleteRange, lines[i-rows.first]); + session.replace(deleteRange, lines[i-rows.first]); } }; /** * Editor.toggleCommentLines() * - * Given the currently selected range, this function sorts the lines alphabetically ascending. + * Given the currently selected range, this function either comments all lines or uncomments all lines (depending on whether it's commented or not). **/ this.toggleCommentLines = function() { var state = this.session.getState(this.getCursorPosition().row); @@ -1341,20 +1333,20 @@ var Editor = function(renderer, session) { this.duplicateSelection = function() { var sel = this.selection; - var doc = this.session; - var range = sel.getRange(); - if (range.isEmpty()) { - var row = range.start.row; - doc.duplicateLines(row, row); - } else { - var reverse = sel.isBackwards() - var point = sel.isBackwards() ? range.start : range.end; - var endPoint = doc.insert(point, doc.getTextRange(range), false); - range.start = point; - range.end = endPoint; - - sel.setSelectionRange(range, reverse) - } + var doc = this.session; + var range = sel.getRange(); + if (range.isEmpty()) { + var row = range.start.row; + doc.duplicateLines(row, row); + } else { + var reverse = sel.isBackwards() + var point = sel.isBackwards() ? range.start : range.end; + var endPoint = doc.insert(point, doc.getTextRange(range), false); + range.start = point; + range.end = endPoint; + + sel.setSelectionRange(range, reverse) + } }; /** related to: EditSession.moveLinesDown @@ -2134,4 +2126,4 @@ var Editor = function(renderer, session) { exports.Editor = Editor; -}); +}); \ No newline at end of file