Skip to content

Commit 10c7a25

Browse files
paste events work now - not well tested yet though
1 parent ff09ce7 commit 10c7a25

File tree

1 file changed

+16
-23
lines changed

1 file changed

+16
-23
lines changed

bpython/curtsiesfrontend/repl.py

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def __init__(self, locals_=None, config=None, stuff_a_refresh_request=lambda: No
141141
self.reevaluating = False
142142
self.fake_refresh_request = False
143143
def request_refresh():
144-
if self.reevaluating:
144+
if self.reevaluating or self.paste_mode:
145145
self.fake_refresh_request = True
146146
else:
147147
stuff_a_refresh_request()
@@ -182,7 +182,7 @@ def request_refresh():
182182
self.request_paint_to_clear_screen = False
183183
self.last_events = [None] * 50
184184
self.presentation_mode = False
185-
self.paste_events = None
185+
self.paste_mode = False
186186

187187
self.width = None # will both be set by a window resize event
188188
self.height = None
@@ -219,22 +219,6 @@ def clean_up_current_line_for_exit(self):
219219
self.cursor_offset_in_line = -1
220220
self.unhighlight_paren()
221221

222-
def process_paste_events(self):
223-
for ee in self.paste_events:
224-
if isinstance(ee, events.Event):
225-
pass
226-
else:
227-
if ee in ("\n", "\r", "PAD_ENTER"):
228-
self.on_enter()
229-
break
230-
elif isinstance(ee, events.Event):
231-
pass # ignore events in a paste
232-
else:
233-
self.add_normal_character(ee if len(ee) == 1 else ee[-1]) #strip control seq
234-
else:
235-
self.self.paste_events = None
236-
self.update_completion()
237-
238222
## Event handling
239223
def process_event(self, e):
240224
"""Returns True if shutting down, otherwise mutates state of Repl object"""
@@ -248,9 +232,7 @@ def process_event(self, e):
248232
result = None
249233
logging.debug("processing event %r", e)
250234
if isinstance(e, events.RefreshRequestEvent):
251-
if self.paste_events:
252-
self.process_paste_events()
253-
elif self.status_bar.has_focus:
235+
if self.status_bar.has_focus:
254236
self.status_bar.process_event(e)
255237
else:
256238
assert self.coderunner.code_is_waiting
@@ -269,8 +251,19 @@ def process_event(self, e):
269251
self.update_completion()
270252
return
271253
elif isinstance(e, events.PasteEvent):
272-
self.paste_events = (event for event in e.events)
273-
self.process_paste_events()
254+
self.paste_mode = True
255+
for ee in e.events:
256+
if ee in ("\n", "\r", "PAD_ENTER"):
257+
self.on_enter()
258+
while self.fake_refresh_request:
259+
self.fake_refresh_request = False
260+
self.process_event(events.RefreshRequestEvent())
261+
elif isinstance(ee, events.Event):
262+
pass # ignore events in a paste
263+
else:
264+
self.add_normal_character(ee if len(ee) == 1 else ee[-1]) #strip control seq
265+
self.paste_mode = False
266+
self.update_completion()
274267

275268
elif e in self.rl_char_sequences:
276269
self.cursor_offset_in_line, self._current_line = self.rl_char_sequences[e](self.cursor_offset_in_line, self._current_line)

0 commit comments

Comments
 (0)