From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21077 invoked from network); 3 Sep 1999 23:17:31 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 3 Sep 1999 23:17:31 -0000 Received: (qmail 5045 invoked by alias); 3 Sep 1999 23:17:22 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 7641 Received: (qmail 5038 invoked from network); 3 Sep 1999 23:17:21 -0000 To: zsh-workers@sunsite.auc.dk Subject: Re: PATCH: _apt-get and _deb_packages References: <87u2pbu49r.fsf@zxmjz18.extern.uni-tuebingen.de> MIME-Version: 1.0 (generated by AKEMI 1.13.2 - =?ISO-2022-JP?B?Ig==?= =?ISO-2022-JP?B?GyRCQTA0Y0s8GyhCIg==?=) Content-Type: text/plain; charset=US-ASCII From: Tanaka Akira Date: 04 Sep 1999 08:17:18 +0900 In-Reply-To: Falk Hueffner's message of "03 Sep 1999 22:30:24 +0200" Message-ID: User-Agent: Chao-gnus/6.12.5 AKEMI/1.13.2 (=?ISO-2022-JP?B?GyRCQTAbKEI=?= =?ISO-2022-JP?B?GyRCNGNLPBsoQg==?=) FLAM-DOODLE/1.12.6 (=?ISO-2022-JP?B?GyRCM3cbKEI=?= 10R4.0/5.0) Emacs/20.4 (sparc-sun-solaris2.6) MULE/4.0 (HANANOEN) In article <87u2pbu49r.fsf@zxmjz18.extern.uni-tuebingen.de>, Falk Hueffner writes: > It would be nice if after 'install' only uninstalled packages would be > completed, and after 'remove' and 'purge' only installed. What's `purge'? At least, the manual in apt 0.3.11 doesn't mention the command. > dpkg --get-selections | awk '/[^e]install$/ { print $1 }' > apt-cache dumpavail | awk '/^Package:/ { print $2 }' I see. Thanks. Index: Completion/Debian/_apt-get =================================================================== RCS file: /projects/zsh/zsh/Completion/Debian/_apt-get,v retrieving revision 1.1.1.1 diff -u -F^( -r1.1.1.1 _apt-get --- _apt-get 1999/09/02 21:27:08 1.1.1.1 +++ _apt-get 1999/09/03 23:05:44 @@ -1,23 +1,40 @@ #compdef apt-get -_arguments -s \ - -{,-no-}d --{,no-}download-only \ - -{,-no-}f --{,no-}fix-broken \ - -{,-no-}h --{,no-}help \ - -{,-no-}v --{,no-}version \ - -{,-no-}m --{,no-}ignore-missing \ - --{,no-}fix-missing \ - --{,no-}no-download \ - \*-{,-no-}q \*--{,no-}{quiet,silent} \ - -{,-no-}s --{,no-}{simulate,just-print,dry-run,recon,no-act} \ - -{,-no-}y --{,no-}{yes,assume-yes} \ - -{,-no-}u --{,no-}show-upgraded \ - -{,-no-}b --{,no-}{compile,build} \ - --{,no-}ignore-hold \ - --{,no-}no-upgrade \ - --{,no-}force-yes \ - --{,no-}print-uris \ - {-{,-no-}c,--{,no-}config-file}':Configuration File:_files' \ - {-o,--option}':Foo\:\:Bar=bar:' \ - ':command:(update upgrade dselect-upgrade dist-upgrade install remove source check clean autoclean help)' \ - '*:package:_deb_packages' +_apt-get () { + # This doesn't handle command line of apt completely since command line + # parsing library for apt is too complex to handle by _arguments. + _arguments -s \ + -{,-no-}d --{,no-}download-only \ + -{,-no-}f --{,no-}fix-broken \ + -{,-no-}h --{,no-}help \ + -{,-no-}v --{,no-}version \ + -{,-no-}m --{,no-}ignore-missing \ + --{,no-}fix-missing \ + --{,no-}no-download \ + \*-{,-no-}q \*--{,no-}{quiet,silent} \ + -{,-no-}s --{,no-}{simulate,just-print,dry-run,recon,no-act} \ + -{,-no-}y --{,no-}{yes,assume-yes} \ + -{,-no-}u --{,no-}show-upgraded \ + -{,-no-}b --{,no-}{compile,build} \ + --{,no-}ignore-hold \ + --{,no-}no-upgrade \ + --{,no-}force-yes \ + --{,no-}print-uris \ + {-{,-no-}c,--{,no-}config-file}':Configuration File:_files' \ + {-o,--option}':Foo\:\:Bar=bar:' \ + '*::command and packages:_apt-get_args' +} + +_apt-get_args () { + if (( CURRENT == 1 )); then + compadd "$@" - update upgrade dselect-upgrade dist-upgrade install remove source check clean autoclean help + else + case "$words[1]" in + install) _deb_packages uninstalled "$@";; + remove) _deb_packages installed "$@";; + *) _deb_packages avail "$@";; + esac + fi +} + +_apt-get "$@" Index: Completion/Debian/_deb_packages =================================================================== RCS file: /projects/zsh/zsh/Completion/Debian/_deb_packages,v retrieving revision 1.1.1.1 diff -u -F^( -r1.1.1.1 _deb_packages --- _deb_packages 1999/09/02 21:27:08 1.1.1.1 +++ _deb_packages 1999/09/03 23:05:44 @@ -1,7 +1,27 @@ #autoload -if (( ! $+_deb_packages )); then - _deb_packages=( $(awk '/^Package:/ { print $2 }' /var/lib/dpkg/status) ) +# Usage: _deb_packages installed|uninstalled|avail + +if (( ! $+_deb_cache_dpkg_get_selections )); then + _deb_cache_dpkg_get_selections=( + ${(f)"$(dpkg --get-selections)"} + ) + _deb_cache_avail=( + ${(f)"$(apt-cache dumpavail | awk '/^Package:/ { print $2 }')"} + ) + _deb_cache_installed=( + ${${_deb_cache_dpkg_get_selections:#*deinstall}%% *} + ) + _deb_cache_uninstalled=( + ${_deb_cache_avail:#${(j:|:)~${_deb_cache_installed:q}}} + ) fi + +local command="$1" +shift -compadd "$@" - $_deb_packages +case "$command" in + installed) compadd "$@" - $_deb_cache_installed;; + uninstalled) compadd "$@" - $_deb_cache_uninstalled;; + avail) compadd "$@" - $_deb_cache_avail;; +esac -- Tanaka Akira