mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-30 09:14:59 +00:00
72 lines
2 KiB
Python
72 lines
2 KiB
Python
import threading
|
|
import time
|
|
|
|
import pyperclip
|
|
|
|
|
|
class ClipboardWatcher:
|
|
"""Watches clipboard for changes and updates IO placeholder"""
|
|
|
|
def __init__(self, io, verbose=False):
|
|
self.io = io
|
|
self.verbose = verbose
|
|
self.stop_event = None
|
|
self.watcher_thread = None
|
|
self.last_clipboard = None
|
|
self.io.clipboard_watcher = self
|
|
|
|
def start(self):
|
|
"""Start watching clipboard for changes"""
|
|
self.stop_event = threading.Event()
|
|
self.last_clipboard = pyperclip.paste()
|
|
|
|
def watch_clipboard():
|
|
while not self.stop_event.is_set():
|
|
try:
|
|
current = pyperclip.paste()
|
|
if current != self.last_clipboard:
|
|
self.last_clipboard = current
|
|
self.io.interrupt_input()
|
|
self.io.placeholder = current
|
|
if len(current.splitlines()) > 1:
|
|
self.io.placeholder = "\n" + self.io.placeholder + "\n"
|
|
|
|
time.sleep(0.5)
|
|
except Exception as e:
|
|
if self.verbose:
|
|
from aider.dump import dump
|
|
|
|
dump(f"Clipboard watcher error: {e}")
|
|
continue
|
|
|
|
self.watcher_thread = threading.Thread(target=watch_clipboard, daemon=True)
|
|
self.watcher_thread.start()
|
|
|
|
def stop(self):
|
|
"""Stop watching clipboard for changes"""
|
|
if self.stop_event:
|
|
self.stop_event.set()
|
|
if self.watcher_thread:
|
|
self.watcher_thread.join()
|
|
self.watcher_thread = None
|
|
self.stop_event = None
|
|
|
|
|
|
def main():
|
|
"""Example usage of the clipboard watcher"""
|
|
from aider.io import InputOutput
|
|
|
|
io = InputOutput()
|
|
watcher = ClipboardWatcher(io, verbose=True)
|
|
|
|
try:
|
|
watcher.start()
|
|
while True:
|
|
time.sleep(1)
|
|
except KeyboardInterrupt:
|
|
print("\nStopped watching clipboard")
|
|
watcher.stop()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|