diff --git a/lib/ace/css/editor.css b/lib/ace/css/editor.css index c2f3abff..82401624 100644 --- a/lib/ace/css/editor.css +++ b/lib/ace/css/editor.css @@ -143,3 +143,8 @@ position: absolute; z-index: 2; } + +.ace_marker-layer .ace_selected_word { + position: absolute; + z-index: 6; +} diff --git a/lib/ace/editor.js b/lib/ace/editor.js index 9d785ca7..7cc6cdb7 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -74,6 +74,7 @@ var Editor =function(renderer, session) { this.$selectionMarker = null; this.$highlightLineMarker = null; this.$blockScrolling = 0; + this.$selectedWordMarkers = []; this.$search = new Search().set({ wrap: true @@ -235,6 +236,36 @@ var Editor =function(renderer, session) { }, 10); }; + this.highlightSelection = function() { + if (this.$selectedWordMarkers.length) + this.clearSelectionHighlight(); + + var selectedRange = this.getSelectionRange(); + if (selectedRange.isEmpty()) + return; + + var newOptions = {wrap:true, wholeWord: true}; + newOptions.needle = this.session.getTextRange(selectedRange); + if (!newOptions.needle) + return; + + var currentOptions = this.$search.getOptions(); + this.$search.set(newOptions); + + var ranges = this.$search.findAll(this.session); + this.$selectedWordMarkers = []; + ranges.forEach(function(range) { + if (!range.contains(selectedRange.start.row, selectedRange.start.column)) + this.$selectedWordMarkers.push(this.renderer.addMarker(range, "ace_selected_word")); + }, this); + }; + + this.clearSelectionHighlight = function() { + this.$selectedWordMarkers.forEach(function(marker) { + this.renderer.removeMarker(marker); + }, this); + }; + this.focus = function() { // Safari need the timeout // iOS and Firefox need it called immediately @@ -323,6 +354,7 @@ var Editor =function(renderer, session) { } this.onCursorChange(e); + this.clearSelectionHighlight(); }; this.onDocumentChangeBreakpoint = function() { diff --git a/lib/ace/mouse_handler.js b/lib/ace/mouse_handler.js index 5e836383..244fc461 100644 --- a/lib/ace/mouse_handler.js +++ b/lib/ace/mouse_handler.js @@ -146,6 +146,7 @@ var MouseHandler = function(editor) { this.onMouseDoubleClick = function(e) { this.editor.selection.selectWord(); + this.editor.highlightSelection(); this.$clickSelection = this.editor.getSelectionRange(); }; @@ -165,4 +166,4 @@ var MouseHandler = function(editor) { }).call(MouseHandler.prototype); exports.MouseHandler = MouseHandler; -}); \ No newline at end of file +}); diff --git a/lib/ace/theme/tm.css b/lib/ace/theme/tm.css index 0993335c..987901d1 100644 --- a/lib/ace/theme/tm.css +++ b/lib/ace/theme/tm.css @@ -131,6 +131,11 @@ background: rgb(232, 242, 254); } +.ace-tm .ace_marker-layer .ace_selected_word { + background: rgb(250, 250, 255); + border: 1px solid rgb(200, 200, 250); +} + .ace-tm .ace_string.ace_regex { color: rgb(255, 0, 0) -} \ No newline at end of file +}