11from __future__ import annotations
22
33import sys
4- import threading
54from contextlib import contextmanager
65from typing import Callable , Iterator , TYPE_CHECKING
76
@@ -38,9 +37,6 @@ def get_value_from_pynput_key_code(key: pynput.keyboard.KeyCode) -> DomCode | No
3837def pynput_key_pressed_context () -> Iterator [Callable [[], set [DomCode ]]]:
3938 import pynput .keyboard
4039
41- ctrl_c_event = threading .Event ()
42- ctrl_d_event = threading .Event ()
43-
4440 def on_press (key : pynput .keyboard .Key | pynput .keyboard .KeyCode | None ) -> None :
4541 value : DomCode | None
4642 if isinstance (key , pynput .keyboard .KeyCode ):
@@ -51,13 +47,6 @@ def on_press(key: pynput.keyboard.Key | pynput.keyboard.KeyCode | None) -> None:
5147 return
5248 if value is not None :
5349 pressed .add (value )
54- # Check for Ctrl+C / Ctrl+D
55- ctrl_held = DomCode .CONTROL_LEFT in pressed or DomCode .CONTROL_RIGHT in pressed
56- if ctrl_held :
57- if DomCode .US_C in pressed :
58- ctrl_c_event .set ()
59- elif DomCode .US_D in pressed :
60- ctrl_d_event .set ()
6150
6251 def on_release (key : pynput .keyboard .Key | pynput .keyboard .KeyCode | None ) -> None :
6352 value : DomCode | None
@@ -70,18 +59,11 @@ def on_release(key: pynput.keyboard.Key | pynput.keyboard.KeyCode | None) -> Non
7059 if value is not None :
7160 pressed .discard (value )
7261
73- def get_pressed () -> set [DomCode ]:
74- if ctrl_c_event .is_set ():
75- raise KeyboardInterrupt
76- if ctrl_d_event .is_set ():
77- raise OSError
78- return pressed
79-
8062 pressed : set [DomCode ] = set ()
8163 listener = pynput .keyboard .Listener (on_press = on_press , on_release = on_release )
8264 try :
8365 listener .start ()
84- yield get_pressed
66+ yield lambda : pressed
8567 finally :
8668 pressed .clear ()
8769 listener .stop ()
0 commit comments