From eab4615fe046d40aefdf4cd18643f99183fc4aba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Sch=C3=A4fer?= Date: Sun, 10 May 2020 11:21:56 +0200 Subject: 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. --- doc/source/commands.rst | 9 +++++++++ poezio/core/commands.py | 14 ++++++++++++++ poezio/core/core.py | 6 ++++++ poezio/core/tabs.py | 1 + 4 files changed, 30 insertions(+) diff --git a/doc/source/commands.rst b/doc/source/commands.rst index dab2eceb..5ea69abd 100644 --- a/doc/source/commands.rst +++ b/doc/source/commands.rst @@ -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 `` + + 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 [status message]`` diff --git a/poezio/core/commands.py b/poezio/core/commands.py index 6bf1d338..46dab5cc 100644 --- a/poezio/core/commands.py +++ b/poezio/core/commands.py @@ -219,6 +219,20 @@ class CommandCore: return self.core.tabs.set_current_tab(match) + @command_args_parser.quoted(1) + def wup(self, args): + """ + /wup + """ + 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): """ diff --git a/poezio/core/core.py b/poezio/core/core.py index 06d56062..eac9d539 100644 --- a/poezio/core/core.py +++ b/poezio/core/core.py @@ -1709,6 +1709,12 @@ class Core: usage='', shortdesc='Go to the specified room', completion=self.completion.win) + self.register_command( + 'wup', + self.command.wup, + usage='', + 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', diff --git a/poezio/core/tabs.py b/poezio/core/tabs.py index c5ecb206..d5909d39 100644 --- a/poezio/core/tabs.py +++ b/poezio/core/tabs.py @@ -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: -- cgit v1.2.3