User Tools

Site Tools


gnome:extensions:extension.js

Gnome - Extensions - extension.js

extension.js is a mandatory file for every extension.

  • It is the core of the extension and contains the function hooks init(), enable() and disable() used by GNOME Shell to load, enable and disable your extension.

extension.js

The file can use top-level functions, or an extension object.

  • Use whichever pattern best suits.

Using top-level functions

extension.js
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
 
 
function init(meta) {
    log(`initializing ${meta.metadata.name}`);
}
 
 
function enable() {
    log(`enabling ${Me.metadata.name}`);
}
 
 
function disable() {
    log(`disabling ${Me.metadata.name}`);
}

Using extension object

extension.js
// This is a handy import we'll use to grab our extension's object
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
 
 
class Extension {
    constructor() {
    }
 
    /**
     * This function is called when your extension is enabled, which could be
     * done in GNOME Extensions, when you log in or when the screen is unlocked.
     *
     * This is when you should setup any UI for your extension, change existing
     * widgets, connect signals or modify GNOME Shell's behavior.
     */
    enable() {
        log(`enabling ${Me.metadata.name}`);
    }
 
 
    /**
     * This function is called when your extension is uninstalled, disabled in
     * GNOME Extensions, when you log out or when the screen locks.
     *
     * Anything you created, modified or setup in enable() MUST be undone here.
     * Not doing so is the most common reason extensions are rejected in review!
     */
    disable() {
        log(`disabling ${Me.metadata.name}`);
    }
}
 
 
/**
 * This function is called once when your extension is loaded, not enabled. This
 * is a good time to setup translations or anything else you only do once.
 *
 * You MUST NOT make any changes to GNOME Shell, connect any signals or add any
 * MainLoop sources here.
 *
 * @param {ExtensionMeta} meta - An extension meta object, described below.
 * @returns {Object} an object with enable() and disable() methods
 */
function init(meta) {
    log(`initializing ${meta.metadata.name}`);
 
    return new Extension();
}

NOTE: The code in extension.js is executed in the same process as gnome-shell.

  • You will have access to live code running in GNOME Shell, but fatal errors or mistakes will affect the stability of the desktop.
  • It also means you will be using the Clutter and St toolkits, although you may still use utility functions and classes from Gtk.

Extension Meta Object

An object describing the extension and various properties is available for extensions to use.

  • This is passed to the init() function when an extension is loaded and can be retrieved by calling ExtensionUtils.getCurrentExtension().
/**
 * @typedef ExtensionMeta
 * @type {object}
 * @property {object} metadata - the metadata.json file, parsed as JSON
 * @property {string} uuid - the extension UUID
 * @property {number} type - the extension type; `1` for system, `2` for user
 * @property {Gio.File} dir - the extension directory
 * @property {string} path - the extension directory path
 * @property {string} error - an error message or an empty string if no error
 * @property {boolean} hasPrefs - whether the extension has a preferences dialog
 * @property {boolean} hasUpdate - whether the extension has a pending update
 * @property {boolean} canChange - whether the extension can be enabled/disabled
 * @property {string[]} sessionModes - a list of supported session modes
 */

WARNING: Some properties may only be available in some versions of GNOME Shell.

  • All properties should be considered read-only.

References

gnome/extensions/extension.js.txt · Last modified: 2022/07/23 13:24 by 194.32.120.105

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki