const { Gdk, Gtk } = imports.gi; import { App, Service, Utils, Widget } from '../imports.js'; import Applications from 'resource:///com/github/Aylur/ags/service/applications.js'; import Hyprland from 'resource:///com/github/Aylur/ags/service/hyprland.js'; const { execAsync, exec } = Utils; const { Box, EventBox, Button, Label, Scrollable } = Widget; const CLIPBOARD_SHOWN_ENTRIES = 20; const ClipboardItems = () => { return Box({ vertical: true, className: 'spacing-v-5', connections: [ [App, (box, name, visible) => { if (name != 'sideleft') return; let clipboardContents = exec('cliphist list'); // Output is lines like this: 1000 copied text clipboardContents = clipboardContents.split('\n'); // console.log(clipboardContents); // console.log(`bash -c 'echo "${clipboardContents[0]}" | sed "s/ /\\t/" | cliphist decode'`); // console.log(exec(`bash -c 'echo "${clipboardContents[0]}" | sed "s/ /\\t/" | cliphist decode'`)); box.children = clipboardContents.map((text, i) => { if (i >= CLIPBOARD_SHOWN_ENTRIES) return; return Button({ onClicked: () => { print(`bash` + `-c` + `echo "${clipboardContents[i]}" | sed "s/ /\\\t/" | cliphist decode | wl-copy`); execAsync(`bash`, `-c`, `echo "${clipboardContents[i]}" | sed "s/ /\\\t/" | cliphist decode | wl-copy`).catch(print); App.closeWindow('sideleft'); }, className: 'sidebar-clipboard-item', child: Box({ children: [ Label({ label: text, className: 'txt-small', truncate: 'end', }) ] }) }) }); }] ] }); } export default () => Box({ vertical: true, children: [ EventBox({ onPrimaryClick: () => App.closeWindow('sideleft'), onSecondaryClick: () => App.closeWindow('sideleft'), onMiddleClick: () => App.closeWindow('sideleft'), }), ClipboardItems(), // Box({ // vertical: true, // vexpand: true, // className: 'sidebar-left', // children: [ // Widget.Box({ // className: 'spacing-v-5', // children: [ // ClipboardItems(), // ] // }) // ], // }), ] });