Review of "Script Launcher" version 1.1.0 (1)

Details Page Preview

Script Launcher puts your shell scripts one click away, right from the GNOME top panel. Click the panel icon to open a searchable menu of the scripts in your chosen folder and run any of them instantly — no terminal required. Features: • Searchable popup menu of your scripts • Pin favorites to the top of the list • Hide scripts you rarely use, then view and restore them from a dedicated "Hidden Scripts" window • Right-click a script to Run, Run in Terminal, Pin/Unpin, or Hide • Custom panel icon (a system icon name or your own image) • Per-script icons — just drop a matching .svg or .png next to a script • Filter by file extension (e.g. .sh, .py, .js) and show or hide extensions in the labels • Adjustable menu width and height • Export and import all your settings • Available in English, Turkish, Russian, German, Italian, Japanese, French and Spanish (auto-detected from your system) Usage: Place your scripts in ~/scripts (the default) or pick a custom folder in the extension preferences. Click the panel icon to open the launcher, then click a script to run it. Right-click the panel icon for the Hidden Scripts window and Settings. Make sure your scripts are executable (chmod +x). Compatible with GNOME Shell 45–49.

Extension Homepage
https://github.com/enginyilmaaz/gnome_extension_script_launcher

No comments.

FAQ

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) warning 3

Shexli found 3 issues that may need reviewer attention.

EGO015 warning

signals connected by extension should be disconnected in disable()

Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.

Disconnect all signals

  • extension.js:98
          this._fileMonitor.connect('changed', () => {
            // Debounce the refresh to avoid too many updates
            if (this._refreshTimeout) {
              GLib.source_remove(this._refreshTimeout);
            }
            this._refreshTimeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 500, () => {
             
  • extension.js:581
        this._indicator.connect('button-press-event', (actor, event) => {
          if (event.get_button() === Clutter.BUTTON_SECONDARY) {
            if (this._indicator.menu.isOpen)
              this._indicator.menu.close();
            this._destroyScriptContextMenu();
            this._contextMenu.toggle();
            re
  • extension.js:603
        this._scriptContextSourceActor.connect('button-press-event', () => {
          if (this._scriptContextMenu?.isOpen) {
            this._scriptContextMenu.close(BoxPointer.PopupAnimation.FULL);
          }
          return Clutter.EVENT_STOP;
        })
  • extension.js:159
        actor.connect('destroy', () => {
          if (this._hoverCursorActor === actor) {
            this._hoverCursorActor = null;
            global.display.set_cursor(Meta.Cursor.DEFAULT);
          }
        })
  • extension.js:145
        actor.connect('enter-event', () => {
          this._hoverCursorActor = actor;
          global.display.set_cursor(Meta.Cursor.POINTING_HAND);
          return Clutter.EVENT_PROPAGATE;
        })
  • extension.js:151
        actor.connect('leave-event', () => {
          if (this._hoverCursorActor === actor) {
            this._hoverCursorActor = null;
            global.display.set_cursor(Meta.Cursor.DEFAULT);
          }
          return Clutter.EVENT_PROPAGATE;
        })
  • extension.js:352
        menu.connect('open-state-changed', (popup, open) => {
          if (!open && this._scriptContextMenu === popup) {
            this._destroyScriptContextMenu();
          }
        })

EGO014 warning

objects created by extension should be destroyed in disable()

Objects assigned in `enable()` are missing matching `.destroy()` calls in `disable()` or its helper methods.

Destroy all objects

  • extension.js:391
    this._scriptContextMenu = menu
  • extension.js:610
        this._scriptContextMenuManager = new PopupMenu.PopupMenuManager({
          actor: this._scriptContextSourceActor,
        })

EGO030 warning

extensions should avoid synchronous file IO in shell code

Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.

File Operations

  • locale.js:33
    file.load_contents(null)

All Versions

Version Status
1.2.3 (8) Active
1.2.2 (7) Rejected
1.2.2 (6) Active
1.1.0 (5) Rejected
1.1.0 (4) Rejected
1.1.0 (3) Rejected
1.1.0 (2) Rejected
1.1.0 (1) Rejected

Previous Reviews on this Version

enginyilmaaz auto- rejected
Auto-rejected because of new version 1.1.0 (2) was uploaded