More robust change detection for autocomplete.

- accurately detect when labels are involved in 'remove' event
This commit is contained in:
Shane Kilkelly 2017-05-25 09:33:15 +01:00
parent 1ba8b702ad
commit ea9a0dda83

View file

@ -121,27 +121,33 @@ define [
onChange: (change) ->
cursorPosition = @editor.getCursorPosition()
end = change.end
# Check that this change was made by us, not a collaborator
# (Cursor is still one place behind)
# NOTE: this is also the case when a user backspaces over a highlighted region
if end.row == cursorPosition.row and end.column == cursorPosition.column + 1
if change.action == "insert"
range = new Range(end.row, 0, end.row, end.column)
lineUpToCursor = @editor.getSession().getTextRange(range)
commandFragment = getLastCommandFragment(lineUpToCursor)
# Check if user has backspaced/deleted a highlighted region of text
# and see if that contains a `\label{}`
if change.action == 'remove'
if _.any(change.lines, (line) -> line.match(/\\label\{[^\}\n\\]{0,80}\}/))
@labelsManager.scheduleLoadLabelsFromOpenDoc()
if commandFragment? and commandFragment.length > 2
if commandFragment.startsWith('\\label{')
@labelsManager.scheduleLoadLabelsFromOpenDoc()
# Check that this change was made by us, not a collaborator
# (Cursor is still one place behind)
# NOTE: this is also the case when a user backspaces over a highlighted region
if (
change.action == "insert" and
end.row == cursorPosition.row and
end.column == cursorPosition.column + 1
)
if commandFragment? and commandFragment.length > 2
if commandFragment.startsWith('\\label{')
@labelsManager.scheduleLoadLabelsFromOpenDoc()
setTimeout () =>
@editor.execCommand("startAutocomplete")
, 0
else
# Check if user has backspaced/deleted a highlighted region of text
# and see if that contains a `\label{}`
if change.action == 'remove'
if _.any(change.lines, (line) -> line.match(/\\label{.*}/))
@labelsManager.scheduleLoadLabelsFromOpenDoc()
monkeyPatchAutocomplete: () ->
Autocomplete = ace.require("ace/autocomplete").Autocomplete