1- import sys
1+ import code
2+ import contextlib
3+ import errno
4+ import greenlet
5+ import logging
26import os
37import re
4- import logging
5- import code
8+ import sys
69import threading
7- import greenlet
8- import errno
910
1011from bpython .autocomplete import Autocomplete , SIMPLE
1112from bpython .repl import Repl as BpythonRepl
@@ -210,7 +211,7 @@ def smarter_request_refresh():
210211 self .stderr = FakeOutput (self .coderunner , self .send_to_stderr )
211212 self .stdin = FakeStdin (self .coderunner , self )
212213
213- self .request_paint_to_clear_screen = False
214+ self .request_paint_to_clear_screen = False # next paint should clear screen
214215 self .last_events = [None ] * 50
215216 self .presentation_mode = False
216217 self .paste_mode = False
@@ -287,10 +288,9 @@ def process_event(self, e):
287288 self .update_completion ()
288289 return
289290 elif isinstance (e , events .PasteEvent ):
290- self .paste_mode = True
291- for ee in e .events :
292- self .process_simple_event (ee )
293- self .paste_mode = False
291+ with self .in_paste_mode ():
292+ for ee in e .events :
293+ self .process_simple_event (ee )
294294 self .update_completion ()
295295
296296 elif e in self .rl_char_sequences :
@@ -896,10 +896,9 @@ def send_current_block_to_external_editor(self, filename=None):
896896 lines .pop ()
897897 events = '\n ' .join (lines + (['' ] if len (lines ) == 1 else ['' , '' ]))
898898 self .clear_current_block ()
899- self .paste_mode = True
900- for e in events :
901- self .process_simple_event (e )
902- self .paste_mode = False
899+ with self .in_paste_mode ():
900+ for e in events :
901+ self .process_simple_event (e )
903902 self ._current_line = ''
904903 self .cursor_offset_in_line = len (self ._current_line )
905904
@@ -914,6 +913,13 @@ def process_simple_event(self, e):
914913 else :
915914 self .add_normal_character (e if len (e ) == 1 else e [- 1 ]) #strip control seq
916915
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+
917923def simple_repl ():
918924 refreshes = []
919925 def request_refresh ():
0 commit comments