From 21ee784ca1cc5158103671d838ddc3f94d934e00 Mon Sep 17 00:00:00 2001 From: Zef Hemel Date: Mon, 17 Mar 2014 11:38:16 +0100 Subject: [PATCH 1/2] Add autoSelect option to auto completion By setting this to `false` no completion will be selected by default and pressing `Return` will simply insert a new line, rather than the first match. --- lib/ace/autocomplete.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/ace/autocomplete.js b/lib/ace/autocomplete.js index b243727f..155ffd0d 100644 --- a/lib/ace/autocomplete.js +++ b/lib/ace/autocomplete.js @@ -40,6 +40,7 @@ var snippetManager = require("./snippets").snippetManager; var Autocomplete = function() { this.autoInsert = true; + this.autoSelect = true; this.keyboardHandler = new HashHandler(); this.keyboardHandler.bindKeys(this.commands); @@ -69,8 +70,8 @@ var Autocomplete = function() { this.popup.setData(this.completions.filtered); var renderer = editor.renderer; + this.popup.setRow(this.autoSelect ? 0 : -1); if (!keepPopupPosition) { - this.popup.setRow(0); this.popup.setFontSize(editor.getFontSize()); var lineHeight = renderer.layerConfig.lineHeight; @@ -171,7 +172,13 @@ var Autocomplete = function() { "Esc": function(editor) { editor.completer.detach(); }, "Space": function(editor) { editor.completer.detach(); editor.insert(" ");}, - "Return": function(editor) { editor.completer.insertMatch(); }, + "Return": function(editor) { + if(editor.completer.popup.getRow() > -1) { + editor.completer.insertMatch(); + } else { + editor.insert("\n"); + } + }, "Shift-Return": function(editor) { editor.completer.insertMatch(true); }, "Tab": function(editor) { editor.completer.insertMatch(); }, From 750e53fab237fabc6e45a1597dc6dcb6b643e859 Mon Sep 17 00:00:00 2001 From: Zef Hemel Date: Thu, 20 Mar 2014 15:31:02 +0100 Subject: [PATCH 2/2] Now with space after the if --- lib/ace/autocomplete.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/ace/autocomplete.js b/lib/ace/autocomplete.js index 155ffd0d..1086c3d9 100644 --- a/lib/ace/autocomplete.js +++ b/lib/ace/autocomplete.js @@ -48,7 +48,7 @@ var Autocomplete = function() { this.changeListener = this.changeListener.bind(this); this.mousedownListener = this.mousedownListener.bind(this); this.mousewheelListener = this.mousewheelListener.bind(this); - + this.changeTimer = lang.delayedCall(function() { this.updateCompletions(true); }.bind(this)) @@ -75,10 +75,10 @@ var Autocomplete = function() { this.popup.setFontSize(editor.getFontSize()); var lineHeight = renderer.layerConfig.lineHeight; - - var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); + + var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); pos.left -= this.popup.getTextLeftOffset(); - + var rect = editor.container.getBoundingClientRect(); pos.top += rect.top - renderer.layerConfig.offset; pos.left += rect.left - editor.renderer.scrollLeft; @@ -95,7 +95,7 @@ var Autocomplete = function() { this.editor.off("mousedown", this.mousedownListener); this.editor.off("mousewheel", this.mousewheelListener); this.changeTimer.cancel(); - + if (this.popup) this.popup.hide(); @@ -173,7 +173,7 @@ var Autocomplete = function() { "Esc": function(editor) { editor.completer.detach(); }, "Space": function(editor) { editor.completer.detach(); editor.insert(" ");}, "Return": function(editor) { - if(editor.completer.popup.getRow() > -1) { + if (editor.completer.popup.getRow() > -1) { editor.completer.insertMatch(); } else { editor.insert("\n"); @@ -189,10 +189,10 @@ var Autocomplete = function() { this.gatherCompletions = function(editor, callback) { var session = editor.getSession(); var pos = editor.getCursorPosition(); - + var line = session.getLine(pos.row); var prefix = util.retrievePrecedingIdentifier(line, pos.column); - + this.base = editor.getCursorPosition(); this.base.column -= prefix.length; @@ -215,7 +215,7 @@ var Autocomplete = function() { this.showPopup = function(editor) { if (this.editor) this.detach(); - + this.activated = true; this.editor = editor; @@ -230,10 +230,10 @@ var Autocomplete = function() { editor.on("blur", this.blurListener); editor.on("mousedown", this.mousedownListener); editor.on("mousewheel", this.mousewheelListener); - + this.updateCompletions(); }; - + this.updateCompletions = function(keepPopupPosition) { if (keepPopupPosition && this.base && this.completions) { var pos = this.editor.getCursorPosition(); @@ -250,7 +250,7 @@ var Autocomplete = function() { var matches = results && results.matches; if (!matches || !matches.length) return this.detach(); - // TODO reenable this when we have proper change tracking + // TODO reenable this when we have proper change tracking // if (matches.length == 1) // return this.insertMatch(matches[0]); @@ -306,16 +306,16 @@ var FilteredList = function(array, filterText, mutateData) { matches = matches.sort(function(a, b) { return b.exactMatch - a.exactMatch || b.score - a.score; }); - + // make unique var prev = null; matches = matches.filter(function(item){ - var caption = item.value || item.caption || item.snippet; + var caption = item.value || item.caption || item.snippet; if (caption === prev) return false; prev = caption; return true; }); - + this.filtered = matches; }; this.filterCompletions = function(items, needle) {