Add /wup command

The `/wup` command selects a tab by the prefix of its name only.

The `/win` will do a substring match based on the first tab
going from the current tab which matches the substring. This can
be confusing, especially since `/win` matches on different types
of tab "names" not only on the name which is shown in the info bar
by default.

The `/wup` command exclusively matches based on the prefix of the
tab.name string. This has the advantage that it is consistent,
deterministic and independent of the currently selected tab.
This commit is contained in:
Jonas Schäfer 2020-05-10 11:21:56 +02:00
parent c1863addfd
commit eab4615fe0
4 changed files with 30 additions and 0 deletions

View file

@ -93,6 +93,15 @@ These commands work in *any* tab.
Go to the matching tab. If the argument is a number, it goes to the tab with that number.
Otherwise, it goes to the next tab whose name contains the given string.
/wup
**Usage:** ``/wup <prefix>``
Go to the tab whose name starts with `prefix`. If multiple tabs start
with that prefix, no action is taken.
(Mnemonic: Window by Unique Prefix)
/status
**Usage:** ``/status <availability> [status message]``

View file

@ -219,6 +219,20 @@ class CommandCore:
return
self.core.tabs.set_current_tab(match)
@command_args_parser.quoted(1)
def wup(self, args):
"""
/wup <prefix of name>
"""
if args is None:
return self.help('wup')
prefix = args[0]
_, match = self.core.tabs.find_by_unique_prefix(prefix)
if match is None:
return
self.core.tabs.set_current_tab(match)
@command_args_parser.quoted(2)
def move_tab(self, args):
"""

View file

@ -1709,6 +1709,12 @@ class Core:
usage='<number or name>',
shortdesc='Go to the specified room',
completion=self.completion.win)
self.register_command(
'wup',
self.command.wup,
usage='<prefix>',
shortdesc='Go to the tab whose name uniquely starts with prefix',
completion=self.completion.win)
self.commands['w'] = self.commands['win']
self.register_command(
'move_tab',

View file

@ -29,6 +29,7 @@ from collections import defaultdict
from slixmpp import JID
from poezio import tabs
from poezio.events import EventHandler
from poezio.config import config
class Tabs: