function addSearchAlias(alias, prompt, search_url, search_leader_key, suggestion_url, callback_to_parse_suggestion, only_this_site_key, options) {
        if (!/^[\u0000-\u007f]*$/.test(alias)) {
            throw `Invalid alias ${alias}, which must be ASCII characters.`;
        }
        if (!isInUIFrame() && front.addSearchAlias) {
            front.addSearchAlias(alias, prompt, search_url, suggestion_url, callback_to_parse_suggestion, options);
        }
        const skipMaps = options?.skipMaps ?? false
        if (skipMaps) {
          return
        }
        function ssw() {
            searchSelectedWith(search_url);
        }
        mapkey((search_leader_key || 's') + alias, ['#6Search selected with {0}', prompt], ssw);
        mapkey('o' + alias, ['#8Open Omnibar for {0} Search', prompt], () => {
            front.openOmnibar({type: "SearchEngine", extra: alias});
        });
        vmapkey((search_leader_key || 's') + alias, '', ssw);
        function ssw2() {
            searchSelectedWith(search_url, true);
        }
        mapkey((search_leader_key || 's') + (only_this_site_key || 'o') + alias, '', ssw2);
        vmapkey((search_leader_key || 's') + (only_this_site_key || 'o') + alias, '', ssw2);

        var capitalAlias = alias.toUpperCase();
        if (capitalAlias !== alias) {
            function ssw4() {
                searchSelectedWith(search_url, false, true, alias);
            }
            mapkey((search_leader_key || 's') + capitalAlias, '', ssw4);
            vmapkey((search_leader_key || 's') + capitalAlias, '', ssw4);
            function ssw5() {
                searchSelectedWith(search_url, true, true, alias);
            }
            mapkey((search_leader_key || 's') + (only_this_site_key || 'o') + capitalAlias, '', ssw5);
            vmapkey((search_leader_key || 's') + (only_this_site_key || 'o') + capitalAlias, '', ssw5);
        }
    }
Add a search engine alias into Omnibar.

@param {string} alias the key to trigger this search engine, one or several chars, used as search alias, when you input the string and press `space` in omnibar, the search engine will be triggered.
@param {string} prompt a caption to be placed in front of the omnibar.
@param {string} search_url the URL of the search engine, for example, `https://www.s.com/search.html?query=`, if there are extra parameters for the search engine, you can use it as `https://www.s.com/search.html?query={0}&type=cs` or `https://www.s.com/search.html?type=cs&query=`(since order of URL parameters usually does not matter).
@param {string} [search_leader_key=s] `<search_leader_key><alias>` in normal mode will search selected text with this search engine directly without opening the omnibar, for example `sd`.
@param {string} [suggestion_url=null] the URL to fetch suggestions in omnibar when this search engine is triggered.
@param {function} [callback_to_parse_suggestion=null] a function to parse the response from `suggestion_url` and return a list of strings as suggestions. Receives two arguments: `response`, the first argument, is an object containing a property `text` which holds the text of the response; and `request`, the second argument, is an object containing the properties `query` which is the text of the query and `url` which is the formatted URL for the request.
@param {string} [only_this_site_key=o] `<search_leader_key><only_this_site_key><alias>` in normal mode will search selected text within current site with this search engine directly without opening the omnibar, for example `sod`.
@param {object} [options=null] `favicon_url` URL for favicon for this search engine, `skipMaps` if `true` disable creating key mappings for this search engine

@example
addSearchAlias('d', 'duckduckgo', 'https://duckduckgo.com/?q=', 's', 'https://duckduckgo.com/ac/?q=', function(response) {
    var res = JSON.parse(response.text);
    return res.map(function(r){
        return r.phrase;
    });
});