summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Schäfer <j.wielicki@sotecware.net>2020-05-10 11:21:56 +0200
committerJonas Schäfer <j.wielicki@sotecware.net>2020-05-12 22:26:51 +0200
commiteab4615fe046d40aefdf4cd18643f99183fc4aba (patch)
tree64532b6b07f693401ebfea56a7031f55afda1b94
parentc1863addfd33d3d3f3f03bcb036a0966097914cb (diff)
downloadpoezio-eab4615fe046d40aefdf4cd18643f99183fc4aba.tar.gz
poezio-eab4615fe046d40aefdf4cd18643f99183fc4aba.tar.bz2
poezio-eab4615fe046d40aefdf4cd18643f99183fc4aba.tar.xz
poezio-eab4615fe046d40aefdf4cd18643f99183fc4aba.zip
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.
-rw-r--r--doc/source/commands.rst9
-rw-r--r--poezio/core/commands.py14
-rw-r--r--poezio/core/core.py6
-rw-r--r--poezio/core/tabs.py1
4 files changed, 30 insertions, 0 deletions
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 <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]``
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 <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):
"""
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='<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',
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: