@@ -235,111 +235,5 @@ def combined_events(event_provider, paste_threshold=3):
235
235
return g
236
236
237
237
238
- def mainloop (config , locals_ , banner , interp = None , paste = None ,
239
- interactive = True ):
240
- with curtsies .input .Input (keynames = 'curtsies' ,
241
- sigint_event = True ,
242
- paste_threshold = None ) as input_generator :
243
- with curtsies .window .CursorAwareWindow (
244
- sys .stdout ,
245
- sys .stdin ,
246
- keep_last_line = True ,
247
- hide_cursor = False ,
248
- extra_bytes_callback = input_generator .unget_bytes ) as window :
249
-
250
- request_refresh = input_generator .event_trigger (
251
- bpythonevents .RefreshRequestEvent )
252
- schedule_refresh = input_generator .scheduled_event_trigger (
253
- bpythonevents .ScheduledRefreshRequestEvent )
254
- request_reload = input_generator .threadsafe_event_trigger (
255
- bpythonevents .ReloadEvent )
256
- interrupting_refresh = input_generator .threadsafe_event_trigger (
257
- lambda : None )
258
- request_undo = input_generator .event_trigger (
259
- bpythonevents .UndoEvent )
260
-
261
- def on_suspend ():
262
- window .__exit__ (None , None , None )
263
- input_generator .__exit__ (None , None , None )
264
-
265
- def after_suspend ():
266
- input_generator .__enter__ ()
267
- window .__enter__ ()
268
- interrupting_refresh ()
269
-
270
- def get_top_usable_line ():
271
- return window .top_usable_row
272
-
273
- # global for easy introspection `from bpython.curtsies import repl`
274
- global repl
275
- with Repl (config = config ,
276
- locals_ = locals_ ,
277
- request_refresh = request_refresh ,
278
- schedule_refresh = schedule_refresh ,
279
- request_reload = request_reload ,
280
- request_undo = request_undo ,
281
- get_term_hw = window .get_term_hw ,
282
- get_cursor_vertical_diff = window .get_cursor_vertical_diff ,
283
- banner = banner ,
284
- interp = interp ,
285
- interactive = interactive ,
286
- orig_tcattrs = input_generator .original_stty ,
287
- on_suspend = on_suspend ,
288
- after_suspend = after_suspend ,
289
- get_top_usable_line = get_top_usable_line ) as repl :
290
- repl .height , repl .width = window .t .height , window .t .width
291
-
292
- repl .request_paint_to_pad_bottom = 6
293
-
294
- def process_event (e ):
295
- """If None is passed in, just paint the screen"""
296
- try :
297
- if e is not None :
298
- repl .process_event (e )
299
- except (SystemExitFromCodeGreenlet , SystemExit ) as err :
300
- array , cursor_pos = repl .paint (
301
- about_to_exit = True ,
302
- user_quit = isinstance (err ,
303
- SystemExitFromCodeGreenlet ))
304
- scrolled = window .render_to_terminal (array , cursor_pos )
305
- repl .scroll_offset += scrolled
306
- raise
307
- else :
308
- array , cursor_pos = repl .paint ()
309
- scrolled = window .render_to_terminal (array , cursor_pos )
310
- repl .scroll_offset += scrolled
311
-
312
- if interactive :
313
- # Add custom help command
314
- # TODO: add methods to run the code
315
- repl .coderunner .interp .locals ['_repl' ] = repl
316
-
317
- repl .coderunner .interp .runsource (
318
- 'from bpython.curtsiesfrontend._internal '
319
- 'import _Helper' )
320
- repl .coderunner .interp .runsource ('help = _Helper(_repl)\n ' )
321
-
322
- del repl .coderunner .interp .locals ['_repl' ]
323
- del repl .coderunner .interp .locals ['_Helper' ]
324
-
325
- # run startup file
326
- process_event (bpythonevents .RunStartupFileEvent ())
327
-
328
- # handle paste
329
- if paste :
330
- process_event (paste )
331
-
332
- # do a display before waiting for first event
333
- process_event (None )
334
- inputs = combined_events (input_generator )
335
- for unused in find_iterator :
336
- e = inputs .send (0 )
337
- if e is not None :
338
- process_event (e )
339
-
340
- for e in inputs :
341
- process_event (e )
342
-
343
-
344
238
if __name__ == '__main__' :
345
239
sys .exit (main ())
0 commit comments