# Copyright (c) 2019 Nordic Semiconductor ASA # # SPDX-License-Identifier: Apache-2.0 import argparse import os from west import log from west.commands import WestCommand # Relative to the folder where this script lives COMPLETION_REL_PATH = 'completion/west-completion' COMP_DESCRIPTION = '''\ Output shell completion scripts for west. This command outputs completion scripts for different shells by printing them to stdout. Using the completion scripts: bash: # one-time source <(west completion bash) # permanent west completion bash > ~/west-completion.bash # edit your .bashrc or .bash_profile and add: source $HOME/west-completion.bash zsh: # one-time source <(west completion zsh) # permanent (might require sudo) west completion zsh > "${fpath[1]}/_west" fish: # one-time west completion fish | source # permanent west completion fish > $HOME/.config/fish/completions/west.fish positional arguments: source_dir application source directory cmake_opt extra options to pass to cmake; implies -c (these must come after "--" as shown above) ''' class Completion(WestCommand): def __init__(self): super().__init__( 'completion', # Keep this in sync with the string in west-commands.yml. 'output shell completion scripts', COMP_DESCRIPTION, accepts_unknown_args=False) def do_add_parser(self, parser_adder): parser = parser_adder.add_parser( self.name, help=self.help, formatter_class=argparse.RawDescriptionHelpFormatter, description=self.description) # Remember to update west-completion.bash if you add or remove # flags parser.add_argument('shell', nargs=1, choices=['bash', 'zsh', 'fish'], help='''Shell that which the completion script is intended for.''') return parser def do_run(self, args, unknown_args): cf = os.path.join(os.path.dirname(os.path.realpath(__file__)), *COMPLETION_REL_PATH.split('/')) cf += '.' + args.shell[0] try: with open(cf, 'r') as f: print(f.read()) except FileNotFoundError as e: log.die('Unable to find completion file: {}'.format(e))