Windows powershell can by default not autocomplete known boards when tapping which can cause frustration when you can't quite remember the exact name or you don't want to type it out. west build .\path\to\application\ -p -b stm<tab> will search for available board including 'stm' in their name. Signed-off-by: Tais Hjortshøj <tbh@mjolner.dk>
94 lines
2.8 KiB
Python
94 lines
2.8 KiB
Python
# Copyright (c) 2019 Nordic Semiconductor ASA
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
import argparse
|
|
import os
|
|
|
|
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
|
|
|
|
powershell:
|
|
# one-time
|
|
west completion powershell | Out-String | Invoke-Expression
|
|
# permanent
|
|
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
|
|
New-item -type file -force $PROFILE
|
|
(Add-Content -Path $PROFILE -Value ". '{$HOME/west-completion.ps1}'")
|
|
|
|
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):
|
|
_EXT_MAPPING = {
|
|
"bash": "bash",
|
|
"fish": "fish",
|
|
"powershell": "ps1",
|
|
"zsh": "zsh",
|
|
}
|
|
|
|
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=self._EXT_MAPPING.keys(),
|
|
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 += '.' + self._EXT_MAPPING[args.shell[0]]
|
|
|
|
try:
|
|
with open(cf, 'r') as f:
|
|
print(f.read())
|
|
except FileNotFoundError as e:
|
|
self.die('Unable to find completion file: {}'.format(e))
|