Clipboard history manager integrated into GNOME. Captures text and images you copy and opens the history at the pointer with a shortcut you choose (e.g. Super+V), with search, pinned items, type detection with quick actions, edit, QR codes, a private mode and persistence across sessions. Everything stays on your computer: no network access, no telemetry.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-005 manual_review
extensions should not access the clipboard directly
Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.
lib/clipboardManager.js:40
St.Clipboard.get_default()
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/historyStore.js:77
file.load_contents(null)
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:50
this._clipboard.connect('image-copied', (_m, img) => {
this._resetCycle();
this._store.addImage(img.bytes, img.hash, { width: img.width, height: img.height });
this._refreshPopup();
})
extension.js:45
this._clipboard.connect('text-copied', (_m, text) => {
this._resetCycle();
this._store.addText(text);
this._refreshPopup();
})
extension.js:80
this._popup.connect('action-invoked', (_p, id, action) => this._invokeAction(id, action))
extension.js:76
this._popup.connect('clear-requested', () => {
this._store.clear();
this._refreshPopup();
})
extension.js:82
this._popup.connect('item-edited', (_p, id, text) => {
this._store.editText(id, text);
this._clipboard.setClipboard(text);
this._popup.dismiss();
})
extension.js:68
this._popup.connect('item-pin-toggled', (_p, id) => {
this._store.togglePin(id);
this._refreshPopup();
})
extension.js:72
this._popup.connect('item-removed', (_p, id) => {
this._store.remove(id);
this._refreshPopup();
})
extension.js:58
this._popup.connect('item-selected', (_p, id) => {
const entry = this._store.getEntry(id);
if (!entry)
return;
if (entry.type === 'text')
this._clipboard.setClipboard(entry.text);
else if (entry.type === 'image')
extension.js:81
this._popup.connect('open-with-invoked', (_p, id, appId) => this._openWith(id, appId))
| Version | Status |
|---|---|
| 2.0.0 (1) | Unreviewed |