@@ -235,111 +235,5 @@ def combined_events(event_provider, paste_threshold=3):
235235 return g
236236
237237
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-
344238if __name__ == '__main__' :
345239 sys .exit (main ())
0 commit comments