From 901585024b89da34e42c5887b0b8c16cc8745ca0 Mon Sep 17 00:00:00 2001 From: Robert Krahn Date: Sun, 10 Mar 2013 10:08:34 -0700 Subject: [PATCH] [incremental search] refining forward/backward behavior --- lib/ace/incremental_search.js | 13 +++++++------ lib/ace/incremental_search_test.js | 7 +++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/ace/incremental_search.js b/lib/ace/incremental_search.js index 0c3d61a2..2018034b 100644 --- a/lib/ace/incremental_search.js +++ b/lib/ace/incremental_search.js @@ -105,14 +105,15 @@ oop.inherits(IncrementalSearch, Search); } else { options.start = moveToNext ? range.start : range.end; } - range = this.find(session) || range; + var oldRange = this.$editor.selection.toOrientedRange(); + var found = this.find(session); // if (dir === "backward") range = Range.fromPoints(range.end, range.start); - this.$editor.selection.setRange(range, options.backwards); - this.$currentRange = range; + this.$editor.selection.setRange(found || oldRange || range, options.backwards); + if (found && moveToNext) this.$currentRange = found; session.highlight(options.re); - return range; + return found || oldRange || range; } this.addChar = function(c) { @@ -128,6 +129,7 @@ oop.inherits(IncrementalSearch, Search); } iSearch.next = function(backwards) { + this.$currentRange = this.$editor.selection.toOrientedRange(); this.$options.backwards = backwards; return this.highlightAndFindWithNeedle(true); } @@ -173,8 +175,7 @@ oop.inherits(IncrementalSearch, Search); if (key === 's' || key === 'r') { if (this.$options.needle.length === 0) this.$options.needle = this.$prevNeedle || ''; - this.$options.backwards = key === 'r'; - this.forward(); + this.next(key === 'r'); result = stop; } if (key === 'g') { this.deactivate(true); this.message(''); return stop; } diff --git a/lib/ace/incremental_search_test.js b/lib/ace/incremental_search_test.js index 58d927c2..0f48060d 100644 --- a/lib/ace/incremental_search_test.js +++ b/lib/ace/incremental_search_test.js @@ -130,6 +130,13 @@ module.exports = { iSearch.addChar('1'); iSearch.addChar('2'); var range = iSearch.addChar('x'); testRanges("Range: [0/3] -> [0/5]", [range], "range"); + }, + + "test: backwards search" : function() { + editor.moveCursorTo(1,0); + iSearch.activate(editor, true); + iSearch.addChar('1'); var range = iSearch.addChar('2');; + testRanges("Range: [0/3] -> [0/5]", [range], "range"); } // // "test: find simple text in document" : function() {