Merge branch 'rcorre-backward-kill-word'

This commit is contained in:
Florian Bruhin 2016-07-30 18:49:58 +02:00
commit 57f256e80d
5 changed files with 52 additions and 3 deletions

View File

@ -17,6 +17,12 @@ This project adheres to http://semver.org/[Semantic Versioning].
v0.9.0 (unreleased)
-------------------
Added
~~~~~
- New `:rl-backward-kill-word` command which does what `:rl-unix-word-rubout`
did before v0.8.0.
Changed
~~~~~~~

View File

@ -946,6 +946,7 @@ How many steps to zoom out.
|<<repeat-command,repeat-command>>|Repeat the last executed command.
|<<rl-backward-char,rl-backward-char>>|Move back a character.
|<<rl-backward-delete-char,rl-backward-delete-char>>|Delete the character before the cursor.
|<<rl-backward-kill-word,rl-backward-kill-word>>|Remove chars from the cursor to the beginning of the word.
|<<rl-backward-word,rl-backward-word>>|Move back to the start of the current or previous word.
|<<rl-beginning-of-line,rl-beginning-of-line>>|Move to the start of the line.
|<<rl-delete-char,rl-delete-char>>|Delete the character after the cursor.
@ -1193,6 +1194,12 @@ Delete the character before the cursor.
This acts like readline's backward-delete-char.
[[rl-backward-kill-word]]
=== rl-backward-kill-word
Remove chars from the cursor to the beginning of the word.
This acts like readline's backward-kill-word. Any non-alphanumeric character is considered a word delimiter.
[[rl-backward-word]]
=== rl-backward-word
Move back to the start of the current or previous word.
@ -1251,7 +1258,7 @@ This acts like readline's unix-line-discard.
=== rl-unix-word-rubout
Remove chars from the cursor to the beginning of the word.
This acts like readline's unix-word-rubout.
This acts like readline's unix-word-rubout. Whitespace is used as a word delimiter.
[[rl-yank]]
=== rl-yank

View File

@ -1587,7 +1587,8 @@ KEY_DATA = collections.OrderedDict([
('rl-unix-line-discard', ['<Ctrl-U>']),
('rl-kill-line', ['<Ctrl-K>']),
('rl-kill-word', ['<Alt-D>']),
('rl-unix-word-rubout', ['<Ctrl-W>', '<Alt-Backspace>']),
('rl-unix-word-rubout', ['<Ctrl-W>']),
('rl-backward-kill-word', ['<Alt-Backspace>']),
('rl-yank', ['<Ctrl-Y>']),
('rl-delete-char', ['<Ctrl-?>']),
('rl-backward-delete-char', ['<Ctrl-H>']),

View File

@ -153,7 +153,8 @@ class ReadlineBridge:
def rl_unix_word_rubout(self):
"""Remove chars from the cursor to the beginning of the word.
This acts like readline's unix-word-rubout.
This acts like readline's unix-word-rubout. Whitespace is used as a
word delimiter.
"""
widget = self._widget()
if widget is None:
@ -178,6 +179,21 @@ class ReadlineBridge:
self._deleted[widget] = widget.selectedText()
widget.del_()
@cmdutils.register(instance='readline-bridge', hide=True,
modes=[typ.KeyMode.command, typ.KeyMode.prompt])
def rl_backward_kill_word(self):
"""Remove chars from the cursor to the beginning of the word.
This acts like readline's backward-kill-word. Any non-alphanumeric
character is considered a word delimiter.
"""
widget = self._widget()
if widget is None:
return
widget.cursorWordBackward(True)
self._deleted[widget] = widget.selectedText()
widget.del_()
@cmdutils.register(instance='readline-bridge', hide=True,
modes=[typ.KeyMode.command, typ.KeyMode.prompt])
def rl_kill_word(self):

View File

@ -269,6 +269,25 @@ def test_rl_kill_word(lineedit, bridge, text, deleted, rest):
assert lineedit.aug_text() == deleted + '|'
@pytest.mark.parametrize('text, deleted, rest', [
('test delete|foobar', 'delete', 'test |foobar'),
('test delete |foobar', 'delete ', 'test |foobar'),
('open -t github.com/foo/bar |', 'bar ', 'open -t github.com/foo/|'),
('open -t |github.com/foo/bar', 't ', 'open -|github.com/foo/bar'),
fixme(('test del<ete>foobar', 'delete', 'test |foobar')),
('test del<ete >foobar', 'del', 'test |ete foobar'), # wrong
])
def test_rl_backward_kill_word(lineedit, bridge, text, deleted, rest):
"""Delete to word beginning and see if it comes back with yank."""
lineedit.set_aug_text(text)
bridge.rl_backward_kill_word()
assert bridge._deleted[lineedit] == deleted
assert lineedit.aug_text() == rest
lineedit.clear()
bridge.rl_yank()
assert lineedit.aug_text() == deleted + '|'
def test_rl_yank_no_text(lineedit, bridge):
"""Test yank without having deleted anything."""
lineedit.clear()