diff --git a/news/xontrib-django.rst b/news/xontrib-django.rst new file mode 100644 index 000000000..aa427500f --- /dev/null +++ b/news/xontrib-django.rst @@ -0,0 +1,23 @@ +**Added:** + +* new `xontrib-django `_ for django management completions + +**Changed:** + +* + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* + +**Security:** + +* diff --git a/xompletions/django-admin.py b/xompletions/django-admin.py deleted file mode 100644 index 8318dfe0c..000000000 --- a/xompletions/django-admin.py +++ /dev/null @@ -1,15 +0,0 @@ -"""Completers for pip.""" - -from xonsh.completers.tools import comp_based_completer -from xonsh.parsers.completion_context import CommandContext - - -def xonsh_complete(ctx: CommandContext): - """Completes python's package manager pip.""" - # adapted from https://github.com/django/django/blob/main/extras/django_bash_completion - - # todo: find a way to get description for the completions like here - # 1. https://github.com/apie/fish-django-completions/blob/master/fish_django_completions.py - # 2. complete python manage.py invocations - # https://github.com/django/django/blob/main/extras/django_bash_completion - return comp_based_completer(ctx, DJANGO_AUTO_COMPLETE="1") diff --git a/xonsh/completers/tools.py b/xonsh/completers/tools.py index b38191926..d33e5fa51 100644 --- a/xonsh/completers/tools.py +++ b/xonsh/completers/tools.py @@ -281,7 +281,7 @@ def complete_from_sub_proc(*args: str, sep=None, filter_prefix=None, **env_vars: yield comp -def comp_based_completer(ctx: CommandContext, **env: str): +def comp_based_completer(ctx: CommandContext, start_index=0, **env: str): """Helper function to complete commands such as ``pip``,``django-admin``,... that use bash's ``complete``""" prefix = ctx.prefix @@ -290,9 +290,9 @@ def comp_based_completer(ctx: CommandContext, **env: str): args.append(prefix) yield from complete_from_sub_proc( - args[0], + *args[: start_index + 1], sep=shlex.split, - COMP_WORDS=os.linesep.join(args) + os.linesep, - COMP_CWORD=str(ctx.arg_index), + COMP_WORDS=os.linesep.join(args[start_index:]) + os.linesep, + COMP_CWORD=str(ctx.arg_index - start_index), **env, ) diff --git a/xonsh/xontribs_meta.py b/xonsh/xontribs_meta.py index 2b66353bc..11e901721 100644 --- a/xonsh/xontribs_meta.py +++ b/xonsh/xontribs_meta.py @@ -304,6 +304,16 @@ def define_xontribs(): "distributed", "The distributed parallel computing library hooks for xonsh.", ), + "django": Xontrib( + url="https://github.com/jnoortheen/xontrib-django", + description="Django management command completions for Xonsh shell", + package=_XontribPkg( + name="xontrib-django", + license="MIT", + install={"pip": "xpip install xontrib-django"}, + url="https://github.com/jnoortheen/xontrib-django", + ), + ), "jupyter": get_xontrib( "jupyter-shell", "Jupyter Notebook kernel for Xonsh",