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 402bb33

Browse filesBrowse files
save and pastebin both work well
--HG-- branch : scroll-frontend
1 parent 2e54cbb commit 402bb33
Copy full SHA for 402bb33

2 files changed

+32-17Lines changed: 32 additions & 17 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/curtsiesfrontend/interaction.py‎

Copy file name to clipboardExpand all lines: bpython/curtsiesfrontend/interaction.py
+15-6Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import greenlet
22
import time
3+
import curtsies.events as events
34

45
from bpython.repl import Interaction as BpythonInteraction
56

@@ -18,22 +19,24 @@ class StatusBar(BpythonInteraction):
1819
functionality in a evented or callback style, but trying to integrate
1920
bpython.Repl code.
2021
"""
21-
def __init__(self, initial_message='', permanent_text=""):
22+
def __init__(self, initial_message='', permanent_text="", stuff_a_refresh_request=lambda: None):
2223
self._current_line = ''
2324
self.cursor_offset_in_line = 0
2425
self.in_prompt = False
2526
self.in_confirm = False
27+
self.waiting_for_refresh = False
2628
self.prompt = ''
2729
self._message = initial_message
2830
self.message_start_time = time.time()
2931
self.message_time = 3
3032
self.permanent_text = permanent_text
3133
self.main_greenlet = greenlet.getcurrent()
3234
self.request_greenlet = None
35+
self.stuff_a_refresh_request = stuff_a_refresh_request
3336

3437
@property
3538
def has_focus(self):
36-
return self.in_prompt or self.in_confirm
39+
return self.in_prompt or self.in_confirm or self.waiting_for_refresh
3740

3841
def message(self, msg):
3942
self.message_start_time = time.time()
@@ -45,8 +48,11 @@ def _check_for_expired_message(self):
4548

4649
def process_event(self, e):
4750
"""Returns True if shutting down"""
48-
assert self.in_prompt or self.in_confirm
49-
if e in rl_char_sequences:
51+
assert self.in_prompt or self.in_confirm or self.waiting_for_refresh
52+
if isinstance(e, events.RefreshRequestEvent):
53+
self.waiting_for_refresh = False
54+
self.request_greenlet.switch()
55+
elif e in rl_char_sequences:
5056
self.cursor_offset_in_line, self._current_line = rl_char_sequences[e](self.cursor_offset_in_line, self._current_line)
5157
elif e == "":
5258
raise KeyboardInterrupt()
@@ -55,7 +61,7 @@ def process_event(self, e):
5561
elif self.in_prompt and e in ("\n", "\r"):
5662
line = self._current_line
5763
self.escape()
58-
self.main_greenlet_switch(line)
64+
self.request_greenlet.switch(line)
5965
elif self.in_confirm:
6066
if e in ('y', 'Y'):
6167
self.request_greenlet.switch(True)
@@ -94,6 +100,8 @@ def notify(self, msg, n=3):
94100
self.request_greenlet = greenlet.getcurrent()
95101
self.message_time = n
96102
self.message(msg)
103+
self.waiting_for_refresh = True
104+
self.stuff_a_refresh_request()
97105
self.main_greenlet.switch(msg)
98106

99107
# below Really ought to be called from greenlets other than main because they block
@@ -108,4 +116,5 @@ def file_prompt(self, s):
108116
self.request_greenlet = greenlet.getcurrent()
109117
self.prompt = s.replace('Esc', 'Tab')
110118
self.in_prompt = True
111-
return self.main_greenlet.switch(s)
119+
result = self.main_greenlet.switch(s)
120+
return result
Collapse file

‎bpython/curtsiesfrontend/repl.py‎

Copy file name to clipboardExpand all lines: bpython/curtsiesfrontend/repl.py
+17-11Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,20 @@ def __init__(self, locals_=None, config=None, stuff_a_refresh_request=lambda: No
140140
if config.cli_suggestion_width <= 0 or config.cli_suggestion_width > 1:
141141
config.cli_suggestion_width = 1
142142

143+
self.reevaluating = False
144+
self.fake_refresh_request = False
145+
def request_refresh():
146+
if self.reevaluating:
147+
self.fake_refresh_request = True
148+
else:
149+
stuff_a_refresh_request()
150+
self.stuff_a_refresh_request = request_refresh
151+
143152
self.status_bar = StatusBar(banner if config.curtsies_fill_terminal else '', _(
144153
" <%s> Rewind <%s> Save <%s> Pastebin <%s> Editor"
145-
) % (config.undo_key, config.save_key, config.pastebin_key, config.external_editor_key))
154+
) % (config.undo_key, config.save_key, config.pastebin_key, config.external_editor_key),
155+
stuff_a_refresh_request=self.stuff_a_refresh_request
156+
)
146157
self.rl_char_sequences = get_updated_char_sequences(key_dispatch, config)
147158
logging.debug("starting parent init")
148159
super(Repl, self).__init__(interp, config)
@@ -165,14 +176,6 @@ def __init__(self, locals_=None, config=None, stuff_a_refresh_request=lambda: No
165176
self.cursor_offset_in_line = 0 # from the left, 0 means first char
166177
self.done = True
167178

168-
self.reevaluating = False
169-
self.fake_refresh_request = False
170-
def request_refresh():
171-
if self.reevaluating:
172-
self.fake_refresh_request = True
173-
else:
174-
stuff_a_refresh_request()
175-
self.stuff_a_refresh_request = request_refresh
176179
self.coderunner = CodeRunner(self.interp, request_refresh)
177180
self.stdout = FakeOutput(self.coderunner, self.send_to_stdout)
178181
self.stderr = FakeOutput(self.coderunner, self.send_to_stderr)
@@ -231,8 +234,11 @@ def process_event(self, e):
231234
result = None
232235
logging.debug("processing event %r", e)
233236
if isinstance(e, events.RefreshRequestEvent):
234-
assert self.coderunner.code_is_waiting
235-
self.run_code_and_maybe_finish()
237+
if self.status_bar.has_focus:
238+
self.status_bar.process_event(e)
239+
else:
240+
assert self.coderunner.code_is_waiting
241+
self.run_code_and_maybe_finish()
236242
elif isinstance(e, events.WindowChangeEvent):
237243
logging.debug('window change to %d %d', e.width, e.height)
238244
self.width, self.height = e.width, e.height

0 commit comments

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