Greasy Fork is available in English.

Focus Search Field

Allows you to focus the search field on any website by using a keyboard shortcut (Ctrl + ;)

// ==UserScript==
// @name         Focus Search Field
// @namespace    http://tampermonkey.net/
// @version      0.8
// @description  Allows you to focus the search field on any website by using a keyboard shortcut (Ctrl + ;)
// @author       You
// @match        *://*/*
// @grant        none
// @require      https://code.jquery.com/jquery-2.2.4.min.js
// ==/UserScript==


(function ($, undefined) {
  $(function () {

    'use strict';
    var inputTypes = [
        '[type=search]',
        '[type=text]',
        '[type!=hidden][type!=submit]',
    ];

    var inputSelectors = [
        'input[name=q]',
        'input[name=query]',
        'input[name=search]',
        'input[name*=search]',
        'input#q',
        'input#query',
        'input#search',
        'input.search',
        'input.query',
        'input[id*=search]',
        'input[class*=search]',
        'input[placeholder*=search]',
        'input[placeholder*=Search]',
        'div.search input',
        'div[class*=search] input',
        'textarea[name=q]',
    ];

    var searchFields = [];

    var searchIndex = null;

    var findSearchField = function() {
        if (searchFields.length) {
            console.info(searchFields.length + ' search fields reading from cache');
            return searchFields;
        }
        inputTypes.forEach(function(type) {
            inputSelectors.forEach(function(selector) {
                var result = $(selector+type+':visible');
                searchFields = searchFields.concat(result.toArray());
            });
        });
        if (!searchFields.length) {
            console.info('search field not found');
        } else {
            // remove duplicates
            searchFields = [...new Set(searchFields)];
            console.info(searchFields.length + ' search fields found');
        }
        return searchFields;
    };

    var moveSearchIndex = function(n) {
        if (searchIndex === null) {
            searchIndex = 0;
        } else {
            searchIndex += n;
        }
        if (searchIndex >= searchFields.length) {
            searchIndex = 0;
        }
        if (searchIndex < 0) {
            searchIndex = searchFields.length - 1;
        }
        return searchIndex;
    };

    var focusNextSearchField = function(n) {
        var searchFields = findSearchField();
        if (searchFields.length) {
            var i = moveSearchIndex(n);
            console.info('trying to focus search field with index: ' + i);
            $(searchFields[i]).focus().select();
        }
    };

    $('body').keydown(function(event){
        if (event.keyCode == 186 && (event.ctrlKey || event.metaKey) && !event.shiftKey) {
            focusNextSearchField(1);
            event.preventDefault();
        }
        if (event.keyCode == 186 && (event.ctrlKey || event.metaKey) && event.shiftKey) {
            focusNextSearchField(-1);
            event.preventDefault();
        }
    });
  });
})(window.jQuery.noConflict(true));