Cancel commands by entering a blank command or ^C

This commit is contained in:
Anthony Sottile
2019-10-24 10:54:09 -07:00
parent be13a526d4
commit a2fc4772cf
2 changed files with 34 additions and 4 deletions

10
babi.py
View File

@@ -174,6 +174,8 @@ class Status:
elif isinstance(key.wch, str) and key.wch.isprintable():
buf = buf[:pos] + key.wch + buf[pos:]
pos += 1
elif key.keyname == b'^C':
return ''
elif key.key == ord('\r'):
return buf
@@ -610,11 +612,11 @@ def _edit(screen: Screen) -> EditResult:
return EditResult.EXIT
elif response == ':w':
screen.file.save(screen.status, screen.margin)
elif response == '': # noop / cancel
screen.status.update('', screen.margin)
else:
screen.status.update(
f'{response} is not a valid command.',
screen.margin,
)
msg = f'invalid command: {response}'
screen.status.update(msg, screen.margin)
elif key.keyname == b'^S':
screen.file.save(screen.status, screen.margin)
elif key.keyname == b'^X':

View File

@@ -949,3 +949,31 @@ def test_resizing_and_scrolling_in_command_mode():
h.await_text(f'\n{"b" * 15}\n')
h.press('Enter')
def test_invalid_command():
with run() as h, and_exit(h):
trigger_command_mode(h)
h.press_and_enter(':fake')
h.await_text('invalid command: :fake')
def test_empty_command_is_noop():
with run() as h, and_exit(h):
h.press('hello ')
trigger_command_mode(h)
h.press('Enter')
h.press('world')
h.await_text('hello world')
h.await_text_missing('invalid command')
def test_cancel_command_mode():
with run() as h, and_exit(h):
h.press('hello ')
trigger_command_mode(h)
h.press(':q')
h.press('^C')
h.press('world')
h.await_text('hello world')
h.await_text_missing('invalid command')