@@ -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