Review of "gclipy" version 0.1.0 (1)

Details Page Preview

Clipboard history and snippets menu, inspired by the macOS app Clipy. - Text and image history, newest first, with labelled items (press 1-9, 0 or A-Z to paste) - Pinned items that survive clearing, rearranged with Ctrl+Up/Down - Snippet folders edited as JSON in your text editor - Opens at the pointer with Shift+Super+V and pastes into the focused window - Skips content marked secret by password managers and excluded apps History is stored locally in ~/.local/share/gclipy and never leaves your computer.

Extension Homepage
https://github.com/gobaz/gclipy

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 manual_review 1

Shexli found 4 issues that may need reviewer attention.

EGO-X-004 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

  • lib/images.js:99
    this.imageFile(hash).load_bytes(null)
  • lib/storage.js:36
    this.file.load_contents(null)

EGO-A-005 manual_review

extensions should not access the clipboard directly

Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.

Review Guidelines

  • shell/clipboardMonitor.js:32
    St.Clipboard.get_default()

EGO-X-003 warning

extensions should not call run_dispose in extension code

Extension code should not call `run_dispose()`.

GObject.Object.run_dispose

  • shell/paster.js:51
    this._device.run_dispose()

EGO-L-003 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:354
            this._dialog.connect('destroy', () => {
                this._dialog = null;
            })
  • extension.js:369
            this._dialog.connect('destroy', () => {
                this._dialog = null;
            })
  • extension.js:522
                this._indicator.menu.connect('open-state-changed', (_menu, open) => {
                    if (!open && this._indicatorDirty)
                        this._renderIndicator();
                })
  • extension.js:180
            this._snippetsMonitor.connect('changed', (_monitor, file, otherFile) => {
                const name = this._snippetsFile.file.get_basename();
                if (file?.get_basename() !== name && otherFile?.get_basename() !== name)
                    return;
                if (this._snippetsReloadId)
        
  • extension.js:541
    menu.actor.connect('key-press-event', (_actor, event) => this._onMenuKey(menu, event))
  • extension.js:542
            menu.connect('open-state-changed', (_menu, open) => {
                if (open)
                    this._focusMenuStart(menu);
                else
                    this._preview.hide();
            })

All Versions

Version Status
0.1.0 (1) Unreviewed