mirror of
https://github.com/YunoHost-Apps/zwave-js-ui_ynh.git
synced 2024-09-03 18:06:00 +02:00
96 lines
3.4 KiB
Text
96 lines
3.4 KiB
Text
|
#!/home/runner/work/zwave-js-ui_ynh/zwave-js-ui_ynh/venv/bin/python3
|
||
|
# PYTHON_ARGCOMPLETE_OK
|
||
|
|
||
|
# Copyright 2012-2021, Andrey Kislyuk and argcomplete contributors.
|
||
|
# Licensed under the Apache License. See https://github.com/kislyuk/argcomplete for more info.
|
||
|
|
||
|
"""
|
||
|
Activate the generic bash-completion script for the argcomplete module.
|
||
|
"""
|
||
|
|
||
|
import argparse
|
||
|
import fileinput
|
||
|
import os
|
||
|
import shutil
|
||
|
import sys
|
||
|
|
||
|
import argcomplete
|
||
|
|
||
|
parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
|
||
|
|
||
|
dest_opt = parser.add_argument(
|
||
|
"--dest", default="/etc/bash_completion.d", help="Specify the bash completion modules directory to install into"
|
||
|
)
|
||
|
parser.add_argument("--user", help="Install into user directory (~/.bash_completion.d/)", action="store_true")
|
||
|
parser.add_argument(
|
||
|
"--no-defaults",
|
||
|
dest="use_defaults",
|
||
|
action="store_false",
|
||
|
default=True,
|
||
|
help="When no matches are generated, do not fallback to readline's default completion",
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"--complete-arguments",
|
||
|
nargs=argparse.REMAINDER,
|
||
|
help="arguments to call complete with; use of this option discards default options",
|
||
|
)
|
||
|
argcomplete.autocomplete(parser)
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
if args.user:
|
||
|
args.dest = os.path.expanduser("~/.bash_completion.d/")
|
||
|
if not os.path.exists(args.dest):
|
||
|
try:
|
||
|
os.mkdir(args.dest)
|
||
|
except Exception as e:
|
||
|
parser.error("Path {d} does not exist and could not be created: {e}".format(d=args.dest, e=e))
|
||
|
elif not os.path.exists(args.dest) and args.dest != "-":
|
||
|
if sys.platform == "darwin" and args.dest == dest_opt.default and os.path.exists("/usr/local" + dest_opt.default):
|
||
|
args.dest = "/usr/local" + dest_opt.default
|
||
|
else:
|
||
|
parser.error("Path {d} does not exist".format(d=args.dest))
|
||
|
|
||
|
activator = os.path.join(os.path.dirname(argcomplete.__file__), "bash_completion.d", "python-argcomplete")
|
||
|
|
||
|
if args.complete_arguments is None:
|
||
|
complete_options = "-o default -o bashdefault" if args.use_defaults else "-o bashdefault"
|
||
|
else:
|
||
|
complete_options = " ".join(args.complete_arguments)
|
||
|
complete_call = "complete{} -D -F _python_argcomplete_global".format(" " + complete_options if complete_options else "")
|
||
|
|
||
|
|
||
|
def replaceCompleteCall(line):
|
||
|
if line.startswith("complete") and "_python_argcomplete_global" in line:
|
||
|
return complete_call + ("\n" if line.endswith("\n") else "")
|
||
|
else:
|
||
|
return line
|
||
|
|
||
|
|
||
|
if args.dest == "-":
|
||
|
for line in open(activator):
|
||
|
sys.stdout.write(replaceCompleteCall(line))
|
||
|
else:
|
||
|
dest = os.path.join(args.dest, "python-argcomplete")
|
||
|
|
||
|
sys.stdout.write("Installing bash completion script " + dest)
|
||
|
if not args.use_defaults:
|
||
|
sys.stdout.write(" without -o default")
|
||
|
elif args.complete_arguments:
|
||
|
sys.stdout.write(" with options: " + complete_options)
|
||
|
sys.stdout.write("\n")
|
||
|
|
||
|
try:
|
||
|
shutil.copy(activator, dest)
|
||
|
if args.complete_arguments or not args.use_defaults:
|
||
|
for line in fileinput.input(dest, inplace=True):
|
||
|
# fileinput with inplace=True redirects stdout to the edited file
|
||
|
sys.stdout.write(replaceCompleteCall(line))
|
||
|
except Exception as e:
|
||
|
err = str(e)
|
||
|
if args.dest == dest_opt.default:
|
||
|
err += (
|
||
|
"\nPlease try --user to install into a user directory, "
|
||
|
"or --dest to specify the bash completion modules directory"
|
||
|
)
|
||
|
parser.error(err)
|