Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ACE Editor Autocomplete - custom strings

I'm using ACE Editor within a Chrome extension. I'm using ACE's Autocomplete feature but I want to be able to completely define a list of static strings to use for the autocomplete, instead of any local strings or snippets. (In the future I might be using something more sophisticated than a static list, but for now static is fine.)

Can anyone provide some instruction on how to accomplish this? I already have autocomplete enabled and snippets off, but I'm having trouble defining a static list of strings to use.

All I have so far is:

var editor = ace.edit('propertiesText');
editor.getSession().setMode('ace/mode/properties');
var langTools = ace.require('ace/ext/language_tools');

// code here to define custom strings?

editor.setOptions({
    enableBasicAutocompletion: true
});
like image 983
russtuck91 Avatar asked May 04 '15 23:05

russtuck91


2 Answers

you need to add a completer like this

var staticWordCompleter = {
    getCompletions: function(editor, session, pos, prefix, callback) {
        var wordList = ["foo", "bar", "baz"];
        callback(null, wordList.map(function(word) {
            return {
                caption: word,
                value: word,
                meta: "static"
            };
        }));

    }
}

langTools.setCompleters([staticWordCompleter])
// or 
editor.completers = [staticWordCompleter]
//UPDATE: consider adding to completers list to not remove ace's already added completers
editor.completers.push(staticWordCompleter)
like image 109
a user Avatar answered Nov 10 '22 01:11

a user


If you want to persist the old keyword list and want to append a new list

var staticWordCompleter = {
    getCompletions: function(editor, session, pos, prefix, callback) {
        var wordList = ["foo", "bar", "baz"];
        callback(null, [...wordList.map(function(word) {
            return {
                caption: word,
                value: word,
                meta: "static"
            };
        }), ...session.$mode.$highlightRules.$keywordList.map(function(word) {
        return {
          caption: word,
          value: word,
          meta: 'keyword',
        };
      })]);

    }
}

langTools.setCompleters([staticWordCompleter])
// or 
editor.completers = [staticWordCompleter]  
like image 35
annakula achyuth Avatar answered Nov 10 '22 01:11

annakula achyuth