-
Notifications
You must be signed in to change notification settings - Fork 1
/
select_to_chatgpt.py
72 lines (57 loc) · 1.53 KB
/
select_to_chatgpt.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#selected text
import os
from psutil import Process
#keyboard input
from pynput import keyboard
#chatgpt
from chatgpt_wrapper import ChatGPT
#multithreading
import threading
from gevent import monkey
monkey.patch_all()
#globals
bot = ChatGPT()
COMBINATION = {keyboard.Key.ctrl, keyboard.Key.alt, keyboard.Key.space}
current = set()
threads = []
behavior = 'Write a program in python that '
"""
replace the above line with one of these if you want:
behavior = 'Write a program in python that '
behavior = 'Write a program in C that '
behavior = 'Write a story about '
"""
#processes the text and sends it to chatGPT
def process():
message = os.popen('xsel').read()
print(f"Your prompt was: \n\
'{message}'\n\
Generating output.")
response = bot.ask(behavior + message)
print(response)
#when combination is pressed logic
def on_all():
print("Starting to process ChatGPT response...")
thread = threading.Thread(target=process, daemon=True).start()
#on key press logic
def on_press(key):
if key in COMBINATION:
print(key)
current.add(key)
if all(k in current for k in COMBINATION):
on_all()
#on key release logic
def on_release(key):
if key in COMBINATION:
current.discard(key)
#read keys
def main():
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
if __name__ == '__main__':
try:
main()
except (KeyboardInterrupt, SystemExit):
os._exit(1)