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.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
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()`.
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.
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()`.
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.
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();
})
| Version | Status |
|---|---|
| 0.1.0 (1) | Unreviewed |