1"""Non-keyboard events used in bpython curtsies REPL""" 2 3import time 4from typing import Sequence 5 6import curtsies.events 7 8 9class ReloadEvent(curtsies.events.Event): 10 """Request to rerun REPL session ASAP because imported modules changed""" 11 12 def __init__(self, files_modified: Sequence[str] = ("?",)) -> None: 13 self.files_modified = files_modified 14 15 def __repr__(self) -> str: 16 return "<ReloadEvent from {}>".format(" & ".join(self.files_modified)) 17 18 19class RefreshRequestEvent(curtsies.events.Event): 20 """Request to refresh REPL display ASAP""" 21 22 def __repr__(self) -> str: 23 return "<RefreshRequestEvent for now>" 24 25 26class ScheduledRefreshRequestEvent(curtsies.events.ScheduledEvent): 27 """Request to refresh the REPL display at some point in the future 28 29 Used to schedule the disappearance of status bar message that only shows 30 for a few seconds""" 31 32 def __init__(self, when: float) -> None: 33 super().__init__(when) 34 35 def __repr__(self) -> str: 36 return "<RefreshRequestEvent for {} seconds from now>".format( 37 self.when - time.time() 38 ) 39 40 41class RunStartupFileEvent(curtsies.events.Event): 42 """Request to run the startup file.""" 43 44 45class UndoEvent(curtsies.events.Event): 46 """Request to undo.""" 47 48 def __init__(self, n: int = 1) -> None: 49 self.n = n 50