Add a --no-response argument to kitty @ new-window

See #786
This commit is contained in:
Kovid Goyal 2018-08-04 15:57:43 +05:30
parent 5fa5bf8142
commit 4189aa8f14
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 27 additions and 7 deletions

View File

@ -384,7 +384,7 @@ def close_tab(boss, window, payload):
'Open new window',
'Open a new window in the specified tab. If you use the :option:`kitty @ new-window --match` option'
' the first matching tab is used. Otherwise the currently active tab is used.'
' Prints out the id of the newly opened window. Any command line arguments'
' Prints out the id of the newly opened window (unless :option:`--no-response` is used). Any command line arguments'
' are assumed to be the command line used to run in the new window, if none'
' are provided, the default shell is run. For example:\n'
':italic:`kitty @ new-window --title Email mutt`',
@ -416,13 +416,23 @@ Open a new tab
--tab-title
When using --new-tab set the title of the tab.
--no-response
type=bool-set
default=false
Dont wait for a response giving the id of the newly opened window. Note that
using this option means that you will not be notified of failures and that
the id of the new window will not be printed out.
''',
argspec='[CMD ...]'
)
def cmd_new_window(global_opts, opts, args):
if opts.no_response:
global_opts.no_command_response = True
return {'match': opts.match, 'title': opts.title, 'cwd': opts.cwd,
'new_tab': opts.new_tab, 'tab_title': opts.tab_title,
'window_type': opts.window_type,
'window_type': opts.window_type, 'no_response': opts.no_response,
'keep_focus': opts.keep_focus, 'args': args or []}
@ -437,7 +447,7 @@ def new_window(boss, window, payload):
wid = boss.active_window.id
if payload['keep_focus'] and old_window:
boss.set_active_window(old_window)
return str(wid)
return None if payload['no_response'] else str(wid)
if payload['window_type'] == 'os':
boss._new_os_window(w)
@ -446,7 +456,7 @@ def new_window(boss, window, payload):
os_window_id = boss.set_active_window(old_window)
if os_window_id:
focus_os_window(os_window_id)
return str(wid)
return None if payload['no_response'] else str(wid)
match = payload['match']
if match:
@ -459,7 +469,7 @@ def new_window(boss, window, payload):
w = tab.new_special_window(w)
if payload['keep_focus'] and old_window:
boss.set_active_window(old_window)
return str(w.id)
return None if payload['no_response'] else str(w.id)
# }}}

View File

@ -19,6 +19,8 @@ def handle_cmd(boss, window, cmd):
cmd = json.loads(cmd)
v = cmd['version']
if tuple(v)[:2] > version[:2]:
if cmd['no_response']:
return
return {'ok': False, 'error': 'The kitty client you are using to send remote commands is newer than this kitty instance. This is not supported.'}
c = cmap[cmd['cmd']]
func = partial(c.impl(), boss, window)
@ -27,7 +29,7 @@ def handle_cmd(boss, window, cmd):
response = {'ok': True}
if ans is not None:
response['data'] = ans
if not c.no_response:
if not c.no_response and not cmd['no_response']:
return response
@ -137,6 +139,7 @@ def parse_rc_args(args):
def main(args):
global_opts, items = parse_rc_args(args)
global_opts.no_command_response = None
if not items:
from kitty.shell import main
@ -156,7 +159,14 @@ def main(args):
}
if payload is not None:
send['payload'] = payload
response = do_io(global_opts.to, send, func.no_response)
if global_opts.no_command_response is not None:
no_response = global_opts.no_command_response
else:
no_response = func.no_response
send['no_response'] = no_response
response = do_io(global_opts.to, send, no_response)
if no_response:
return
if not response.get('ok'):
if response.get('tb'):
print(response['tb'], file=sys.stderr)