Skip to content

Commit a9de650

Browse files
Refactor callbacks into methods
* create SimpleRepl class for testing and as an example * rename curtsies repl to BaseRepl * document BaseRepl methods to override
1 parent 1bc66fc commit a9de650

File tree

5 files changed

+241
-164
lines changed

5 files changed

+241
-164
lines changed

bpython/curtsies.py

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import curtsies.input
1313
import curtsies.events
1414

15-
from bpython.curtsiesfrontend.repl import Repl
15+
from bpython.curtsiesfrontend.repl import BaseRepl
1616
from bpython.curtsiesfrontend.coderunner import SystemExitFromCodeGreenlet
1717
from bpython import args as bpargs
1818
from bpython import translations
@@ -25,29 +25,29 @@
2525
logger = logging.getLogger(__name__)
2626

2727

28-
#repl = None # global for `from bpython.curtsies import repl`
28+
repl = None # global for `from bpython.curtsies import repl`
2929
# WARNING Will be a problem if more than one repl is ever instantiated this way
3030

3131

32-
class FullCurtsiesRepl(Repl):
32+
class FullCurtsiesRepl(BaseRepl):
3333
def __init__(self, config, locals_, banner, interp=None,
34-
paste=None, interactive=True):
34+
paste=None):
3535
self.input_generator = curtsies.input.Input(
36-
keynames='curtsies',
37-
sigint_event=True,
38-
paste_threshold=None)
36+
keynames='curtsies',
37+
sigint_event=True,
38+
paste_threshold=None)
3939
self.window = curtsies.window.CursorAwareWindow(
40-
sys.stdout,
41-
sys.stdin,
42-
keep_last_line=True,
43-
hide_cursor=False,
44-
extra_bytes_callback=self.input_generator.unget_bytes)
40+
sys.stdout,
41+
sys.stdin,
42+
keep_last_line=True,
43+
hide_cursor=False,
44+
extra_bytes_callback=self.input_generator.unget_bytes)
4545

46-
self.request_refresh = self.input_generator.event_trigger(
46+
self._request_refresh = self.input_generator.event_trigger(
4747
bpythonevents.RefreshRequestEvent)
48-
self.schedule_refresh = self.input_generator.scheduled_event_trigger(
48+
self._schedule_refresh = self.input_generator.scheduled_event_trigger(
4949
bpythonevents.ScheduledRefreshRequestEvent)
50-
self.request_reload = self.input_generator.threadsafe_event_trigger(
50+
self._request_reload = self.input_generator.threadsafe_event_trigger(
5151
bpythonevents.ReloadEvent)
5252
self.interrupting_refresh = (self.input_generator
5353
.threadsafe_event_trigger(lambda: None))
@@ -57,22 +57,21 @@ def __init__(self, config, locals_, banner, interp=None,
5757
with self.input_generator:
5858
pass # temp hack to get .original_stty
5959

60-
Repl.__init__(self,
61-
config=config,
60+
BaseRepl.__init__(self,
6261
locals_=locals_,
63-
request_refresh=self.request_refresh,
64-
schedule_refresh=self.schedule_refresh,
65-
request_reload=self.request_reload,
66-
request_undo=self.request_undo,
67-
get_term_hw=self.window.get_term_hw,
68-
get_cursor_vertical_diff=self.window.get_cursor_vertical_diff,
62+
config=config,
6963
banner=banner,
7064
interp=interp,
71-
interactive=interactive,
72-
orig_tcattrs=self.input_generator.original_stty,
73-
on_suspend=self.on_suspend,
74-
after_suspend=self.after_suspend)
65+
orig_tcattrs=self.input_generator.original_stty)
66+
67+
def get_term_hw(self):
68+
return self.window.get_term_hw()
69+
70+
def get_cursor_vertical_diff(self):
71+
return self.window.get_cursor_vertical_diff()
7572

73+
def get_top_usable_line(self):
74+
return self.window.top_usable_row
7675

7776
def on_suspend(self):
7877
self.window.__exit__(None, None, None)
@@ -87,7 +86,7 @@ def process_event(self, e):
8786
"""If None is passed in, just paint the screen"""
8887
try:
8988
if e is not None:
90-
Repl.process_event(self, e)
89+
BaseRepl.process_event(self, e)
9190
except (SystemExitFromCodeGreenlet, SystemExit) as err:
9291
array, cursor_pos = self.paint(
9392
about_to_exit=True,
@@ -188,14 +187,14 @@ def main(args=None, locals_=None, banner=None, welcome_message=None):
188187
print(bpargs.version_banner())
189188
if banner is not None:
190189
print(banner)
190+
global repl
191+
repl = FullCurtsiesRepl(config, locals_, welcome_message, interp, paste)
191192
try:
192-
r = FullCurtsiesRepl(config, locals_, welcome_message, interp, paste,
193-
interactive=(not exec_args))
194-
with r.input_generator:
195-
with r.window as win:
196-
with r:
197-
r.height, r.width = win.t.height, win.t.width
198-
exit_value = r.mainloop()
193+
with repl.input_generator:
194+
with repl.window as win:
195+
with repl:
196+
repl.height, repl.width = win.t.height, win.t.width
197+
exit_value = repl.mainloop()
199198
except (SystemExitFromCodeGreenlet, SystemExit) as e:
200199
exit_value = e.args
201200
return extract_exit_value(exit_value)

0 commit comments

Comments
 (0)