Implement save via ^O (has a filename prompt)
This commit is contained in:
15
babi.py
15
babi.py
@@ -266,15 +266,17 @@ class Status:
|
|||||||
*,
|
*,
|
||||||
history: Optional[str] = None,
|
history: Optional[str] = None,
|
||||||
default_prev: bool = False,
|
default_prev: bool = False,
|
||||||
|
default: Optional[str] = None,
|
||||||
) -> Optional[str]:
|
) -> Optional[str]:
|
||||||
self.clear()
|
self.clear()
|
||||||
|
default = default or ''
|
||||||
if history is not None:
|
if history is not None:
|
||||||
lst = [*self._history[history], '']
|
lst = [*self._history[history], default]
|
||||||
lst_pos = len(lst) - 1
|
lst_pos = len(lst) - 1
|
||||||
if default_prev and history in self._history_prev:
|
if default_prev and history in self._history_prev:
|
||||||
prompt = f'{prompt} [{self._history_prev[history]}]'
|
prompt = f'{prompt} [{self._history_prev[history]}]'
|
||||||
else:
|
else:
|
||||||
lst = ['']
|
lst = [default]
|
||||||
lst_pos = 0
|
lst_pos = 0
|
||||||
pos = 0
|
pos = 0
|
||||||
|
|
||||||
@@ -1324,6 +1326,15 @@ def _edit(screen: Screen) -> EditResult:
|
|||||||
screen.status.update(f'invalid command: {response}')
|
screen.status.update(f'invalid command: {response}')
|
||||||
elif key.keyname == b'^S':
|
elif key.keyname == b'^S':
|
||||||
screen.file.save(screen, screen.status)
|
screen.file.save(screen, screen.status)
|
||||||
|
elif key.keyname == b'^O':
|
||||||
|
response = screen.status.prompt(
|
||||||
|
screen, 'enter filename', default=screen.file.filename,
|
||||||
|
)
|
||||||
|
if not response:
|
||||||
|
screen.status.update('cancelled')
|
||||||
|
else:
|
||||||
|
screen.file.filename = response
|
||||||
|
screen.file.save(screen, screen.status)
|
||||||
elif key.keyname == b'^X':
|
elif key.keyname == b'^X':
|
||||||
return EditResult.EXIT
|
return EditResult.EXIT
|
||||||
elif key.keyname == b'kLFT3':
|
elif key.keyname == b'kLFT3':
|
||||||
|
|||||||
@@ -101,3 +101,35 @@ def test_save_file_when_it_did_not_exist(tmpdir):
|
|||||||
h.await_text_missing('*')
|
h.await_text_missing('*')
|
||||||
|
|
||||||
assert f.read() == 'hello world\n'
|
assert f.read() == 'hello world\n'
|
||||||
|
|
||||||
|
|
||||||
|
def test_save_via_ctrl_o(tmpdir):
|
||||||
|
f = tmpdir.join('f')
|
||||||
|
with run(str(f)) as h, and_exit(h):
|
||||||
|
h.press('hello world')
|
||||||
|
h.press('^O')
|
||||||
|
h.await_text(f'enter filename: {f}')
|
||||||
|
h.press('Enter')
|
||||||
|
h.await_text('saved! (1 line written)')
|
||||||
|
assert f.read() == 'hello world\n'
|
||||||
|
|
||||||
|
|
||||||
|
def test_save_via_ctrl_o_set_filename(tmpdir):
|
||||||
|
f = tmpdir.join('f')
|
||||||
|
with run() as h, and_exit(h):
|
||||||
|
h.press('hello world')
|
||||||
|
h.press('^O')
|
||||||
|
h.await_text('enter filename:')
|
||||||
|
h.press_and_enter(str(f))
|
||||||
|
h.await_text('saved! (1 line written)')
|
||||||
|
assert f.read() == 'hello world\n'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('key', ('^C', 'Enter'))
|
||||||
|
def test_save_via_ctrl_o_cancelled(tmpdir, key):
|
||||||
|
with run() as h, and_exit(h):
|
||||||
|
h.press('hello world')
|
||||||
|
h.press('^O')
|
||||||
|
h.await_text('enter filename:')
|
||||||
|
h.press(key)
|
||||||
|
h.await_text('cancelled')
|
||||||
|
|||||||
Reference in New Issue
Block a user