Skip to content

Commit 2fe8e02

Browse files
make curtsies objects global
1 parent 028334f commit 2fe8e02

File tree

1 file changed

+29
-19
lines changed

1 file changed

+29
-19
lines changed

bpython/curtsies.py

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,18 @@
2020
from bpython.curtsiesfrontend import events as bpythonevents
2121
from bpython import inspection
2222
from bpython.repl import extract_exit_value
23-
from bpython.curtsiesfrontend.repl import debugger_hook
2423

25-
logger = logging.getLogger(__name__)
24+
try:
25+
from bpython import debugger
26+
except ImportError as err:
27+
debugger = None
2628

29+
logger = logging.getLogger(__name__)
2730

28-
repl = None # global for `from bpython.curtsies import repl`
29-
# WARNING Will be a problem if more than one repl is ever instantiated this way
31+
# More than one repl may exist, but input_generator and window are global
32+
repls = []
33+
input_generator = None
34+
window = None
3035

3136

3237
def main(args=None, locals_=None, banner=None):
@@ -51,8 +56,6 @@ def main(args=None, locals_=None, banner=None):
5156
logging.getLogger('curtsies').propagate = False
5257
logging.getLogger('bpython').addHandler(handler)
5358
logging.getLogger('bpython').propagate = False
54-
if options.debugger:
55-
sys.excepthook = debugger_hook
5659

5760
interp = None
5861
paste = None
@@ -81,23 +84,31 @@ def main(args=None, locals_=None, banner=None):
8184
print(bpargs.version_banner())
8285
try:
8386
exit_value = mainloop(config, locals_, banner, interp, paste,
84-
interactive=(not exec_args))
87+
interactive=(not exec_args),
88+
debugger=options.debugger)
8589
except (SystemExitFromCodeGreenlet, SystemExit) as e:
8690
exit_value = e.args
8791
return extract_exit_value(exit_value)
8892

8993

9094
def mainloop(config, locals_, banner, interp=None, paste=None,
91-
interactive=True):
92-
with curtsies.input.Input(keynames='curtsies', sigint_event=True) as \
93-
input_generator:
94-
with curtsies.window.CursorAwareWindow(
95-
sys.stdout,
96-
sys.stdin,
97-
keep_last_line=True,
98-
hide_cursor=False,
99-
extra_bytes_callback=input_generator.unget_bytes) as window:
100-
95+
interactive=True, debugger=False):
96+
global input_generator
97+
global window
98+
99+
if input_generator is None:
100+
input_generator = curtsies.input.Input(keynames='curtsies',
101+
sigint_event=True)
102+
if window is None:
103+
window = curtsies.window.CursorAwareWindow(
104+
sys.stdout,
105+
sys.stdin,
106+
keep_last_line=True,
107+
hide_cursor=False,
108+
extra_bytes_callback=input_generator.unget_bytes)
109+
110+
with input_generator:
111+
with window:
101112
request_refresh = input_generator.event_trigger(
102113
bpythonevents.RefreshRequestEvent)
103114
schedule_refresh = input_generator.scheduled_event_trigger(
@@ -118,8 +129,6 @@ def after_suspend():
118129
window.__enter__()
119130
interrupting_refresh()
120131

121-
# global for easy introspection `from bpython.curtsies import repl`
122-
global repl
123132
with Repl(config=config,
124133
locals_=locals_,
125134
request_refresh=request_refresh,
@@ -134,6 +143,7 @@ def after_suspend():
134143
orig_tcattrs=input_generator.original_stty,
135144
on_suspend=on_suspend,
136145
after_suspend=after_suspend) as repl:
146+
repls.append(repl)
137147
repl.height, repl.width = window.t.height, window.t.width
138148

139149
def process_event(e):

0 commit comments

Comments
 (0)