diff --git a/demo/kitchen-sink/modelist.js b/demo/kitchen-sink/modelist.js index 74e692d0..f35354dd 100644 --- a/demo/kitchen-sink/modelist.js +++ b/demo/kitchen-sink/modelist.js @@ -98,7 +98,7 @@ var modesByName = { tex: ["Tex" , "tex"], text: ["Text" , "txt"], textile: ["Textile" , "textile"], - tm_snippet: ["tmSnippet" , "tmSnippet"], + tmsnippet: ["tmSnippet" , "tmSnippet"], toml: ["toml" , "toml"], typescript: ["Typescript" , "typescript|ts|str"], vbscript: ["VBScript" , "vbs"], diff --git a/lib/ace/snippets.js b/lib/ace/snippets.js index b8860757..3f227fe5 100644 --- a/lib/ace/snippets.js +++ b/lib/ace/snippets.js @@ -510,7 +510,7 @@ var TabstopManager = function(editor) { return editor.tabstopManager; editor.tabstopManager = this; this.$onChange = this.onChange.bind(this); - this.$onChangeSelection = this.onChangeSelection.bind(this); + this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; this.$onChangeSession = this.onChangeSession.bind(this); this.$onAfterExec = this.onAfterExec.bind(this); this.attach(editor); @@ -606,31 +606,29 @@ var TabstopManager = function(editor) { var fmt = exports.SnippetManager.tmStrFormat(text, range.original) session.replace(range, fmt); } + this.$inChange = false; }; this.onAfterExec = function(e) { if (e.command && !e.command.readOnly) this.updateLinkedFields(); }; this.onChangeSelection = function() { - setTimeout(function() { - if (!this.editor) - return - var lead = this.editor.selection.lead; - var anchor = this.editor.selection.anchor; - var isEmpty = this.editor.selection.isEmpty(); - for (var i = this.ranges.length; i--;) { - var containsLead = this.ranges[i].contains(lead.row, lead.column); - var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); - if (containsLead && containsAnchor) - return; - } - this.detach(); - }.bind(this)); + if (!this.editor) + return + var lead = this.editor.selection.lead; + var anchor = this.editor.selection.anchor; + var isEmpty = this.editor.selection.isEmpty(); + for (var i = this.ranges.length; i--;) { + var containsLead = this.ranges[i].contains(lead.row, lead.column); + var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); + if (containsLead && containsAnchor) + return; + } + this.detach(); }; this.onChangeSession = function() { this.detach(); }; - this.tabNext = function(dir) { var max = this.tabstops.length - 1; var index = this.index + (dir || 1);