X Tutup
Skip to content

Commit de89b7d

Browse files
reorganize methods
1 parent 1f34051 commit de89b7d

File tree

1 file changed

+59
-59
lines changed

1 file changed

+59
-59
lines changed

bpython/curtsiesfrontend/repl.py

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,6 @@ def smarter_request_refresh():
220220
self.height = None
221221
self.start_background_tasks()
222222

223-
@property
224-
def done(self):
225-
"""Whether the last block is complete - which prompt to use, ps1 or ps2"""
226-
return not self.buffer
227-
228223
def __enter__(self):
229224
self.orig_stdout = sys.stdout
230225
self.orig_stderr = sys.stderr
@@ -445,6 +440,41 @@ def only_whitespace_left_of_cursor():
445440
self.current_word = (self.matches_iter.previous()
446441
if back else self.matches_iter.next())
447442

443+
def process_simple_event(self, e):
444+
if e in ("\n", "\r", "PAD_ENTER"):
445+
self.on_enter()
446+
while self.fake_refresh_requested:
447+
self.fake_refresh_requested = False
448+
self.process_event(events.RefreshRequestEvent())
449+
elif isinstance(e, events.Event):
450+
pass # ignore events
451+
else:
452+
self.add_normal_character(e if len(e) == 1 else e[-1]) #strip control seq
453+
454+
def send_current_block_to_external_editor(self, filename=None):
455+
text = self.send_to_external_editor(self.get_current_block())
456+
lines = [line for line in text.split('\n')]
457+
while lines and not lines[-1].split():
458+
lines.pop()
459+
events = '\n'.join(lines + ([''] if len(lines) == 1 else ['', '']))
460+
self.clear_current_block()
461+
with self.in_paste_mode():
462+
for e in events:
463+
self.process_simple_event(e)
464+
self._current_line = ''
465+
self.cursor_offset_in_line = len(self._current_line)
466+
467+
def send_session_to_external_editor(self, filename=None):
468+
for_editor = '### current bpython session - file will be reevaluated, ### lines will not be run\n'.encode('utf8')
469+
for_editor += ('\n'.join(line[4:] if line[:4] in ('... ', '>>> ') else '### '+line
470+
for line in self.getstdout().split('\n')).encode('utf8'))
471+
text = self.send_to_external_editor(for_editor)
472+
lines = text.split('\n')
473+
self.history = [line for line in lines if line[:4] != '### ']
474+
self.reevaluate(insert_into_history=True)
475+
self._current_line = lines[-1][4:]
476+
self.cursor_offset_in_line = len(self._current_line)
477+
448478
## Handler Helpers
449479
def add_normal_character(self, char):
450480
assert len(char) == 1, repr(char)
@@ -566,7 +596,24 @@ def unhighlight_paren(self):
566596
self.display_buffer[lineno] = self.display_buffer[lineno].setslice(0, len(new), new)
567597

568598

599+
def clear_current_block(self):
600+
self.display_buffer = []
601+
[self.history.pop() for _ in self.buffer]
602+
self.buffer = []
603+
self.cursor_offset_in_line = 0
604+
self.saved_indent = 0
605+
self._current_line = ''
606+
self.cursor_offset_in_line = len(self._current_line)
607+
608+
def get_current_block(self):
609+
return '\n'.join(self.buffer + [self._current_line])
610+
569611
## formatting, output
612+
@property
613+
def done(self):
614+
"""Whether the last block is complete - which prompt to use, ps1 or ps2"""
615+
return not self.buffer
616+
570617
@property
571618
def current_line_formatted(self):
572619
if self.config.syntax:
@@ -754,6 +801,13 @@ def paint(self, about_to_exit=False, user_quit=False):
754801
logging.debug('cursor pos: %r', (cursor_row, cursor_column))
755802
return arr, (cursor_row, cursor_column)
756803

804+
@contextlib.contextmanager
805+
def in_paste_mode(self):
806+
orig_value = self.paste_mode
807+
self.paste_mode = True
808+
yield
809+
self.paste_mode = orig_value
810+
757811
## Debugging shims
758812
def dumb_print_output(self):
759813
arr, cpos = self.paint()
@@ -866,60 +920,6 @@ def getstdout(self):
866920
s = '\n'.join([x.s if isinstance(x, FmtStr) else x for x in lines]
867921
) if lines else ''
868922
return s
869-
def send_session_to_external_editor(self, filename=None):
870-
for_editor = '### current bpython session - file will be reevaluated, ### lines will not be run\n'.encode('utf8')
871-
for_editor += ('\n'.join(line[4:] if line[:4] in ('... ', '>>> ') else '### '+line
872-
for line in self.getstdout().split('\n')).encode('utf8'))
873-
text = self.send_to_external_editor(for_editor)
874-
lines = text.split('\n')
875-
self.history = [line for line in lines if line[:4] != '### ']
876-
self.reevaluate(insert_into_history=True)
877-
self._current_line = lines[-1][4:]
878-
self.cursor_offset_in_line = len(self._current_line)
879-
880-
def get_current_block(self):
881-
return '\n'.join(self.buffer + [self._current_line])
882-
883-
def clear_current_block(self):
884-
self.display_buffer = []
885-
[self.history.pop() for _ in self.buffer]
886-
self.buffer = []
887-
self.cursor_offset_in_line = 0
888-
self.saved_indent = 0
889-
self._current_line = ''
890-
self.cursor_offset_in_line = len(self._current_line)
891-
892-
def send_current_block_to_external_editor(self, filename=None):
893-
text = self.send_to_external_editor(self.get_current_block())
894-
lines = [line for line in text.split('\n')]
895-
while lines and not lines[-1].split():
896-
lines.pop()
897-
events = '\n'.join(lines + ([''] if len(lines) == 1 else ['', '']))
898-
self.clear_current_block()
899-
with self.in_paste_mode():
900-
for e in events:
901-
self.process_simple_event(e)
902-
self._current_line = ''
903-
self.cursor_offset_in_line = len(self._current_line)
904-
905-
def process_simple_event(self, e):
906-
if e in ("\n", "\r", "PAD_ENTER"):
907-
self.on_enter()
908-
while self.fake_refresh_requested:
909-
self.fake_refresh_requested = False
910-
self.process_event(events.RefreshRequestEvent())
911-
elif isinstance(e, events.Event):
912-
pass # ignore events
913-
else:
914-
self.add_normal_character(e if len(e) == 1 else e[-1]) #strip control seq
915-
916-
@contextlib.contextmanager
917-
def in_paste_mode(self):
918-
orig_value = self.paste_mode
919-
self.paste_mode = True
920-
yield
921-
self.paste_mode = orig_value
922-
923923
def simple_repl():
924924
refreshes = []
925925
def request_refresh():

0 commit comments

Comments
 (0)
X Tutup