From 64b48945d40c928be6e383d0f1116aeb68c901c8 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 15 Mar 2018 17:41:49 +0530 Subject: [PATCH] Add a focus-tab remote command Fixes #394 --- kitty/boss.py | 15 +++++++++++++-- kitty/remote_control.py | 21 +++++++++++++++++++++ remote-control.asciidoc | 9 +++++++-- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/kitty/boss.py b/kitty/boss.py index a5f11b107..4680d1986 100644 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -124,7 +124,10 @@ class Boss: } def match_windows(self, match): - field, exp = match.split(':', 1) + try: + field, exp = match.split(':', 1) + except ValueError: + return pat = re.compile(exp) for tm in self.os_window_map.values(): for tab in tm: @@ -140,7 +143,10 @@ class Boss: return tab def match_tabs(self, match): - field, exp = match.split(':', 1) + try: + field, exp = match.split(':', 1) + except ValueError: + return pat = re.compile(exp) tms = tuple(self.os_window_map.values()) found = False @@ -516,6 +522,11 @@ class Boss: if tm is not None: tm.goto_tab(tab_num - 1) + def set_active_tab(self, tab): + tm = self.active_tab_manager + if tm is not None: + tm.set_active_tab(tab) + def next_tab(self): tm = self.active_tab_manager if tm is not None: diff --git a/kitty/remote_control.py b/kitty/remote_control.py index 645bbecd6..f4bfc79d7 100644 --- a/kitty/remote_control.py +++ b/kitty/remote_control.py @@ -401,6 +401,27 @@ def focus_window(boss, window, payload): # }}} +# focus_tab {{{ +@cmd( + 'Focus the specified tab', + 'The active window in the specified tab will be focused.', + options_spec=MATCH_TAB_OPTION, + argspec='', +) +def cmd_focus_tab(global_opts, opts, args): + return {'match': opts.match} + + +def focus_tab(boss, window, payload): + match = payload['match'] + tabs = tuple(boss.match_tabs(match)) + if not tabs: + raise MatchError(match, 'tabs') + tab = tabs[0] + boss.set_active_tab(tab) +# }}} + + # get_text {{{ @cmd( 'Get text from the specified window', diff --git a/remote-control.asciidoc b/remote-control.asciidoc index 60f775aad..501236cc5 100644 --- a/remote-control.asciidoc +++ b/remote-control.asciidoc @@ -57,9 +57,14 @@ Let's change the title of the current tab: kitty @ set-tab-title Master Tab -Now lets switch to the newly opened tab. +Now lets switch to the newly opened tab: - kitty @ focus-window --match title:New + kitty @ focus-tab --match title:New + +Similarly, to focus the previously opened output window (which will also switch +back to the old tab, automatically): + + kitty @ focus-window --match title:Output You can get a listing of available tabs and windows, by running: