diff --git a/share/functions/__fish_print_apt_packages.fish b/share/functions/__fish_print_apt_packages.fish index 5158bcc7e..c8d578c9e 100644 --- a/share/functions/__fish_print_apt_packages.fish +++ b/share/functions/__fish_print_apt_packages.fish @@ -18,20 +18,21 @@ function __fish_print_apt_packages # Note: This can include "Description:" fields which we need to include, # "Description-en_GB" (or another locale code) fields which we need to include # as well as "Description-md5" fields which we absolutely do *not* want to include - # The regex doesn't allow numbers, so unless someone makes a hash algorithm without a number in the name, - # we're safe. (yes, this should absolutely have a better format). + # The regex doesn't allow numbers, so unless someone makes a hash algorithm without a number + # in the name, we're safe. (yes, this should absolutely have a better format). # # aptitude has options that control the output formatting, but is orders of magnitude slower # # sed could probably do all of the heavy lifting here, but would be even less readable # - # The `head -n2500` causes us to stop once we have 2500 lines. We do it after the `sed` because - # Debian package descriptions can be extremely long - texlive-latex-extra has about 2700 lines in Debian 11. - apt-cache --no-generate show '.*'(commandline -ct)'.*' 2>/dev/null | sed -r '/^(Package|Description-?[a-zA-Z_]*):/!d;s/Package: (.*)/\1\t/g;s/Description-?[^:]*: (.*)/\1\x1a\n/g' | head -n 2500 | string join "" | string replace --all --regex \x1a+ \n | uniq + # The `head -n 500` causes us to stop once we have 500 lines. We do it after the `sed` because + # Debian package descriptions can be extremely long and are hard-wrapped: texlive-latex-extra + # has about 2700 lines on Debian 11. + apt-cache --no-generate show '.*'(commandline -ct)'.*' 2>/dev/null | sed -r '/^(Package|Description-?[a-zA-Z_]*):/!d;s/Package: (.*)/\1\t/g;s/Description-?[^:]*: (.*)/\1\x1a\n/g' | head -n 500 | string join "" | string replace --all --regex \x1a+ \n | uniq return 0 else set -l packages (dpkg --get-selections | string replace -fr '(\S+)\s+install' "\$1" | string match -e (commandline -ct)) - apt-cache --no-generate show $packages 2>/dev/null | sed -r '/^(Package|Description-?[a-zA-Z_]*):/!d;s/Package: (.*)/\1\t/g;s/Description-?[^:]*: (.*)/\1\x1a\n/g' | head -n 2500 | string join "" | string replace --all --regex \x1a+ \n | uniq + apt-cache --no-generate show $packages 2>/dev/null | sed -r '/^(Package|Description-?[a-zA-Z_]*):/!d;s/Package: (.*)/\1\t/g;s/Description-?[^:]*: (.*)/\1\x1a\n/g' | head -n 500 | string join "" | string replace --all --regex \x1a+ \n | uniq return 0 end end