* apt autocompletion issue @ 2019-07-26 16:20 Hauser, Felix (MRT) 2019-07-29 23:53 ` Oliver Kiddle 0 siblings, 1 reply; 7+ messages in thread From: Hauser, Felix (MRT) @ 2019-07-26 16:20 UTC (permalink / raw) To: zsh-workers Dear ZSH-community, just discovered the Z-shell and so far it really makes my life a little bit easier! The only issue I have with it is the completion of options for the apt command. So e.g.: apt list --u<tab> won't autocomplete to apt list --upgradeable which is easily done in the normal bash file. Since in my workflow I often have to use apt, this feature is kinda important to me. Thankful for any help! Felix Ubuntu 18.04 zsh 5.4.2 (x86_64-ubuntu-linux-gnu) oh-my-zsh script from some days ago ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: apt autocompletion issue 2019-07-26 16:20 apt autocompletion issue Hauser, Felix (MRT) @ 2019-07-29 23:53 ` Oliver Kiddle 2019-07-30 11:49 ` Hauser, Felix (MRT) 2019-07-30 14:53 ` Axel Beckert 0 siblings, 2 replies; 7+ messages in thread From: Oliver Kiddle @ 2019-07-29 23:53 UTC (permalink / raw) To: Hauser, Felix (MRT); +Cc: zsh-workers On 26 Jul, "Hauser, Felix (MRT)" wrote: > just discovered the Z-shell and so far it really makes my life a little > bit easier! The only issue I have with it is the completion of options > for the apt command. So e.g.: > > apt list --u<tab> > > won't autocomplete to > > apt list --upgradeable > > which is easily done in the normal bash file. > Since in my workflow I often have to use apt, this feature is kinda > important to me. Thanks for the report. I'm afraid the Debian specific completions aren't as well maintained as they once were. It's not clear from the man page whether the three options can be combined with the glob(7) patterns for matching packages (as per the patch below) or whether they need to be standalone. The option should probably modify whether it is calling _deb_packages with "avail", "installed", "uninstalled" or some other package set. If you let me know what the relevant package set argument should be for each option, then it is easy to do that. Oliver diff --git a/Completion/Debian/Command/_apt b/Completion/Debian/Command/_apt index 4486aa26d..d36d5240a 100644 --- a/Completion/Debian/Command/_apt +++ b/Completion/Debian/Command/_apt @@ -399,7 +399,10 @@ _apt-cmd () { -o,--option:arbitem \ -t,--target-release:release \ -- \ - /$'list\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \ + /$'list\0'/ \( \ + \( // %-% /$'--[^\0]#\0'/ ':options:option:(--installed --upgradable --all-versions)' \| \) \ + /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \ + \) \| \ /$'search\0'/ /$'[^\0]#\0'/ ':strings:pattern:' \| \ /$'showsrc\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \ /$'show\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \ ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: apt autocompletion issue 2019-07-29 23:53 ` Oliver Kiddle @ 2019-07-30 11:49 ` Hauser, Felix (MRT) 2019-07-30 13:02 ` Daniel Shahaf 2019-07-30 14:53 ` Axel Beckert 1 sibling, 1 reply; 7+ messages in thread From: Hauser, Felix (MRT) @ 2019-07-30 11:49 UTC (permalink / raw) To: Oliver Kiddle; +Cc: zsh-workers On 30.07.19 01:53, Oliver Kiddle wrote: > On 26 Jul, "Hauser, Felix (MRT)" wrote: >> just discovered the Z-shell and so far it really makes my life a little >> bit easier! The only issue I have with it is the completion of options >> for the apt command. So e.g.: >> >> apt list --u<tab> >> >> won't autocomplete to >> >> apt list --upgradeable >> >> which is easily done in the normal bash file. >> Since in my workflow I often have to use apt, this feature is kinda >> important to me. > > Thanks for the report. I'm afraid the Debian specific completions aren't > as well maintained as they once were. > > It's not clear from the man page whether the three options can be > combined with the glob(7) patterns for matching packages (as per the > patch below) or whether they need to be standalone. > > The option should probably modify whether it is calling _deb_packages > with "avail", "installed", "uninstalled" or some other package set. If > you let me know what the relevant package set argument should be for > each option, then it is easy to do that. > > Oliver > > diff --git a/Completion/Debian/Command/_apt b/Completion/Debian/Command/_apt > index 4486aa26d..d36d5240a 100644 > --- a/Completion/Debian/Command/_apt > +++ b/Completion/Debian/Command/_apt > @@ -399,7 +399,10 @@ _apt-cmd () { > -o,--option:arbitem \ > -t,--target-release:release \ > -- \ > - /$'list\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \ > + /$'list\0'/ \( \ > + \( // %-% /$'--[^\0]#\0'/ ':options:option:(--installed --upgradable --all-versions)' \| \) \ > + /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \ > + \) \| \ > /$'search\0'/ /$'[^\0]#\0'/ ':strings:pattern:' \| \ > /$'showsrc\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \ > /$'show\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \ > Well, I guess the Debian package sets should be: --installed "installed" --all-versions "avail" --upgradeable Do not know the option for this one. Result should be a list of all packages that can be updated by "apt upgrade". But the problem is not only with "apt list" but with all apt commands. The apt package brings its own detailed completion file (not via the bash-completions package): https://salsa.debian.org/apt-team/apt/blob/master/completions/bash/apt This is the one used by bash and is located at "/usr/share/bash-completion/completions/apt" on my system. Maybe zsh can simply access the bash completion file and ignore its own?? Not sure if this can be done ... I hesitated replacing "/usr/share/zsh/functions/Completion/Debian/_apt" with the bash file, because in the zsh completion file there are also the instructions for apt-get etc. Felix ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: apt autocompletion issue 2019-07-30 11:49 ` Hauser, Felix (MRT) @ 2019-07-30 13:02 ` Daniel Shahaf 0 siblings, 0 replies; 7+ messages in thread From: Daniel Shahaf @ 2019-07-30 13:02 UTC (permalink / raw) To: Hauser, Felix (MRT), Oliver Kiddle; +Cc: zsh-workers, pkg-zsh-devel Hauser, Felix (MRT) wrote on Tue, 30 Jul 2019 11:50 +00:00: > --upgradeable Do not know the option for this one. Result should be a > list of all packages that can be updated by "apt upgrade". «aptitude search -F %p '?upgradable'» would print the right set of packages, I think, but aptitude isn't part of a minimal installation so can't be assumed available. I'm not sure what's the best way to answer this question on a minimal installation. One _could_ parse the output of «apt-cache policy \*», but I hope there's a better way... Cc += Debian zsh packagers. tl;dr: What apt(7) command generates the right set of packages to be completed after «apt list --upgradable <TAB>»? ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: apt autocompletion issue 2019-07-29 23:53 ` Oliver Kiddle 2019-07-30 11:49 ` Hauser, Felix (MRT) @ 2019-07-30 14:53 ` Axel Beckert 2019-07-30 22:13 ` Oliver Kiddle 1 sibling, 1 reply; 7+ messages in thread From: Axel Beckert @ 2019-07-30 14:53 UTC (permalink / raw) To: zsh-workers, pkg-zsh-devel Hi, TL;DR: I recommend to just complete all packages upon "apt list --upgradable <Tab>". Oliver Kiddle wrote: > On 26 Jul, "Hauser, Felix (MRT)" wrote: > > just discovered the Z-shell and so far it really makes my life a little > > bit easier! The only issue I have with it is the completion of options > > for the apt command. So e.g.: > > > > apt list --u<tab> > > > > won't autocomplete to > > > > apt list --upgradeable > > > > which is easily done in the normal bash file. Should be easy in zsh, too, as the number of long options behind "apt list" isn't that big IIRC. > It's not clear from the man page whether the three options can be > combined with the glob(7) patterns for matching packages (as per the > patch below) or whether they need to be standalone. Indeed. Just from testing, there are additional filters possible: → apt list --installed 'z*' Listing... Done zathura-cb/stable,now 0.1.8-2 amd64 [installed,automatic] zathura-djvu/stable,now 0.2.8-1 amd64 [installed,automatic] […] zsh/stable,now 5.7.1-1 amd64 [installed,automatic] zutils/stable,now 1.8-3+b10 amd64 [installed,automatic] zziplib-bin/stable,now 0.13.62-3.2 amd64 [installed] zzuf/stable,now 0.15-1+b1 amd64 [installed] → But I think the primary issue of Felix is that not even the (rather unambiguous) options are completed. > The option should probably modify whether it is calling _deb_packages > with "avail", "installed", "uninstalled" or some other package set. If > you let me know what the relevant package set argument should be for > each option, then it is easy to do that. It makes sense that "apt list --installed <Tab>" only completes installed packages as it will only list these anyway. It makes sense that "apt list --upgradable <Tab>" (and "apt list --upgradeable <Tab>") only completes packages as it will only list these anyway. And "apt list --all-versions <Tab>" should probably complete all packages. Daniel Shahaf wrote: > Hauser, Felix (MRT) wrote on Tue, 30 Jul 2019 11:50 +00:00: > > --upgradeable Do not know the option for this one. Result should be a > > list of all packages that can be updated by "apt upgrade". > > «aptitude search -F %p '?upgradable'» would print the right set of > packages, I think, but aptitude isn't part of a minimal installation so > can't be assumed available. Correct. Don't expect it to be there, it's no more installed by default. (Saying that with my "apt+aptitude team" member hat on, although I'm mostly only working on aptitude. :-) It seems obvious that "apt list --installed <Tab>" should be completed with what "apt list --installed" outputs and "apt list --upgradable <Tab>" and "apt list --upgradeable <Tab>" with what "apt list --upgradeable" outputs. But: "apt" output is not yet considered to be stable and hence emits the following warning on STDERR when used inside a pipe or similar: WARNING: apt does not have a stable CLI interface. Use with caution in scripts. > I'm not sure what's the best way to answer this question on a minimal > installation. One _could_ parse the output of «apt-cache policy \*», > but I hope there's a better way... Currently I don't know any efficient _and_ scriptable method to do that. (Calling "apt-cache policy \*" to see if it's installed or upgradeable is the only method which comes to my mind, too, but also rather slow and inefficient. > Cc += Debian zsh packagers. Thanks. I read Felix initial mail, but just adding three hard coded long options seemed rather trivial... > tl;dr: What apt(7) command generates the right set of packages to be > completed after «apt list --upgradable <TAB>»? "apt list --upgradable", but see above. Officially, there is currently no scriptable interface which offers that. aptitude-like pattern matching is planned for apt/apt-get/apt-cache as well, but not yet there. And parsing /var/lib/apt/lists/* is explicitly discouraged as the format might change without notice. (Zsh seems to do that somewhere else already and I get according warnings when in building the zsh package for Debian: https://lintian.debian.org/tags/uses-dpkg-database-directly.html) So we basically have these options: * Use "apt list --<something>" and have to adapt quickly when the output format changes. * Parse the output of "apt-cache policy \*". (Probably the best way if we want to really only list upgradable packages there.) * Parse /var/lib/apt/archives/*.packages (format might change over time, too), /etc/apt/preferences and /etc/apt/preferences.d/*. * Completely ignore any "apt list" option and just complete all known packages. This seems to be a easily done solution and I consider it valid, because it is a valid call to pass not upgradable or installed packages even with --installed or --upgradable: → apt list --installed systemd zsh Listing... Done zsh/stable,now 5.7.1-1 amd64 [installed,automatic] → (i.e. in this example, systemd is not installed and zsh is installed.) Installed packages are easier to generated as they can be queried with dpkg-query which has options for machine-readable formatting. Regards, Axel -- ,''`. | Axel Beckert <abe@debian.org>, https://people.debian.org/~abe/ : :' : | Debian Developer, ftp.ch.debian.org Admin `. `' | 4096R: 2517 B724 C5F6 CA99 5329 6E61 2FF9 CD59 6126 16B5 `- | 1024D: F067 EA27 26B9 C3FC 1486 202E C09E 1D89 9593 0EDE ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: apt autocompletion issue 2019-07-30 14:53 ` Axel Beckert @ 2019-07-30 22:13 ` Oliver Kiddle 2019-07-30 23:21 ` aptitude vs apt vs apt-get (was: Re: [Pkg-zsh-devel] apt autocompletion issue) Axel Beckert 0 siblings, 1 reply; 7+ messages in thread From: Oliver Kiddle @ 2019-07-30 22:13 UTC (permalink / raw) To: zsh-workers, pkg-zsh-devel Axel Beckert wrote: > TL;DR: I recommend to just complete all packages upon > "apt list --upgradable <Tab>". Thanks, so this updated patch uses installed with --installed and avail otherwise. After checking the man page, I also added completion of reinstall and auto-removal for - and + suffixes. > > On 26 Jul, "Hauser, Felix (MRT)" wrote: > > > which is easily done in the normal bash file. Just for note Felix, while technically possible, I'd really recommend against trying to ever use bash completions with zsh. > Daniel Shahaf wrote: > > ??aptitude search -F %p '?upgradable'?? would print the right set of > > packages, I think, but aptitude isn't part of a minimal installation so > > can't be assumed available. A _deb_packages_update_upgradable function could check (( $+commands[aptitude] )) and offer all packages as a fallback. Or one of the options Axel mentions - if someone wants to do that. > > Cc += Debian zsh packagers. > > Thanks. I read Felix initial mail, but just adding three hard coded > long options seemed rather trivial... It's often not as trivial as it might first seem without a copy of the command to test combinations against. I probably need to install yet another VM to cover Debian given a large number of Debian specific completions. Out of interest, what is the recommended apt* tool these days? Is aptitude the best or most powerful with apt as the simplified interface and apt-get just a historic relic? Oliver diff --git a/Completion/Debian/Command/_apt b/Completion/Debian/Command/_apt index 4486aa26d..4d60cd249 100644 --- a/Completion/Debian/Command/_apt +++ b/Completion/Debian/Command/_apt @@ -399,7 +399,13 @@ _apt-cmd () { -o,--option:arbitem \ -t,--target-release:release \ -- \ - /$'list\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \ + /$'list\0'/ \( \ + \( \ + /$'--installed\0'/ ':packages::_deb_packages "$expl_packages[@]" installed' \# /'[]'/ \| \ + // %-% /$'--[^\0]#\0'/ ':options:option:(--installed --upgradable --all-versions)' \ + \| \) \ + /$'[^-\0][^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \ + \) \| \ /$'search\0'/ /$'[^\0]#\0'/ ':strings:pattern:' \| \ /$'showsrc\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \ /$'show\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \ @@ -409,15 +415,14 @@ _apt-cmd () { /$'update\0'/ \| \ \( \ /$'(install|download|source|build-dep)\0'/ -'subcmd=${match%?}' \ - /$'[^\0]#\0'/ ':packages::_deb_packages -qr "\n\t\- /=" "$expl_packages[@]" avail' \# \ + /$'[^\0]#\0'/ ':packages::_deb_packages -qr "\n\t\- /=+-" "$expl_packages[@]" avail' \# \ \( \ // '%(.|)/%' -'[[ $subcmd = install ]]' /'[]'/ ':files: :_deb_files -c' \| \ /$'[^\0/=]#\/'/ /'[]'/ ':apt-releases:release name:_apt_releases' \| \ /$'[^\0/=]#='/ /'[]'/ ':apt-package-versions:package version:_apt_versions_of_binary_package' \| \ \) \ \) \| \ - /$'remove\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" installed' \# \| \ - /$'purge\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" installed' \# \| \ + /$'(remove|reinstall|purge)\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" installed' \# \| \ /$'upgrade\0'/ \| \ /$'autoclean\0'/ \| \ /$'changelog\0'/ /$'[^\0]#\0'/ ':packages::_deb_packages "$expl_packages[@]" avail' \# \| \ @@ -425,7 +430,7 @@ _apt-cmd () { /$'full-upgrade\0'/ \| \ /$'dist-upgrade\0'/ \| \ /$'edit-sources\0'/ \| \ - /"[]"/ ':argument-1::compadd "$expl_action[@]" list search showsrc show depends rdepends policy update install download source build-dep remove upgrade full-upgrade dist-upgrade edit-sources autoclean changelog autoremove purge' + /"[]"/ ':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 autoremove purge' _apt-cmd () { local expl_action expl_packages subcmd ^ permalink raw reply [flat|nested] 7+ messages in thread
* aptitude vs apt vs apt-get (was: Re: [Pkg-zsh-devel] apt autocompletion issue) 2019-07-30 22:13 ` Oliver Kiddle @ 2019-07-30 23:21 ` Axel Beckert 0 siblings, 0 replies; 7+ messages in thread From: Axel Beckert @ 2019-07-30 23:21 UTC (permalink / raw) To: pkg-zsh-devel, zsh-workers Hi Oliver, Oliver Kiddle wrote: > Out of interest, what is the recommended apt* tool these > days? Depends on what you want to achieve or where you want to use it. They all have their uses. :-) TL;DR: Use aptitude if you need TUI or patterns, apt for CLI comfort, apt-get/apt-cache for scripting and a stable CLI. > Is aptitude the best or most powerful with apt as the simplified > interface and apt-get just a historic relic? Disclaimer: This might be biased as I'm a hardcore aptitude user. And I'm one of the two current aptitude maintainers. aptitude is still the most powerful sincec it's the only one with a pattern matching language on packages. But apt and apt-get/apt-cache might get this in the future, too. There are still a few more differences which won't change that quickly: * aptitude is the sole tool with a TUI. (And previously also contained a GTK and a never released Qt GUI. Both were removed as they were unmaintained and never really stable.) * aptitude's dependency resolver is optimized on interaction with the user, i.e. getting interactively further hints from the user on how to solve a non-trivial dependency issue. * apt and apt-get are optimized for one-shot solutions, i.e. try to get the sanest solution first. They're also usually faster than aptitude which tracks more metadata needed for pattern matching or package displaying. * apt is (currently) solely meant for commandline user by an admin. It has far more comfortable defaults (e.g. color and progress bar) and a not completely identical set of subcommands compared to apt-get/apt-cache. * apt-cache/apt-get have a stable commandline interface and are best for scripting — for now unless you need the power of aptitude's pattern matching. But beware: Even though a few years ago there was quite an effort to make the exit codes of aptitude in error cases more consistent and sane, there are still a few rough edges and inconsistencies in that area. P.S. and JFTR: There is no such war between apt and aptitude. We've merged both teams a year ago or so and all aptitude developers have now also commit rights on apt and vice versa: https://salsa.debian.org/apt-team Regards, Axel -- ,''`. | Axel Beckert <abe@debian.org>, https://people.debian.org/~abe/ : :' : | Debian Developer, ftp.ch.debian.org Admin `. `' | 4096R: 2517 B724 C5F6 CA99 5329 6E61 2FF9 CD59 6126 16B5 `- | 1024D: F067 EA27 26B9 C3FC 1486 202E C09E 1D89 9593 0EDE ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-07-30 23:22 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-07-26 16:20 apt autocompletion issue Hauser, Felix (MRT) 2019-07-29 23:53 ` Oliver Kiddle 2019-07-30 11:49 ` Hauser, Felix (MRT) 2019-07-30 13:02 ` Daniel Shahaf 2019-07-30 14:53 ` Axel Beckert 2019-07-30 22:13 ` Oliver Kiddle 2019-07-30 23:21 ` aptitude vs apt vs apt-get (was: Re: [Pkg-zsh-devel] apt autocompletion issue) Axel Beckert
Code repositories for project(s) associated with this public inbox https://git.vuxu.org/mirror/zsh/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).