about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Shahaf <d.s@daniel.shahaf.name>2016-05-04 20:54:59 +0000
committerDaniel Shahaf <d.s@daniel.shahaf.name>2016-05-06 22:30:50 +0000
commit98f670cf43b5ab4ee584487a385409c7c4f0c8c4 (patch)
tree2c3859f171654e2e896a23ab7908edac1c680976
parent1bf2ba4f19fda52720cd19346d19b9b391c436c9 (diff)
downloadzsh-98f670cf43b5ab4ee584487a385409c7c4f0c8c4.tar.gz
zsh-98f670cf43b5ab4ee584487a385409c7c4f0c8c4.tar.xz
zsh-98f670cf43b5ab4ee584487a385409c7c4f0c8c4.zip
38401: _deb_packages: New completion for source packages.
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Debian/Type/_deb_packages21
2 files changed, 23 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 6e6ea5d85..4355fd360 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2016-05-06  Daniel Shahaf  <d.s@daniel.shahaf.name>
+
+	* 38401: Completion/Debian/Type/_deb_packages: New completion
+	for source packages.
+
 2016-05-06  Axel Beckert  <abe@deuxchevaux.org>
 
 	* unposted: Doc/Zsh/builtins.yo: Fix typo.
diff --git a/Completion/Debian/Type/_deb_packages b/Completion/Debian/Type/_deb_packages
index 74b151844..d82515cef 100644
--- a/Completion/Debian/Type/_deb_packages
+++ b/Completion/Debian/Type/_deb_packages
@@ -1,6 +1,6 @@
 #autoload
 
-# Usage: _deb_packages expl... avail|installed|uninstalled
+# Usage: _deb_packages expl...  (installed|deinstalled|xinstalled|held|uninstalled|avail|available|source)
 
 _deb_packages_update_avail () {
   if ( [[ ${+_deb_packages_cache_avail} -eq 0 ]] ||
@@ -80,6 +80,21 @@ _deb_packages_update_uninstalled () {
   cachevar=_deb_packages_cache_uninstalled
 }
 
+_deb_packages_update_source () {
+  if ( [[ ${+_deb_packages_cache_source} -eq 0 ]] ||
+      _cache_invalid DEBS_source ) && ! _retrieve_cache DEBS_source;
+  then
+    _deb_packages_cache_source=(
+      # requires apt >= 1.1.8
+      # if dpkg --compare-versions "$(dpkg-query --show --showformat '${Version}\n' apt)" '>=' '1.1.8' ; then ...; else ...; fi
+      ${(f)"$(/usr/lib/apt/apt-helper cat-file $(apt-get indextargets --format '$(FILENAME)' 'Created-By: Sources' 2>/dev/null) 2>/dev/null | sed -ne 's/^Package: //p' | uniq)"}
+    )
+
+    _store_cache DEBS_source _deb_packages_cache_source
+  fi
+  cachevar=_deb_packages_cache_source
+}
+
 _deb_packages () {
   local command="$argv[$#]" expl cachevar pkgset update_policy
 
@@ -88,14 +103,14 @@ _deb_packages () {
     zstyle ":completion:*:*:$service:*" cache-policy _debs_caching_policy
   fi
 
-  [[ "$command" = (installed|deinstalled|xinstalled|held|uninstalled|avail|available) ]] || {
+  [[ "$command" = (installed|deinstalled|xinstalled|held|uninstalled|avail|available|source) ]] || {
     _message "unknown command: $command"
     return
   }
 
   zstyle -s ":completion:${curcontext}:" packageset pkgset
 
-  [[ "$pkgset" = (installed|deinstalled|xinstalled|held|uninstalled|avail|available) ]] || {
+  [[ "$pkgset" = (installed|deinstalled|xinstalled|held|uninstalled|avail|available|source) ]] || {
     pkgset="$command"
   }