Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] _apt
- X-seq: zsh-workers 54117
- From: Christopher Bock <christopher@xxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: [PATCH] _apt
- Date: Sat, 29 Nov 2025 18:45:33 +0100
- Archived-at: <https://zsh.org/workers/54117>
- List-id: <zsh-workers.zsh.org>
I found some lost completions behind the shed /ó\
lg,
Christopher
From fd9c89290b79450848d7aa926299993c7f6d3772 Mon Sep 17 00:00:00 2001
From: Christopher Bock <christopher@xxxxxxxxx>
Date: Sat, 29 Nov 2025 18:24:50 +0100
Subject: [PATCH] update _apt completion
thanks to dana or the many tweaks.
* fix: apt-config shell options + add missing options
* new: satisy, autoremove, autpurge, --allow-downgrades,
--allow-remove-essential,--allow-change-held-packages, --with-new-pkgs,
indextargets, --snapshot/-S
* snapshot lookup via mr/time^Wrewritten by dana to use zsh/datetime
* edit-sources file lookup for .list & .sources
---
Completion/Debian/Command/_apt | 64 +++++++++++++++++++++++++++++-----
1 file changed, 56 insertions(+), 8 deletions(-)
diff --git a/Completion/Debian/Command/_apt b/Completion/Debian/Command/_apt
index 7c52262f9..aa4b3bed4 100644
--- a/Completion/Debian/Command/_apt
+++ b/Completion/Debian/Command/_apt
@@ -398,6 +398,7 @@ _apt-cmd () {
-c,--config-file:configfile \
-o,--option:arbitem \
-t,--target-release:release \
+ -S,--snapshot:_apt_snapshot_dates \
-- \
/$'list\0'/ \( \
\( \
@@ -412,12 +413,14 @@ _apt-cmd () {
/$'depends\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \
/$'rdepends\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \
/$'policy\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \
+ /$'(source|build-dep)\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" source' \# \| \
/$'update\0'/ \| \
\( \
/$'(install|download|source|build-dep)\0'/ -'subcmd=${match%?}' \
/$'[^\0]#\0'/ ':packages::_deb_packages -qr "\n\t\- /=+-" "$expl_packages[@]" avail' \# \
\( \
- // '%(.|)/%' -'[[ $subcmd = install ]]' /'[]'/ ':files: :_deb_files -c' \| \
+ // '%(.|)/%' -'[[ $subcmd = install ]]' /'[]'/ ':files: :_deb_files' \| \
+ // '%(.|)/%' -'[[ $subcmd = build-dep ]]' /'[]'/ ':files: :_deb_files -D' \| \
/$'[^\0/=]#\/'/ /'[]'/ ':apt-releases:release name:_apt_releases' \| \
/$'[^\0/=]#='/ /'[]'/ ':apt-package-versions:package version:_apt_versions_of_binary_package' \| \
\) \
@@ -426,11 +429,12 @@ _apt-cmd () {
/$'why\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" installed' \| \
/$'upgrade\0'/ \| \
/$'autoclean\0'/ \| \
+ /$'distclean\0'/ \| \
/$'changelog\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \
/$'why-not\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \| \
/$'full-upgrade\0'/ \| \
/$'dist-upgrade\0'/ \| \
- /$'edit-sources\0'/ \| \
+ /$'edit-sources\0'/ /$'[^\0]#\0'/ ': ::_apt_sources' \# \| \
/"[]"/ ':argument-1::compadd "$expl_action[@]" list search showsrc show depends rdepends policy update install reinstall download source build-dep remove upgrade full-upgrade dist-upgrade edit-sources autoclean changelog autopurge autoremove purge why why-not'
_apt-cmd () {
@@ -460,7 +464,12 @@ _apt-get () {
--no-download:bool \
--no-install-recommends:bool \
--ignore-hold:bool \
+ --with-new-pkgs:bool \
--no-upgrade:bool \
+ --only-upgrade:bool \
+ --allow-downgrades:bool \
+ --allow-remove-essential:bool \
+ --allow-change-held-packages:bool \
--force-yes:bool \
--print-uris:bool \
--purge:bool \
@@ -477,27 +486,37 @@ _apt-get () {
--arch-only:bool \
--allow-unauthenticated:bool \
--auto-remove:bool \
+ -S,--snapshot:_apt_snapshot_dates \
-- \
/$'update\0'/ \| \
/$'upgrade\0'/ \| \
\( \
- /$'install\0'\|$'download\0'\|$'source\0'\|$'build-dep\0'/ \
- /$'[^\0]#\0'/ ':packages::_deb_packages -qr "\n\t\- /=" "$expl_packages[@]" avail' \# \
+ /$'(source|build-dep)\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" source' \# \| \
+ /$'(install|download|source|build-dep)\0'/ -'subcmd=${match%?}' \
+ /$'[^\0]#\0'/ ':packages::_deb_packages -qr "\n\t\- /=+-" "$expl_packages[@]" avail' \# \
\( \
- /$'[^\0/=]#/'/ /'[]'/ ':apt-releases:release name:_apt_releases' \| \
- /$'[^\0/=]#='/ /'[]'/ ':apt-package-versions:package version:_apt_versions_of_binary_package' \
+ // '%(.|)/%' -'[[ $subcmd = install ]]' /'[]'/ ':files: :_deb_files' \| \
+ // '%(.|)/%' -'[[ $subcmd = build-dep ]]' /'[]'/ ':files: :_deb_files -D' \| \
+ /$'[^\0/=]#\/'/ /'[]'/ ':apt-releases:release name:_apt_releases' \| \
+ /$'[^\0/=]#='/ /'[]'/ ':apt-package-versions:package version:_apt_versions_of_binary_package' \| \
\) \
\) \| \
/$'(|auto)(purge|remove)\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" installed' \# \| \
/$'dist-upgrade\0'/ \| \
/$'dselect-upgrade\0'/ \| \
/$'clean\0'/ \| \
+ /$'clean\0'/ \| \
/$'autoclean\0'/ \| \
+ /$'indextargets\0'/ \| \
+ /$'distclean\0'/ \| \
/$'changelog\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \
/$'check\0'/ \| \
/$'help\0/' \| \
/$'(|un)markauto\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" installed' \# \| \
- /"[]"/ ':argument-1::compadd "$expl_action[@]" update upgrade install remove purge dist-upgrade dselect-upgrade clean autoclean changelog check source build-dep autopurge autoremove help markauto unmarkauto download'
+ /$'autoremove\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" installed' \# \| \
+ /$'autopurge\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" installed' \# \| \
+ /$'help\0/' \| \
+ /"[]"/ ':argument-1::compadd "$expl_action[@]" update upgrade install reinstall remove purge dist-upgrade dselect-upgrade clean autoclean distclean changelog check source build-dep satisfy indextargets autoremove autopurge help markauto unmarkauto download'
_apt-get () {
local expl_action expl_packages
@@ -591,15 +610,19 @@ _apt-cdrom () {
_apt-config () {
_apt_arguments _apt-config \
+ --empty:bool \
+ --format:arbitem \
-h,--help:bool \
-v,--version:bool \
+ --audit:bool \
-c,--config-file:configfile \
-o,--option:arbitem \
+ --color:bool \
-- \
/$'shell\0'/ \
\( \
/$'[^\0]#\0'/ ':parameters:shell variable to assign:_parameters' \
- /$'[^\0]#\0'/ ':values:configuration key:compadd - ${${(f)"$(apt-config dump 2>&1)"}% *}' \
+ /$'[^\0]#\0'/ ':values:configuration key:compadd - ${(u)${(f)"$(apt-config --empty --no-color --format='%f%n' dump 2>&1)"}%%(::|) *}' \
\) \# \| \
/$'dump\0'/ \| \
/"[]"/ ':argument-1:action:compadd shell dump'
@@ -621,6 +644,17 @@ ${${${${(M)tmp:#*release*n=*}#*n=}%%,*}:#now}
fi
}
+_apt_sources () {
+ local diretc=etc/apt sourceparts=sources.list.d
+ local -a expl
+
+ eval "$(apt-config shell diretc dir::etc 2> /dev/null)"
+ eval "$(apt-config shell sourceparts dir::etc::sourceparts 2> /dev/null)"
+
+ _description files expl 'source file'
+ _files "${(@)expl}" -W /$diretc/$sourceparts -g '*.(list|sources)(.:t)'
+}
+
_apt_releases () {
local update_policy
@@ -710,4 +744,18 @@ _apt-mark () {
_apt-mark "$@"
}
+_apt_snapshot_dates() {
+ local -a expl dates
+ # Get last 6 months of dates
+ zmodload -i zsh/datetime && {
+ local i date last=$EPOCHSECONDS
+ for (( i = 0; i < 180; i++ )); do
+ strftime -s date %Y%m%d $last
+ dates+=( $date )
+ last=$(( last - (24 * 60 * 60) ))
+ done
+ }
+ _wanted list expl 'wayback date (yyyymmdd[ThhmmssZ])' compadd -- $dates
+}
+
_apt "$@"
--
2.51.0
Messages sorted by:
Reverse Date,
Date,
Thread,
Author