lazyBoy/image/computer/lazyboy-clipboard

43 lines
1.6 KiB
Plaintext
Raw Permalink Normal View History

2026-09-08 13:27:38 +00:00
#!/usr/bin/env python3
"""Visible GTK clipboard editor. All interaction is through Cua controls."""
import os
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, GLib
GLib.set_prgname('lazyboy-clipboard')
number = ''.join(c for c in os.environ.get('DISPLAY', ':1') if c.isdigit()) or '1'
app = Gtk.Application(application_id='net.lazyboy.Clipboard.d' + number)
window = None
entry = None
def activate(application):
global window, entry
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
if window is None:
window = Gtk.ApplicationWindow(application=application, title='Clipboard · LazyBoy')
window.set_default_size(520, 120)
# Retain clipboard ownership without leaving a window on the desktop.
def hide(widget, _event):
widget.hide()
return True
window.connect('delete-event', hide)
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
box.set_border_width(16)
window.add(box)
entry = Gtk.Entry()
entry.connect('changed', lambda field: field.get_accessible().set_name('Clipboard text: ' + field.get_text()))
entry.get_accessible().set_name('Clipboard text: ')
box.pack_start(entry, True, True, 0)
button = Gtk.Button(label='Copy')
def copy(_):
clipboard.set_text(entry.get_text(), -1)
button.connect('clicked', copy)
box.pack_start(button, False, False, 0)
entry.set_text(clipboard.wait_for_text() or '')
window.show_all()
window.present()
app.connect('activate', activate)
app.run([])