Skip to content

Commit 3ce0ad3

Browse files
fix timed refresh behavior, but ugly
1 parent acdbb1a commit 3ce0ad3

File tree

1 file changed

+32
-15
lines changed

1 file changed

+32
-15
lines changed

bpython/curtsies.py

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -82,22 +82,39 @@ def request_refresh(when='now'):
8282

8383
def event_or_refresh(timeout=None):
8484
if timeout is None:
85-
timeout = 1
86-
else:
87-
timeout = min(1, timeout)
88-
starttime = time.time()
85+
timeout = 2**25 # a year
8986
while True:
90-
t = time.time()
91-
refresh_requests.sort(key=lambda r: 0 if r.when == 'now' else r.when)
92-
if refresh_requests and (refresh_requests[0].when == 'now' or refresh_requests[-1].when < t):
93-
yield refresh_requests.pop(0)
94-
elif reload_requests:
95-
e = reload_requests.pop()
96-
yield e
97-
else:
98-
e = input_generator.send(timeout)
99-
if starttime + timeout < time.time() or e is not None:
87+
starttime = time.time()
88+
while True:
89+
t = time.time()
90+
refresh_requests.sort(key=lambda r: 0 if r.when == 'now' else r.when)
91+
if refresh_requests and (refresh_requests[0].when == 'now' or refresh_requests[-1].when < t):
92+
yield refresh_requests.pop(0)
93+
elif reload_requests:
94+
e = reload_requests.pop()
10095
yield e
96+
else:
97+
if refresh_requests:
98+
next_refresh = refresh_requests.pop(0)
99+
time_until_next_scheduled_event = max(0, next_refresh.when - t)
100+
else:
101+
next_refresh = None
102+
time_until_next_scheduled_event = 2**25
103+
104+
time_to_wait = min(time_until_next_scheduled_event, max(0, starttime + timeout - t))
105+
106+
e = input_generator.send(time_to_wait)
107+
108+
if next_refresh is not None:
109+
if e is None and time.time() > t + time_until_next_scheduled_event:
110+
yield next_refresh
111+
continue
112+
else:
113+
refresh_requests.insert(0, next_refresh)
114+
115+
if starttime + timeout < time.time() or e is not None:
116+
yield e
117+
break
101118

102119
def on_suspend():
103120
window.__exit__(None, None, None)
@@ -144,7 +161,7 @@ def process_event(e):
144161
for _, e in izip(find_iterator, event_or_refresh(0)):
145162
if e is not None:
146163
process_event(e)
147-
for e in event_or_refresh():
164+
for e in event_or_refresh(None):
148165
process_event(e)
149166

150167
if __name__ == '__main__':

0 commit comments

Comments
 (0)