Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ff09ce7

Browse filesBrowse files
Add paste event processing to refresh request processing
1 parent c129420 commit ff09ce7
Copy full SHA for ff09ce7

2 files changed

+24-5Lines changed: 24 additions & 5 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎bpython/curtsies.py‎

Copy file name to clipboardExpand all lines: bpython/curtsies.py
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def main(args=None, locals_=None, banner=None):
2525
logging.basicConfig(filename='scroll.log', level=logging.DEBUG)
2626

2727
# do parsing before doing any frontend stuff
28-
with Terminal() as tc:
28+
with Terminal(paste_mode=True) as tc:
2929
with Window(tc, keep_last_line=True, hide_cursor=False) as term:
3030
#TODO why need to make repl first
3131
with Repl(config=config,
Collapse file

‎bpython/curtsiesfrontend/repl.py‎

Copy file name to clipboardExpand all lines: bpython/curtsiesfrontend/repl.py
+23-4Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,10 +179,10 @@ def request_refresh():
179179
self.stderr = FakeOutput(self.coderunner, self.send_to_stderr)
180180
self.stdin = FakeStdin(self.coderunner, self)
181181

182-
self.paste_mode = False
183182
self.request_paint_to_clear_screen = False
184183
self.last_events = [None] * 50
185184
self.presentation_mode = False
185+
self.paste_events = None
186186

187187
self.width = None # will both be set by a window resize event
188188
self.height = None
@@ -219,6 +219,22 @@ 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+
222238
## Event handling
223239
def process_event(self, e):
224240
"""Returns True if shutting down, otherwise mutates state of Repl object"""
@@ -232,7 +248,9 @@ def process_event(self, e):
232248
result = None
233249
logging.debug("processing event %r", e)
234250
if isinstance(e, events.RefreshRequestEvent):
235-
if self.status_bar.has_focus:
251+
if self.paste_events:
252+
self.process_paste_events()
253+
elif self.status_bar.has_focus:
236254
self.status_bar.process_event(e)
237255
else:
238256
assert self.coderunner.code_is_waiting
@@ -250,6 +268,9 @@ def process_event(self, e):
250268
self.keyboard_interrupt()
251269
self.update_completion()
252270
return
271+
elif isinstance(e, events.PasteEvent):
272+
self.paste_events = (event for event in e.events)
273+
self.process_paste_events()
253274

254275
elif e in self.rl_char_sequences:
255276
self.cursor_offset_in_line, self._current_line = self.rl_char_sequences[e](self.cursor_offset_in_line, self._current_line)
@@ -421,8 +442,6 @@ def update_completion(self, tab=False):
421442
"""Update autocomplete info; self.matches and self.argspec"""
422443
#TODO do we really have to do something this ugly? Can we rename it?
423444
# this method stolen from bpython.cli
424-
if self.paste_mode:
425-
return
426445

427446
if self.list_win_visible and not self.config.auto_display_list:
428447
self.list_win_visible = False

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.