Skip to content

Commit 4c731fb

Browse files
reuse Curtsies classes when new Repl created
1 parent 2fe8e02 commit 4c731fb

File tree

1 file changed

+33
-3
lines changed

1 file changed

+33
-3
lines changed

bpython/curtsies.py

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
94124
def 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

Comments
 (0)