summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonan Pigott <ronan@rjp.ie>2025-02-27 12:01:45 -0700
committerOliver Kiddle <opk@zsh.org>2025-02-28 20:54:22 +0100
commitf77e469ad60973f45e1ee178f1d66686d326a75a (patch)
tree102c83a9cf671145a121aa7c0af96c1b440959bc
parent1818323f451f426f20ca47c50e8fc63824578479 (diff)
downloadzsh-f77e469ad60973f45e1ee178f1d66686d326a75a.tar.gz
zsh-f77e469ad60973f45e1ee178f1d66686d326a75a.zip
53393: Complete python module arguments
Python modules can behave like commands in their own right. This allows modules to define _python_module-* functions that are used to complete module arguments. Also gets the ball rolling by defining completions for venv, http.server, and json.tool.
-rw-r--r--ChangeLog8
-rw-r--r--Completion/Unix/Command/_python3
-rw-r--r--Completion/Unix/Command/_python_module-http.server8
-rw-r--r--Completion/Unix/Command/_python_module-json.tool13
-rw-r--r--Completion/Unix/Command/_python_module-venv14
5 files changed, 46 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index cd00105cc..a2ffa1381 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2025-02-28 Oliver Kiddle <opk@zsh.org>
+
+ * Ronan Pigott: 53393: Completion/Unix/Command/_python,
+ Completion/Unix/Command/_python_module-http.server,
+ Completion/Unix/Command/_python_module-json.tool,
+ Completion/Unix/Command/_python_module-venv:
+ Complete python module arguments
+
2025-02-27 Oliver Kiddle <opk@zsh.org>
* github #129: Vadim Misbakh-Soloviov:
diff --git a/Completion/Unix/Command/_python b/Completion/Unix/Command/_python
index 6e209a199..a5d46cfd6 100644
--- a/Completion/Unix/Command/_python
+++ b/Completion/Unix/Command/_python
@@ -56,6 +56,9 @@ case "$state" in
if [[ -z "$opt_args[(I)-(c|m)]" ]]; then
shift words
(( CURRENT-- ))
+ elif [[ -n "$opt_args[(I)-m]" ]]; then
+ local ret
+ _call_function ret _python_module-$opt_args[-m] && return ret
fi
_normal && return
;;
diff --git a/Completion/Unix/Command/_python_module-http.server b/Completion/Unix/Command/_python_module-http.server
new file mode 100644
index 000000000..e5ea4a8df
--- /dev/null
+++ b/Completion/Unix/Command/_python_module-http.server
@@ -0,0 +1,8 @@
+#autoload
+
+_arguments -S \
+ '(-h --help)'{-h,--help}'[show a help message and exit]' \
+ '--cgi[run as CGI server]' \
+ '(-b --bind)'{-b+,--bind=}'[bind to this address]:address:' \
+ '(-d --directory)'{-d+,--directory=}'[serve this directory]:directory:_directories' \
+ '(-p --protocol)'{-p+,--protocol=}'[conform to this HTTP version]:protcol version:(HTTP/1.0 HTTP/1.1)'
diff --git a/Completion/Unix/Command/_python_module-json.tool b/Completion/Unix/Command/_python_module-json.tool
new file mode 100644
index 000000000..61c22686b
--- /dev/null
+++ b/Completion/Unix/Command/_python_module-json.tool
@@ -0,0 +1,13 @@
+#autoload
+
+_arguments -S \
+ '(-h --help)'{-h,--help}'[show a help message and exit]' \
+ '--sort-keys[sort the output of dictionaries alphabetically by key]' \
+ '--no-ensure-ascii[disable escaping of non-ASCII characters]' \
+ '--json-lines[parse input using the JSON Lines format]' \
+ '--indent=[separate items with newlines and use this number of spaces for indentation]:spaces:' \
+ '--tab[separate items with newlines and use tabs for indentation]' \
+ '--no-indent[separate items with spaces rather than newlines]' \
+ '--compact[suppress all whitespace separation]' \
+ '1:infile:_files' \
+ '2:outfile:_files'
diff --git a/Completion/Unix/Command/_python_module-venv b/Completion/Unix/Command/_python_module-venv
new file mode 100644
index 000000000..1af53cc41
--- /dev/null
+++ b/Completion/Unix/Command/_python_module-venv
@@ -0,0 +1,14 @@
+#autoload
+
+_arguments -S \
+ '(-h --help)'{-h,--help}'[show a help message and exit]' \
+ '--system-site-packages[give the virtual environment access to the system site-packages dir]' \
+ '(--symlinks --copies)--symlinks[try to use symlinks rather than copies]' \
+ '(--symlinks --copies)--copies[try to use copies rather than symlinks]' \
+ '(--clear --upgrade)--clear[delete the contents of the environment directory if it already exists]' \
+ '(--clear --upgrade)--upgrade[upgrade the environment directory to use this version of Python]' \
+ '--without-pip[skip installing or upgrading pip]' \
+ '--prompt[provides an alternative prompt prefix for the environment]' \
+ '--upgrade-deps[upgrade core dependencies to the latest version]' \
+ '--without-scm-ignore-files[skip adding SCM ignore files to the environment directory]'
+ '*::virtual environment:_directories'