lazy highlighter for selected word
This commit is contained in:
parent
b1bb0b9ccc
commit
9d0f2e41e8
6 changed files with 105 additions and 108 deletions
|
|
@ -523,7 +523,7 @@ var Editor = function(renderer, session) {
|
|||
* Emitted when a selection has changed.
|
||||
**/
|
||||
this.onSelectionChange = function(e) {
|
||||
var session = this.getSession();
|
||||
var session = this.session;
|
||||
|
||||
if (session.$selectionMarker) {
|
||||
session.removeMarker(session.$selectionMarker);
|
||||
|
|
@ -538,12 +538,40 @@ var Editor = function(renderer, session) {
|
|||
this.$updateHighlightActiveLine();
|
||||
}
|
||||
|
||||
var self = this;
|
||||
if (this.$highlightSelectedWord && !this.$wordHighlightTimer)
|
||||
this.$wordHighlightTimer = setTimeout(function() {
|
||||
self.session.$mode.highlightSelection(self);
|
||||
self.$wordHighlightTimer = null;
|
||||
}, 30, this);
|
||||
var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp()
|
||||
this.session.highlight(re);
|
||||
};
|
||||
|
||||
this.$getSelectionHighLightRegexp = function() {
|
||||
var session = this.session;
|
||||
|
||||
var selection = this.getSelectionRange();
|
||||
if (selection.isEmpty() || selection.isMultiLine())
|
||||
return;
|
||||
|
||||
var startOuter = selection.start.column - 1;
|
||||
var endOuter = selection.end.column + 1;
|
||||
var line = session.getLine(selection.start.row);
|
||||
var lineCols = line.length;
|
||||
var needle = line.substring(Math.max(startOuter, 0),
|
||||
Math.min(endOuter, lineCols));
|
||||
|
||||
// Make sure the outer characters are not part of the word.
|
||||
if ((startOuter >= 0 && /^[\w\d]/.test(needle)) ||
|
||||
(endOuter <= lineCols && /[\w\d]$/.test(needle)))
|
||||
return;
|
||||
|
||||
needle = line.substring(selection.start.column, selection.end.column);
|
||||
if (!/^[\w\d]+$/.test(needle))
|
||||
return;
|
||||
|
||||
var re = this.$search.$assembleRegExp({
|
||||
wholeWord: true,
|
||||
caseSensitive: true,
|
||||
needle: needle
|
||||
});
|
||||
|
||||
return re;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -917,7 +945,7 @@ var Editor = function(renderer, session) {
|
|||
|
||||
this.$highlightSelectedWord = true;
|
||||
/**
|
||||
* Editor.setHighlightSelectedWord(shouldHighlight)
|
||||
* Editor.setHighlightSelectedWord(shouldHighlight)
|
||||
* - shouldHighlight (Boolean): Set to `true` to highlight the currently selected word
|
||||
*
|
||||
* Determines if the currently selected word should be highlighted.
|
||||
|
|
@ -927,20 +955,12 @@ var Editor = function(renderer, session) {
|
|||
return;
|
||||
|
||||
this.$highlightSelectedWord = shouldHighlight;
|
||||
if (shouldHighlight) {
|
||||
this.session.getMode().highlightSelection(this);
|
||||
} else {
|
||||
this.session.getMode().clearSelectionHighlight(this);
|
||||
if (this.$wordHighlightTimer) {
|
||||
clearTimeout(this.$wordHighlightTimer);
|
||||
this.$wordHighlightTimer = null;
|
||||
}
|
||||
}
|
||||
this.$onSelectionChange();
|
||||
};
|
||||
|
||||
/**
|
||||
* Editor.getHighlightSelectedWord() -> Boolean
|
||||
*
|
||||
*
|
||||
* Returns `true` if currently highlighted words are to be highlighted.
|
||||
**/
|
||||
this.getHighlightSelectedWord = function() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue