diff --git a/xP/public/xP.js b/xP/public/xP.js index abef57a..7bcfeb2 100644 --- a/xP/public/xP.js +++ b/xP/public/xP.js @@ -421,16 +421,28 @@ let BufferContainer = { } let Input = { + counter: 0, + stamp: textarea => { + return [Input.counter, + textarea.selectionStart, textarea.selectionEnd, textarea.value] + }, + complete: textarea => { if (textarea.selectionStart !== textarea.selectionEnd) return false + // Cancel any previous autocomplete, and ensure applicability. + Input.counter++ + let state = Input.stamp(textarea) rpc.send({ command: 'BufferComplete', bufferName: bufferCurrent, text: textarea.value, position: textarea.selectionEnd, }).then(resp => { + if (!Input.stamp(textarea).every((v, k) => v === state[k])) + return + // TODO: Somehow display remaining options, or cycle through. if (resp.completions.length) textarea.setRangeText(resp.completions[0], @@ -456,8 +468,6 @@ let Input = { // TODO: And perhaps on other actions, too. rpc.send({command: 'Active'}) - // TODO: Cancel any current autocomplete. - let textarea = event.currentTarget let handled = false switch (event.keyCode) {