@@ -91,16 +91,46 @@ def main(args=None, locals_=None, banner=None):
9191 return extract_exit_value (exit_value )
9292
9393
94+ class MultiUserCursorAwareWindow (curtsies .window .CursorAwareWindow ):
95+ """Window may be used by multiple Repls"""
96+ def __enter__ (self ):
97+ if not hasattr (self , '_users' ):
98+ self ._users = 0
99+ if self ._users == 0 :
100+ curtsies .window .CursorAwareWindow .__enter__ (self )
101+ self ._users += 1
102+
103+ def __exit__ (self , * args ):
104+ self ._users -= 1
105+ if self ._users == 0 :
106+ curtsies .window .CursorAwareWindow .__exit__ (self , * args )
107+
108+
109+ class MultiUserInput (curtsies .input .Input ):
110+ """Input may be used by multiple Repls"""
111+ def __enter__ (self ):
112+ if not hasattr (self , '_users' ):
113+ self ._users = 0
114+ if self ._users == 0 :
115+ curtsies .input .Input .__enter__ (self )
116+ self ._users += 1
117+
118+ def __exit__ (self , * args ):
119+ self ._users -= 1
120+ if self ._users == 0 :
121+ curtsies .input .Input .__exit__ (self , * args )
122+
123+
94124def mainloop (config , locals_ , banner , interp = None , paste = None ,
95125 interactive = True , debugger = False ):
96126 global input_generator
97127 global window
98128
99129 if input_generator is None :
100- input_generator = curtsies . input . Input (keynames = 'curtsies' ,
101- sigint_event = True )
130+ input_generator = MultiUserInput (keynames = 'curtsies' ,
131+ sigint_event = True )
102132 if window is None :
103- window = curtsies . window . CursorAwareWindow (
133+ window = MultiUserCursorAwareWindow (
104134 sys .stdout ,
105135 sys .stdin ,
106136 keep_last_line = True ,
0 commit comments