Move repeat-command, make it work with multiple modes, improve tests

This commit is contained in:
Jan Verbeek 2016-06-30 02:22:02 +02:00
parent 64731c2053
commit 320b9cac3f
7 changed files with 47 additions and 73 deletions

View File

@ -1972,17 +1972,3 @@ class CommandDispatcher:
key: mark identifier; capital indicates a global mark
"""
self._tabbed_browser.jump_mark(key)
@cmdutils.register(instance='command-dispatcher', scope='window')
@cmdutils.argument('count', count=True)
def repeat_command(self, count=None):
"""Repeat the last executed command, like '.' in vi.
Args:
count: Which numeric argument to give the command.
"""
if runners.last_command is None:
raise cmdexc.CommandError("You didn't do anything yet.")
runners.CommandRunner(self._win_id).run(
runners.last_command[0],
count if count is not None else runners.last_command[1])

View File

@ -32,7 +32,7 @@ from qutebrowser.misc import split
ParseResult = collections.namedtuple('ParseResult', ['cmd', 'args', 'cmdline',
'count'])
last_command = None
last_command = {}
def _current_url(tabbed_browser):
@ -286,11 +286,14 @@ class CommandRunner(QObject):
else:
result.cmd.run(self._win_id, args)
mode_manager = objreg.get('mode-manager', scope='window',
window=self._win_id)
if (result.cmdline[0] != 'repeat-command' and
result.cmd.mode_allowed(usertypes.KeyMode.normal)):
result.cmd.mode_allowed(mode_manager.mode)):
global last_command
last_command = (self._parse_count(text)[1],
count if count is not None else result.count)
last_command[mode_manager.mode] = (
self._parse_count(text)[1],
count if count is not None else result.count)
@pyqtSlot(str, int)
@pyqtSlot(str)

View File

@ -217,3 +217,19 @@ def debug_set_fake_clipboard(s=None):
utils.log_clipboard = True
else:
utils.fake_clipboard = s
@cmdutils.register()
@cmdutils.argument('win_id', win_id=True)
@cmdutils.argument('count', count=True)
def repeat_command(win_id, count=None):
"""Repeat the last executed command, like '.' in vi.
Args:
count: Which numeric argument to give the command.
"""
mode_manager = objreg.get('mode-manager', scope='window',
window=win_id)
if mode_manager.mode not in runners.last_command:
raise cmdexc.CommandError("You didn't do anything yet.")
cmd = runners.last_command[mode_manager.mode]
commandrunner = runners.CommandRunner(win_id)
commandrunner.run(cmd[0], count if count is not None else cmd[1])

View File

@ -464,3 +464,26 @@ Feature: Various utility commands.
And I wait until cookies is loaded
And I open cookies in a new tab
Then the cookie qute-test should be set to 42
Scenario: :repeat-command
Given I open data/scroll.html
When I run :scroll down
And I run :repeat-command
And I run :scroll up
Then the page should be scrolled vertically
Scenario: :repeat-command with count
Given I open data/scroll.html
When I run :scroll down with count 3
And I run :scroll up
And I run :repeat-command with count 2
Then the page should not be scrolled
Scenario: :repeat-command with not-normal command inbetween
Given I open data/scroll.html
When I run :scroll down with count 3
And I run :scroll up
And I run :prompt-accept
And I run :repeat-command with count 2
Then the page should not be scrolled
And the error "prompt-accept: This command is only allowed in prompt/yesno mode." should be shown

View File

@ -1,34 +0,0 @@
Feature: Repeating
Test the repeat-command command.
Background:
Given I run :tab-only
Scenario: :repeat-command
When I open data/numbers/1.txt
And I open data/numbers/2.txt in a new tab
And I open data/numbers/3.txt in a new tab
And I run :tab-close with count 1
And I run :repeat-command
Then the following tabs should be open:
- data/numbers/3.txt (active)
Scenario: :repeat-command with count
When I open data/numbers/1.txt
And I open data/numbers/2.txt in a new tab
And I open data/numbers/3.txt in a new tab
And I run :tab-close with count 1
And I run :repeat-command with count 2
Then the following tabs should be open:
- data/numbers/2.txt (active)
Scenario: :repeat-command with not-normal command inbetween
When I open data/numbers/1.txt
And I open data/numbers/2.txt in a new tab
And I open data/numbers/3.txt in a new tab
And I run :tab-close with count 1
And I run :prompt-accept
And I run :repeat-command
Then the following tabs should be open:
- data/numbers/3.txt (active)
And the error "prompt-accept: This command is only allowed in prompt/yesno mode." should be shown

View File

@ -29,6 +29,7 @@ import qutebrowser
from qutebrowser.utils import docutils
from qutebrowser.browser import pdfjs
from end2end.features.test_scroll_bdd import check_scrolled, check_not_scrolled
bdd.scenarios('misc.feature')

View File

@ -1,21 +0,0 @@
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
# Copyright 2016 Jan Verbeek (blyxxyz) <ring@openmailbox.org>
#
# This file is part of qutebrowser.
#
# qutebrowser is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# qutebrowser is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
import pytest_bdd as bdd
bdd.scenarios('repeatcommand.feature')