|
43 | 43 | from bpython.curtsiesfrontend.filewatch import ModuleChangedEventHandler |
44 | 44 | from bpython.curtsiesfrontend.interaction import StatusBar |
45 | 45 | from bpython.curtsiesfrontend.manual_readline import edit_keys |
| 46 | +from bpython.curtsiesfrontend import events as bpythonevents |
46 | 47 |
|
47 | 48 | #TODO other autocomplete modes (also fix in other bpython implementations) |
48 | 49 |
|
@@ -213,8 +214,10 @@ class Repl(BpythonRepl): |
213 | 214 | def __init__(self, |
214 | 215 | locals_=None, |
215 | 216 | config=None, |
216 | | - request_refresh=lambda when='now': None, |
217 | | - request_reload=lambda desc: None, get_term_hw=lambda:(50, 10), |
| 217 | + request_refresh=lambda: None, |
| 218 | + schedule_refresh=lambda when=0: None, |
| 219 | + request_reload=lambda desc: None, |
| 220 | + get_term_hw=lambda:(50, 10), |
218 | 221 | get_cursor_vertical_diff=lambda: 0, |
219 | 222 | banner=None, |
220 | 223 | interp=None, |
@@ -259,22 +262,30 @@ def __init__(self, |
259 | 262 |
|
260 | 263 | self.reevaluating = False |
261 | 264 | self.fake_refresh_requested = False |
262 | | - def smarter_request_refresh(when='now'): |
| 265 | + def smarter_request_refresh(): |
263 | 266 | if self.reevaluating or self.paste_mode: |
264 | 267 | self.fake_refresh_requested = True |
265 | 268 | else: |
266 | | - request_refresh(when=when) |
| 269 | + request_refresh() |
267 | 270 | self.request_refresh = smarter_request_refresh |
268 | | - def smarter_request_reload(desc): |
| 271 | + def smarter_schedule_refresh(when='now'): |
| 272 | + if self.reevaluating or self.paste_mode: |
| 273 | + self.fake_refresh_requested = True |
| 274 | + else: |
| 275 | + schedule_refresh(when=when) |
| 276 | + self.schedule_refresh = smarter_schedule_refresh |
| 277 | + def smarter_request_reload(files_modified=()): |
269 | 278 | if self.watching_files: |
270 | | - request_reload(desc) |
| 279 | + request_reload(files_modified=files_modified) |
271 | 280 | else: |
272 | 281 | pass |
273 | 282 | self.request_reload = smarter_request_reload |
274 | 283 | self.get_term_hw = get_term_hw |
275 | 284 | self.get_cursor_vertical_diff = get_cursor_vertical_diff |
276 | 285 |
|
277 | | - self.status_bar = StatusBar('', refresh_request=self.request_refresh) |
| 286 | + self.status_bar = StatusBar('', |
| 287 | + request_refresh=self.request_refresh, |
| 288 | + schedule_refresh=self.schedule_refresh) |
278 | 289 | self.edit_keys = edit_keys.mapping_with_config(config, key_dispatch) |
279 | 290 | logger.debug("starting parent init") |
280 | 291 | super(Repl, self).__init__(interp, config) |
@@ -423,18 +434,20 @@ def process_event(self, e): |
423 | 434 |
|
424 | 435 | logger.debug("processing event %r", e) |
425 | 436 | if isinstance(e, events.Event): |
426 | | - return self.proccess_control_event(e) |
| 437 | + return self.process_control_event(e) |
427 | 438 | else: |
428 | 439 | self.last_events.append(e) |
429 | 440 | self.last_events.pop(0) |
430 | 441 | return self.process_key_event(e) |
431 | 442 |
|
432 | | - def proccess_control_event(self, e): |
| 443 | + def process_control_event(self, e): |
433 | 444 |
|
434 | | - if isinstance(e, events.RefreshRequestEvent): |
435 | | - if e.when != 'now': |
436 | | - pass # This is a scheduled refresh - it's really just a refresh (so nop) |
437 | | - elif self.status_bar.has_focus: |
| 445 | + if isinstance(e, bpythonevents.ScheduledRefreshRequestEvent): |
| 446 | + pass # This is a scheduled refresh - it's really just a refresh (so nop) |
| 447 | + |
| 448 | + elif isinstance(e, bpythonevents.RefreshRequestEvent): |
| 449 | + logger.info('received ASAP refresh request event') |
| 450 | + if self.status_bar.has_focus: |
438 | 451 | self.status_bar.process_event(e) |
439 | 452 | else: |
440 | 453 | assert self.coderunner.code_is_waiting |
@@ -463,7 +476,7 @@ def proccess_control_event(self, e): |
463 | 476 | self.keyboard_interrupt() |
464 | 477 | return |
465 | 478 |
|
466 | | - elif isinstance(e, events.ReloadEvent): |
| 479 | + elif isinstance(e, bpythonevents.ReloadEvent): |
467 | 480 | if self.watching_files: |
468 | 481 | self.clear_modules_and_reevaluate() |
469 | 482 | self.status_bar.message('Reloaded at ' + time.strftime('%H:%M:%S') + ' because ' + ' & '.join(e.files_modified) + ' modified') |
@@ -1296,7 +1309,7 @@ def reevaluate(self, insert_into_history=False): |
1296 | 1309 | self.on_enter(insert_into_history=insert_into_history) |
1297 | 1310 | while self.fake_refresh_requested: |
1298 | 1311 | self.fake_refresh_requested = False |
1299 | | - self.process_event(events.RefreshRequestEvent()) |
| 1312 | + self.process_event(bpythonevents.RefreshRequestEvent()) |
1300 | 1313 | sys.stdin = self.stdin |
1301 | 1314 | self.reevaluating = False |
1302 | 1315 |
|
@@ -1405,6 +1418,7 @@ def compress_paste_event(paste_event): |
1405 | 1418 | else: |
1406 | 1419 | return None |
1407 | 1420 |
|
| 1421 | +#TODO this needs some work to function again and be useful for embedding |
1408 | 1422 | def simple_repl(): |
1409 | 1423 | refreshes = [] |
1410 | 1424 | def request_refresh(): |
|
0 commit comments