Is it possible to re-arrange the search providers on the GNOME Shell Activities Overview display?

I have added additional search providers (e.g., AskUbuntu, Wolfram, YouTube) in the /usr/share/gnome-shell/search_providers directory. These work great. However, the order in which they appear on the Activities Overview is not logical.

Is it possible to change the order in which search providers are displayed?

Bonus: How do I make one the default?


11.10

There is a key that is referred to in the gnome-shell search code that allows you to specify which search providers should not be displayed...

By changing the logic you can change that to be a search order list - for example

gsettings set org.gnome.shell disabled-open-search-providers "['duckduckgo.xml', 'google.xml', 'wikipedia.xml']"

enter image description here

gsettings set org.gnome.shell disabled-open-search-providers "['wikipedia.xml', 'duckduckgo.xml', 'google.xml']"

enter image description here

how to

First make a backup copy of the search script:

sudo cp /usr/share/gnome-shell/js/ui/search.js /usr/share/gnome-shell/js/ui/search.js.backup

Now edit the search script:

gksudo gedit /usr/share/gnome-shell/js/ui/search.js

Look for the function containing the following code (it probably starts on line 325):

 _refresh: function() {
        this._providers = []; 
        let names = global.settings.get_strv(DISABLED_OPEN_SEARCH_PROVIDERS_KEY);
        let file = Gio.file_new_for_path(global.datadir + '/search_providers');
        FileUtils.listDirAsync(file, Lang.bind(this, function(files) {
            for (let i = 0; i < files.length; i++) {
                let enabled = true; 
                let name = files[i].get_name();
                for (let k = 0; k < names.length; k++)
                    if (names[k] == name)
                        enabled = false;
                if (enabled)
                    this._addProvider(name);
            }           
        }));    
    }

Change this function to be:

_refresh: function() {
        this._providers = [];
        let names = global.settings.get_strv(DISABLED_OPEN_SEARCH_PROVIDERS_KEY);
        let file = Gio.file_new_for_path(global.datadir + '/search_providers');
        FileUtils.listDirAsync(file, Lang.bind(this, function(files) {
            for (let i = 0; i < names.length; i++) {
                for (let k = 0; k < files.length; k++) 
                    if (names[i] == files[k].get_name())
                        this._addProvider(names[i])
            }               
        }));    
    }

Press Alt+F2, type 'r' and press enter. This should restart Gnome-shell). Alternatively, logout and login.

credit


Linked Questions:

  1. Is it possible to customise the search engine buttons in GNOME Shell?
  2. Is it possible to remove or replace Google search in GNOME Shell's dash?

To preserve the meaning of the gsettings variable, another possibility would be to modify search.js to order search providers files by name:

    FileUtils.listDirAsync(file, Lang.bind(this, function(files) {
        files.sort (function (first, second) {
            return first.get_name () <= second.get_name ()? -1: 1
        });

Then you would rename the files in /usr/share/gnome-shell/search_providers like

01_google.xml
02_wikipedia.xml
... 

Carlo.


I found that it arranges them in time order. The search provider which was added latest is first. So if you want to bring Google first just move it somewhere, refresh (Alt+F2 and R), recopy it to the folder and refresh again.