From 44e2c282557bc92d0f1445bffa8474da0e5f741b Mon Sep 17 00:00:00 2001 From: Wilke Schwiedop Date: Fri, 23 Mar 2018 19:42:30 +0100 Subject: [PATCH] revisit gentoo-related completions (#4758) * revisit gentoo-related completions - add completion for emaint - improve completion for emerge still incomplete, but an impovement regardless - improve completion for equery - add gentoo/portage-related auxiliary functions * fix spelling * remove trailing '.' * remove old '_' invocation and capitalize descriptions * add number-completion * remove trailing '.' * shorter descriptions * replace sed with fish-builtin and drop deduplication * batch change capitalization (lower case) * indent equery descriptions * batch change capitalization (upper case) --- share/completions/emaint.fish | 32 ++ share/completions/emerge.fish | 278 +++++++++++------- share/completions/equery.fish | 187 ++++++------ ...sh_portage_print_available_categories.fish | 3 + .../__fish_portage_print_available_pkgs.fish | 3 + ...sh_portage_print_installed_categories.fish | 3 + .../__fish_portage_print_installed_pkgs.fish | 3 + ...__fish_portage_print_repository_names.fish | 4 + ...__fish_portage_print_repository_paths.fish | 4 + 9 files changed, 320 insertions(+), 197 deletions(-) create mode 100644 share/completions/emaint.fish create mode 100644 share/functions/__fish_portage_print_available_categories.fish create mode 100644 share/functions/__fish_portage_print_available_pkgs.fish create mode 100644 share/functions/__fish_portage_print_installed_categories.fish create mode 100644 share/functions/__fish_portage_print_installed_pkgs.fish create mode 100644 share/functions/__fish_portage_print_repository_names.fish create mode 100644 share/functions/__fish_portage_print_repository_paths.fish diff --git a/share/completions/emaint.fish b/share/completions/emaint.fish new file mode 100644 index 000000000..94130e50d --- /dev/null +++ b/share/completions/emaint.fish @@ -0,0 +1,32 @@ +## Global Opts +complete -c emaint -s h -l help -d "Show this help message and exit" +complete -c emaint -s c -l check -d "Check for problems" +complete -c emaint -l version -d "Show program's version number and exit" +complete -c emaint -s f -l fix -d "Attempt to fix problems" +complete -c emaint -s P -l purge -d "Remove the list of failed merges" + +## Subcommands +complete -c emaint -n '__fish_use_subcommand' -xa 'all' -d 'Perform all supported commands' +complete -c emaint -n '__fish_use_subcommand' -xa 'binhost' -d 'Scan and generate metadata indexes for binary pkgs' +complete -c emaint -n '__fish_use_subcommand' -xa 'cleanconfmem' -d 'Check and clean the config tracker list for uninstalled pkgs' +complete -c emaint -n '__fish_use_subcommand' -xa 'cleanresume' -d 'Discard emerge --resume merge lists' +complete -c emaint -n '__fish_use_subcommand' -xa 'logs' -d 'Check and clean old logs in the PORT_LOGDIR' +complete -c emaint -n '__fish_use_subcommand' -xa 'merges' -d 'Scan for failed merges and fix them' +complete -c emaint -n '__fish_use_subcommand' -xa 'movebin' -d 'Perform pkg move updates for binary pkgs' +complete -c emaint -n '__fish_use_subcommand' -xa 'moveinst' -d 'Perform pkg move updates for installed and binary pkgs' +complete -c emaint -n '__fish_use_subcommand' -xa 'sync' -d 'Check repos.conf settings and sync repositories' +complete -c emaint -n '__fish_use_subcommand' -xa 'world' -d 'Check and fix problems in the world file' + +## Local opts +# cleanlogs +complete -c emaint -n '__fish_seen_subcommand_from cleanlogs' -s t -l time -d "Delete logs older than NUM of days" \ + -xa "(seq 0 365)" +complete -c emaint -n '__fish_seen_subcommand_from cleanlogs' -s p -l pretend -d "Output logs that would be deleted" +complete -c emaint -n '__fish_seen_subcommand_from cleanlogs' -s C -l clean -d "Cleans out logs more than 7 days old" +# sync +complete -c emaint -n '__fish_seen_subcommand_from sync' -s a -l auto -d "Sync auto-sync enabled repos only" +complete -c emaint -n '__fish_seen_subcommand_from sync' -s A -l allrepos -d "Sync all repos that have a sync-url defined" +complete -c emaint -n '__fish_seen_subcommand_from sync' -s r -l repo -d "Sync the specified repo" \ + -xa "(__fish_portage_print_repository_names)" +complete -c emaint -n '__fish_seen_subcommand_from sync' -l sync-submodule -d "Restrict sync to the specified submodule(s)" \ + -xa "glsa news profiles" diff --git a/share/completions/emerge.fish b/share/completions/emerge.fish index 05cf4fd93..851df35be 100644 --- a/share/completions/emerge.fish +++ b/share/completions/emerge.fish @@ -1,124 +1,176 @@ -# Completions for emerge +#function __fish_emerge_print_all_pkgs_with_version_compare -d 'Print completions for all packages including the version compare if that is already typed' +# set -l version_comparator (commandline -t | string match -r '^[\'"]*[<>]\?=\?' | \ +# sed -r 's/^[\'"]*(.*)/\1/g') +# set -l sedstring +# +# if set -q $version_comparator +# set sedstring 's/^(.*)/\1\tPackage/g' +# else +# set sedstring 's/^(.*)/'$version_comparator'\1\tPackage/g' +# end +# +# __fish_emerge_print_all_pkgs | sed -r $sedstring +#end -# Author: Tassilo Horn - -function __fish_emerge_print_installed_pkgs -d 'Prints completions for installed packages on the system from /var/db/pkg' - if test -d /var/db/pkg - find /var/db/pkg/ -type d | cut -d'/' -f5-6 | sort -u | \ - sed 's/-[0-9]\{1,\}\..*$//' | sed -e '/^ *$/d' - return - end +function __fish_emerge_print_sets + for s in '@'(emerge --list-sets) + switch $s + case @profile + printf '%s\t%s\n' $s 'set of packages deemed necessary for your system to run properly' + case @selected-packages + printf '%s\t%s\n' $s 'packages listed in /var/lib/portage/world' + case @selected-sets + printf '%s\t%s\n' $s 'sets listed in /var/lib/portage/world_sets' + case @selected + printf '%s\t%s\n' $s 'encompasses both the selected-packages and selected-sets sets' + case @system + printf '%s\t%s\n' $s 'set of packages deemed necessary for your system to run properly' + case @world + printf '%s\t%s\n' $s 'encompasses the selected, system and profile sets' + case '*' + echo $s + end + end end -function __fish_emerge_print_all_pkgs -d 'Prints completions for all available packages on the system from /usr/portage' - if test -d /usr/portage - find /usr/portage/ -maxdepth 2 -type d | cut -d'/' -f4-5 | \ - sed 's/^\(distfiles\|profiles\|eclass\).*$//' | sort -u | \ - sed 's/-[0-9]\{1,\}\..*$//' | sed -e '/^ *$/d' - return - end +# TODO ... +function __fish_emerge_possible_args + if __fish_contains_opt check-news -s h help list-sets metadata regen -s r resume \ + -s s search -s S searchdesc sync -s V version + return + # TODO deselect=y + else if __fish_contains_opt config -s c depclean info -s P prune -s C unmerge + __fish_emerge_print_sets + __fish_portage_print_installed_pkgs + # TODO deselect=n + else + __fish_emerge_print_sets + __fish_portage_print_available_pkgs + end end -function __fish_emerge_use_installed_package -d 'Tests if emerge command should have an installed package as potential completion' - for i in (commandline -opc) - if contains -- $i -u --update -C --unmerge -P --prune --config - return 0 - end - end - return 1 -end - - -function __fish_emerge_print_all_pkgs_with_version_compare -d 'Print completions for all packages including the version compare if that is already typed' - set -l version_comparator (commandline -t | string match -r '^[\'"]*[<>]\?=\?' | \ - sed -r 's/^[\'"]*(.*)/\1/g') - set -l sedstring - - if set -q $version_comparator - set sedstring 's/^(.*)/\1\tPackage/g' - else - set sedstring 's/^(.*)/'$version_comparator'\1\tPackage/g' - end - - __fish_emerge_print_all_pkgs | sed -r $sedstring -end +complete -c emerge -xa "(__fish_emerge_possible_args)" ######################### -# Actions -complete -c emerge -n '__fish_emerge_use_installed_package' -xua \ -'system\t"'(_ "All base system packages")'" '\ -'world\t"'(_ "All packages in world")'" '\ -'(__fish_emerge_print_installed_pkgs)\t"'(_ "Installed package")'"' - -complete -c emerge -n 'not __fish_emerge_use_installed_package' -xua \ -'system\t"'(_ "All base system packages")'" '\ -'world\t"'(_ "All packages in world")'" '\ -'@world\t"'(_ "All packages in world")'" '\ -'@preserved-rebuild\t"'(_ 'Packages that are linked to preserved libs')'" '\ -'@module-rebuild\t"'(_ "Packages that contain kernel modules")'" '\ -'(__fish_emerge_print_all_pkgs_with_version_compare)' - -complete -c emerge -l sync -d "Synchronize the portage tree" -complete -c emerge -l info -d "Get informations to include in bug reports" -complete -c emerge -s V -l version -d "Displays the version number of emerge" -complete -c emerge -s h -l help -d "Displays help information for emerge" -xa \ -'""\t"'(_ "Usage overview of emerge")'" '\ -'system\t"'(_ "Help on subject system")'" '\ -'config\t"'(_ "Help on subject config")'" '\ -'sync\t"'(_ "Help on subject sync")'"' - -complete -c emerge -s c -l clean -d "Remove packages that will not affect the functionality of the system" -complete -c emerge -l config -d "Run package specific actions needed to be executed after the emerge process" -complete -c emerge -l depclean -d "WARNING: Delete all packages that are neither deps nor in world" -complete -c emerge -l metadata -d "Process all meta-cache files" -complete -c emerge -s P -l prune -d "WARNING: Remove all but the latest version of package" -complete -c emerge -l regen -d "Check and update the dependency cache" -complete -c emerge -l resume -d "Resume the last merge operation" -complete -c emerge -s s -l search -d "Search for matches in the portage tree" -complete -c emerge -s S -l searchdesc -d "Search for matches in package names and descriptions" -complete -c emerge -s C -l unmerge -d "WARNING: Remove the given package" -complete -c emerge -s u -l update -d "Update the given package" -# END Actions +# Actions # ######################### +complete -c emerge -l check-news +complete -c emerge -l clean +complete -c emerge -l config +complete -c emerge -s c -l depclean +complete -c emerge -l deselect +complete -c emerge -s h -l help +complete -c emerge -l info +complete -c emerge -l list-sets +complete -c emerge -l metadata +complete -c emerge -s P -l prune +complete -c emerge -l regen +complete -c emerge -s r -l resume +complete -c emerge -s s -l search +complete -c emerge -s S -l searchdesc +complete -c emerge -l sync +complete -c emerge -s C -l unmerge +complete -c emerge -s V -l version ######################### -# Options -complete -c emerge -l alphabetical -d "Sort flag lists alphabetically" -complete -c emerge -s a -l ask -d "Prompt the user before peforming the merge" -complete -c emerge -s b -l buildpkg -d "Build a binary package additionally" -complete -c emerge -s B -l buildpkgonly -d "Only build a binary package" -complete -c emerge -s l -l changelog -d "Show changelog of package. Use with --pretend" -complete -c emerge -l color -d "Toggle colorized output" -xa \ -'y\t"'(_ "Use colors in output")'" '\ -'n\t"'(_ "Don't use colors in output")'"' - -complete -c emerge -l colums -d "Align output. Use with --pretend" -complete -c emerge -s d -l debug -d "Run in debug mode" -complete -c emerge -s D -l deep -d "Consider the whole dependency tree" -complete -c emerge -s e -l emptytree -d "Reinstall all world packages" -complete -c emerge -s f -l fetchonly -d "Only download the packages but don't install them" -complete -c emerge -s F -l fetch-all-uri -d "Same as --fetchonly and grab all potential files" -complete -c emerge -s g -l getbinpkg -d "Download infos from each binary package. Implies -k" -complete -c emerge -s G -l getbinpkgonly -d "As -g but don't use local infos" -complete -c emerge -l ignore-default-opts -d "Ignore EMERGE_DEFAULT_OPTS" -complete -c emerge -s N -l newuse -d "Include installed packages with changed USE flags" -complete -c emerge -l noconfmem -d "Disregard merge records" -complete -c emerge -s O -l nodeps -d "Don't merge dependencies" -complete -c emerge -s n -l noreplace -d "Skip already installed packages" -complete -c emerge -l nospinner -d "Disable the spinner" -complete -c emerge -s 1 -l oneshot -d "Don't add packages to world" -complete -c emerge -s o -l onlydeps -d "Only merge dependencies" -complete -c emerge -s p -l pretend -d "Display what would be done without doing it" -complete -c emerge -s q -l quit -d "Use a condensed output" -complete -c emerge -l skipfirst -d "Remove the first package in the resume list. Use with --resume" -complete -c emerge -s t -l tree -d "Show the dependency tree" -complete -c emerge -s k -l usepkg -d "Use binary package if available" -complete -c emerge -s K -l usepkgonly -d "Only use binary packages" -complete -c emerge -s v -l verbose -d "Run in verbose mode" -complete -c emerge -l with-bdeps -d "Toggle build time dependencies" -xa \ -'y\t"'(_ "Pull in build time dependencies")'" '\ -'n\t"'(_ "Don't pull in build time dependencies")'"' - -# END Options +# Options # ######################### - +complete -c emerge -s A -l alert -d "Add a terminal bell character ('\a') to all interactive prompts" +#complete -c emerge -l alphabetical -d "Sort flag lists alphabetically" +complete -c emerge -s a -l ask -d "Prompt the user before peforming the merge" +# ask-enter-invalid +# autounmask +# autounmask-backtrack +# autounmask-continue +# autounmask-only +# autounmask-unrestricted-atoms +# autounmask-keep-keywords +# autounmask-keep-masks +# autounmask-write +complete -c emerge -l backtrack +complete -c emerge -s b -l buildpkg -d "Build a binary pkg additionally" +# buildpkg-exclude +complete -c emerge -s B -l buildpkgonly -d "Only build a binary pkg" +# changed-deps +complete -c emerge -s U -l changed-use +complete -c emerge -s l -l changelog -d "Show changelog of pkg. Use with --pretend" +complete -c emerge -l color -d "Colorized output" \ + -xa "y n" +complete -c emerge -l columns -d "Align output. Use with --pretend" +complete -c emerge -l complete-graph +# complete-graph-if-new-use +# complete-graph-if-new-ver +# config-root DIR +complete -c emerge -s d -l debug -d "Run in debug mode" +complete -c emerge -s D -l deep -d "Consider the whole dependency tree" +# depclean-lib-check +# digest +# dynamic-deps +complete -c emerge -s e -l emptytree -d "Reinstall all world pkgs" +# exclude ATOMS +complete -c emerge -l exclude +# fail-clean +complete -c emerge -s f -l fetchonly -d "Only download the pkgs but don't install them" +complete -c emerge -s F -l fetch-all-uri -d "Same as --fetchonly and grab all potential files" +# fuzzy-search +complete -c emerge -s g -l getbinpkg -d "Download infos from each binary pkg. Implies -k" +complete -c emerge -s G -l getbinpkgonly -d "As -g but don't use local infos" +complete -c emerge -l ignore-default-opts -d "Ignore EMERGE_DEFAULT_OPTS" +# ignore-build-slot-operator-deps +# ignore-soname-deps +complete -c emerge -l jobs +complete -c emerge -l keep-going +# load-average +# misspell-suggestion +# newrepo +complete -c emerge -s N -l newuse -d "Include installed pkgs with changed USE flags" +complete -c emerge -l noconfmem -d "Disregard merge records" +complete -c emerge -s O -l nodeps -d "Don't merge dependencies" +complete -c emerge -s n -l noreplace -d "Skip already installed pkgs" +complete -c emerge -l nospinner -d "Disable the spinner" +# usepkg-exclude ATOMS +# rebuild-exclude ATOMS +# rebuild-ignore ATOMS +complete -c emerge -s 1 -l oneshot -d "Don't add pkgs to world" +complete -c emerge -s o -l onlydeps -d "Only merge dependencies" +# onlydeps-with-rdeps +# package-moves +# pkg-format +# prefix DIR +complete -c emerge -s p -l pretend -d "Display what would be done without doing it" +complete -c emerge -s q -l quiet -d "Use a condensed output" +# quiet-build +# quiet-fail +# quiet-repo-display +# quiet-unmerge-warn +# rage-clean +# read-news +# rebuild-if-new-slot +# rebuild-if-new-rev +# rebuild-if-new-ver +# rebuild-if-unbuilt +# rebuild-binaries +# rebuild-binaries-timestamp TIMESTAMP +# reinstall changed-use +# reinstall-atoms ATOMS +# root-deps +# search-index +# search-similarity PERCENTAGE +complete -c emerge -s w -l select +# selective +complete -c emerge -l skipfirst -d "Remove first pkg in resume list. Use with --resume" +# sync-module +complete -c emerge -s t -l tree -d "Show the dependency tree" +# unordered-display +complete -c emerge -s u -l update +# use-ebuild-visibility +# useoldpkg-atoms ATOMS +complete -c emerge -s k -l usepkg -d "Use binary pkg if available" +complete -c emerge -s K -l usepkgonly -d "Only use binary pkgs" +complete -c emerge -s v -l verbose -d "Run in verbose mode" +# verbose-conflicts +# verbose-slot-rebuilds +complete -c emerge -l with-bdeps -d "Pull in build time dependencies" \ + -xa "y n" +# with-bdeps-auto +# with-test-bdeps diff --git a/share/completions/equery.fish b/share/completions/equery.fish index 44497f525..f04c6fab4 100644 --- a/share/completions/equery.fish +++ b/share/completions/equery.fish @@ -1,104 +1,123 @@ -# Completions for Gentoo's equery tool - -# Author: Tassilo Horn - -function __fish_equery_print_installed_pkgs -d 'Prints completions for installed packages on the system from /var/db/pkg' - if test -d /var/db/pkg - find /var/db/pkg/ -type d | cut -d'/' -f5-6 | sort -u | sed 's/-[0-9]\{1,\}\..*$//' - return - end +# TODO unused +function __fish_equery_print_format + printf "%s\t%s\n" \ + '$cp' "contains the category and the package name only (e.g 'app-portage/gentoolkit')" \ + '$cpv' "contains the category, the package name and the full version (e.g. 'app-portage/gentoolkit-0.3.0_rc10-r1')" \ + '$category' "contains just the category (e.g. 'app-portage')" \ + '$name' "contains just the package name (e.g. 'gentoolkit')" \ + '$version' "contains the package version (without the revision) (e.g. '0.3.0_rc10')" \ + '$revision' "contains the package revision (e.g. 'r1')" \ + '$fullversion' "contains the package version including its revision (e.g. '0.3.0_rc10-r1')" \ + '$slot' "contains the package's slot" \ + '$repo' "contains the name of the package's repository (e.g. 'gentoo')" \ + '$mask' "the mask-status field (~M-??)" \ + '$mask2' "contains a verbose description of the packages masking status" \ + '$location' "the location field (IPO-)" end -function __fish_equery_print_all_pkgs -d 'Prints completions for all available packages on the system from /usr/portage' - if test -d /usr/portage - find /usr/portage/ -maxdepth 2 -type d | cut -d'/' -f4-5 | sed 's/^\(distfiles\|profiles\|eclass\).*$//' | sort -u | sed 's/-[0-9]\{1,\}\..*$//' - return - end -end +## Global Opts +complete -c equery -s h -l help -d "Displays a help message" +complete -c equery -s q -l quiet -d "Minimal output" +complete -c equery -s C -l no-color -d "Turns off colors" +complete -c equery -s N -l no-pipe -d "Turns off pipe detection" +complete -c equery -s V -l version -d "Display version information" -function __fish_equery_print_all_categories -d 'Prints completions for all available categories on the system from /usr/portage' - if test -d /usr/portage - find /usr/portage/ -maxdepth 1 -type d | cut -d'/' -f4 | sed 's/^\(distfiles\|profiles\|eclass\).*$//' | sort -u | sed 's/-[0-9]\{1,\}\..*$//' - return - end -end +## Subcommands +complete -c equery -n '__fish_use_subcommand' -xa 'belongs' -d "List all packages owning file(s)" +complete -c equery -n '__fish_use_subcommand' -xa 'changes' -d "List changelog entries for ATOM" +complete -c equery -n '__fish_use_subcommand' -xa 'check' -d "Check MD5sums and timestamps of package" +complete -c equery -n '__fish_use_subcommand' -xa 'depends' -d "List all packages depending on specified package" +complete -c equery -n '__fish_use_subcommand' -xa 'depgraph' -d "Display a dependency tree for package" +complete -c equery -n '__fish_use_subcommand' -xa 'files' -d "List files owned by package" +complete -c equery -n '__fish_use_subcommand' -xa 'has' -d "List pkgs for matching ENVIRONMENT data" +complete -c equery -n '__fish_use_subcommand' -xa 'hasuse' -d "List pkgs with specified useflag" +complete -c equery -n '__fish_use_subcommand' -xa 'keywords' -d "Display keywords for specified PKG" +complete -c equery -n '__fish_use_subcommand' -xa 'list' -d "List all packages matching pattern" +complete -c equery -n '__fish_use_subcommand' -xa 'meta' -d "Display metadata about PKG" +complete -c equery -n '__fish_use_subcommand' -xa 'size' -d "Print size of files contained in package" +complete -c equery -n '__fish_use_subcommand' -xa 'uses' -d "Display USE flags for package" +complete -c equery -n '__fish_use_subcommand' -xa 'which' -d "Print full path to ebuild for package" -######################################################################### -# Global Opts -complete -c equery -s q -l quit -d "causes minimal output to be emitted" -complete -c equery -s C -l nocolor -d "turns off colours" -complete -c equery -s h -l help -d "displays a help summary" -complete -c equery -s V -l version -d "displays the equery version" -complete -c equery -s N -l no-pipe -d "turns off pipe detection" -# END Global Opts -######################################################################### +## Arguments +complete -c equery -n '__fish_seen_subcommand_from changes depends depgraph meta which' -xa '(__fish_portage_print_available_pkgs)' +complete -c equery -n '__fish_seen_subcommand_from check files uses size' -xa '(__fish_portage_print_installed_pkgs)' -######################################################################### -# Subcommands -complete -c equery -n '__fish_use_subcommand' -xa 'belongs\t"'(_ "list all packages owning file(s)")'"' -complete -c equery -n '__fish_use_subcommand' -xa 'check\t"'(_ "check MD5sums and timestamps of package")'"' -complete -c equery -n '__fish_use_subcommand' -xa 'depends\t"'(_ "list all packages depending on specified package")'"' -complete -c equery -n '__fish_use_subcommand' -xa 'depgraph\t"'(_ "display a dependency tree for package")'"' -complete -c equery -n '__fish_use_subcommand' -xa 'files\t"'(_ "list files owned by package")'"' -complete -c equery -n '__fish_use_subcommand' -xa 'hasuse\t"'(_ "list all packages with specified useflag")'"' -complete -c equery -n '__fish_use_subcommand' -xa 'list\t"'(_ "list all packages matching pattern")'"' -complete -c equery -n '__fish_use_subcommand' -xa 'size\t"'(_ "print size of files contained in package")'"' -complete -c equery -n '__fish_use_subcommand' -xa 'uses\t"'(_ "display USE flags for package")'"' -complete -c equery -n '__fish_use_subcommand' -xa 'which\t"'(_ "print full path to ebuild for package")'"' -# END Subcommands -######################################################################### - -######################################################################### -# Local opts +## Local opts # belongs -complete -c equery -n '__fish_seen_subcommand_from belongs' -s c -l category -xa '(__fish_equery_print_all_categories)' -d "only search in given category" -complete -c equery -n '__fish_seen_subcommand_from belongs' -s f -l full-regex -d "supplied query is a regex" -complete -c equery -n '__fish_seen_subcommand_from belongs' -s e -l earlyout -d "stop when first match found" +complete -c equery -n '__fish_seen_subcommand_from belongs' -s f -l full-regex -d "Supplied query is a regex" +complete -c equery -n '__fish_seen_subcommand_from belongs' -s e -l early-out -d "Stop when first match is found" +complete -c equery -n '__fish_seen_subcommand_from belongs' -s n -l name-only -d "Don't print the version" + +# changes +complete -c equery -n '__fish_seen_subcommand_from changes' -s l -l latest -d "Display only the latest ChangeLog entry" +complete -c equery -n '__fish_seen_subcommand_from changes' -s f -l full -d "Display the full ChangeLog" +#complete -c equery -n '__fish_seen_subcommand_from changes' -l limit=NUM -d "Limit the number of entries displayed (with --full)" +#complete -c equery -n '__fish_seen_subcommand_from changes' -l from=VER -d "Set which version to display from" +#complete -c equery -n '__fish_seen_subcommand_from changes' -l to=VER -d "Set which version to display to" + +# check +complete -c equery -n '__fish_seen_subcommand_from check' -s f -l full-regex -d "Query is a regular expression" +complete -c equery -n '__fish_seen_subcommand_from check' -s o -l only-failures -d "Only display packages that do not pass" # depends -complete -c equery -n '__fish_seen_subcommand_from depends' -s a -l all-packages -d "search in all available packages (slow)" -complete -c equery -n '__fish_seen_subcommand_from depends' -s d -l direct -d "search direct dependencies only (default)" -complete -c equery -n '__fish_seen_subcommand_from depends' -s D -l indirect -d "search indirect dependencies (very slow)" +complete -c equery -n '__fish_seen_subcommand_from depends' -s a -l all-packages -d "Include dependencies that are not installed (slow)" +complete -c equery -n '__fish_seen_subcommand_from depends' -s D -l indirect -d "Search both direct and indirect dependencies" +#complete -c equery -n '__fish_seen_subcommand_from depends' -l depth=N -d "Limit indirect dependency tree to specified depth" # depgraph -complete -c equery -n '__fish_seen_subcommand_from depgraph' -s U -l no-useflags -d "do not show USE flags" -complete -c equery -n '__fish_seen_subcommand_from depgraph' -s l -l linear -d "do not use fancy formatting" +complete -c equery -n '__fish_seen_subcommand_from depgraph' -s A -l no-atom -d "Do not show dependency atom" +complete -c equery -n '__fish_seen_subcommand_from depgraph' -s M -l no-mask -d "Do not show masking status" +complete -c equery -n '__fish_seen_subcommand_from depgraph' -s U -l no-useflags -d "Do not show USE flags" +complete -c equery -n '__fish_seen_subcommand_from depgraph' -s l -l linear -d "Do not format the graph by indenting dependencies" +#complete -c equery -n '__fish_seen_subcommand_from depgraph' -l depth=N -d "Limit dependency graph to specified depth" # files -complete -c equery -n '__fish_seen_subcommand_from files' -l timestamp -d "output the timestamp of each file" -complete -c equery -n '__fish_seen_subcommand_from files' -l md5sum -d "output the md5sum of each file" -complete -c equery -n '__fish_seen_subcommand_from files' -l type -d "output the type of each file" -complete -c equery -n '__fish_seen_subcommand_from files' -l filter -xa "dir obj sym dev fifo path conf cmd doc man info" -d "filter output based on files type or path (comma separated list)" +complete -c equery -n '__fish_seen_subcommand_from files' -s m -l md5sum -d "Include MD5 sum in output" +complete -c equery -n '__fish_seen_subcommand_from files' -s s -l timestamp -d "Include timestamp in output" +complete -c equery -n '__fish_seen_subcommand_from files' -s t -l type -d "Include file type in output" +complete -c equery -n '__fish_seen_subcommand_from files' -l tree -d "Display results in a tree (turns off other options)" +# TODO comma separated list +complete -c equery -n '__fish_seen_subcommand_from files' -s f -l filter -d "Filter output by file type (comma separated list)" \ + -xa "dir obj sym dev fifo path conf cmd doc man info" -# hasuse -complete -c equery -n '__fish_seen_subcommand_from hasuse' -s i -l installed -d "search installed packages (default)" -complete -c equery -n '__fish_seen_subcommand_from hasuse' -s I -l exclude-installed -d "do not search installed packages" -complete -c equery -n '__fish_seen_subcommand_from hasuse' -s p -l portage-tree -d "also search in portage tree (/usr/portage)" -complete -c equery -n '__fish_seen_subcommand_from hasuse' -s o -l overlay-tree -d "also search in overlay tree (/usr/local/portage)" +# has + hasuse +complete -c equery -n '__fish_seen_subcommand_from has hasuse' -s I -l exclude-installed -d "Exclude installed packages from search path" +complete -c equery -n '__fish_seen_subcommand_from has hasuse' -s o -l overlay-tree -d "Include overlays in search path" +complete -c equery -n '__fish_seen_subcommand_from has hasuse' -s p -l portage-tree -d "Include entire portage tree in search path" +#complete -c equery -n '__fish_seen_subcommand_from has hasuse' -s F -l format=TMPL -d "Specify a custom output format" + +# keywords +# TODO # list -complete -c equery -n '__fish_seen_subcommand_from list' -s i -l installed -d "search installed packages (default)" -complete -c equery -n '__fish_seen_subcommand_from list' -s I -l exclude-installed -d "do not search installed packages" -complete -c equery -n '__fish_seen_subcommand_from list' -s p -l portage-tree -d "also search in portage tree (/usr/portage)" -complete -c equery -n '__fish_seen_subcommand_from list' -s o -l overlay-tree -d "also search in overlay tree (/usr/local/portage)" -complete -c equery -n '__fish_seen_subcommand_from list' -s f -l full-regex -d "query is a regular expression" -complete -c equery -n '__fish_seen_subcommand_from list' -s e -l exact-name -d "list only those packages that exactly match" -complete -c equery -n '__fish_seen_subcommand_from list' -s d -l duplicates -d "only list installed duplicate packages" +complete -c equery -n '__fish_seen_subcommand_from list' -s d -l duplicates -d "List only installed duplicate packages" +complete -c equery -n '__fish_seen_subcommand_from list' -s b -l binpkgs-missing -d "List only installed packages without a corresponding binary package" +complete -c equery -n '__fish_seen_subcommand_from list' -s f -l full-regex -d "Query is a regular expression" +complete -c equery -n '__fish_seen_subcommand_from list' -s m -l mask-reason -d "Include reason for package mask" +complete -c equery -n '__fish_seen_subcommand_from list' -s I -l exclude-installed -d "Exclude installed packages from output" +complete -c equery -n '__fish_seen_subcommand_from list' -s o -l overlay-tree -d "List packages in overlays" +complete -c equery -n '__fish_seen_subcommand_from list' -s p -l portage-tree -d "List packages in the main portage tree" +#complete -c equery -n '__fish_seen_subcommand_from list' -s F -l format=TMPL -d "Specify a custom output format" + +# meta +complete -c equery -n '__fish_seen_subcommand_from meta' -s d -l description -d "Show an extended package description" +complete -c equery -n '__fish_seen_subcommand_from meta' -s H -l herd -d "Show the herd(s) for the package" +complete -c equery -n '__fish_seen_subcommand_from meta' -s k -l keywords -d "Show keywords for all matching package versions" +complete -c equery -n '__fish_seen_subcommand_from meta' -s l -l license -d "Show licenses for the best maching version" +complete -c equery -n '__fish_seen_subcommand_from meta' -s m -l maintainer -d "Show the maintainer(s) for the package" +complete -c equery -n '__fish_seen_subcommand_from meta' -s S -l stablreq -d "Show STABLEREQ arches (cc's) for all matching package versions" +complete -c equery -n '__fish_seen_subcommand_from meta' -s u -l useflags -d "Show per-package USE flag descriptions" +complete -c equery -n '__fish_seen_subcommand_from meta' -s U -l upstream -d "Show package's upstream information" +complete -c equery -n '__fish_seen_subcommand_from meta' -s x -l xml -d "Show the plain metadata.xml file" # size -complete -c equery -n '__fish_seen_subcommand_from size' -s b -l bytes -d "report size in bytes" +complete -c equery -n '__fish_seen_subcommand_from size' -s b -l bytes -d "Report size in bytes" +complete -c equery -n '__fish_seen_subcommand_from size' -s f -l full-regex -d "Query is a regular expression" # uses -complete -c equery -n '__fish_seen_subcommand_from uses' -s a -l all -d "include non-installed packages" -# END Local opts -######################################################################### +complete -c equery -n '__fish_seen_subcommand_from uses' -s a -l all -d "Include all package versions" +complete -c equery -n '__fish_seen_subcommand_from uses' -s i -l ignore-l10n -d "Don't show l10n USE flags" -######################################################################### -# Arguments -# Commands applied to a package which doesn't need to be installed -complete -c equery -n '__fish_seen_subcommand_from depends depgraph hasuse which' -xa '(__fish_equery_print_all_pkgs)' - -# Commands applied to a package which has to be installed -complete -c equery -n '__fish_seen_subcommand_from check files uses size' -xa '(__fish_equery_print_installed_pkgs)' -# END Arguments -######################################################################### \ No newline at end of file +# which +complete -c equery -n '__fish_seen_subcommand_from which' -s m -l include-masked -d "Return highest version ebuild available" +complete -c equery -n '__fish_seen_subcommand_from which' -s e -l ebuild -d "Print the ebuild" diff --git a/share/functions/__fish_portage_print_available_categories.fish b/share/functions/__fish_portage_print_available_categories.fish new file mode 100644 index 000000000..ad3121cf1 --- /dev/null +++ b/share/functions/__fish_portage_print_available_categories.fish @@ -0,0 +1,3 @@ +function __fish_portage_print_available_categories --description 'Print all available categories' + cat (__fish_portage_print_repository_paths)/profiles/categories ^ /dev/null +end diff --git a/share/functions/__fish_portage_print_available_pkgs.fish b/share/functions/__fish_portage_print_available_pkgs.fish new file mode 100644 index 000000000..65c4f6443 --- /dev/null +++ b/share/functions/__fish_portage_print_available_pkgs.fish @@ -0,0 +1,3 @@ +function __fish_portage_print_available_pkgs --description 'Print all available packages' + find (__fish_portage_print_repository_paths) -mindepth 2 -maxdepth 2 -type d ! '(' '(' -path '*/eclass/*' -o -path '*/metadata/*' -o -path '*/profiles/*' -o -path '*/.*/*' ')' -prune ')' -printf '%P\n' +end diff --git a/share/functions/__fish_portage_print_installed_categories.fish b/share/functions/__fish_portage_print_installed_categories.fish new file mode 100644 index 000000000..be9bff06c --- /dev/null +++ b/share/functions/__fish_portage_print_installed_categories.fish @@ -0,0 +1,3 @@ +function __fish_portage_print_installed_categories --description 'Print all installed categories' + find /var/db/pkg -mindepth 1 -maxdepth 1 -type d -printf '%P\n' +end diff --git a/share/functions/__fish_portage_print_installed_pkgs.fish b/share/functions/__fish_portage_print_installed_pkgs.fish new file mode 100644 index 000000000..41c66530d --- /dev/null +++ b/share/functions/__fish_portage_print_installed_pkgs.fish @@ -0,0 +1,3 @@ +function __fish_portage_print_installed_pkgs --description 'Print all installed packages (non-deduplicated)' + find /var/db/pkg -mindepth 2 -maxdepth 2 -type d -printf '%P\n' | string replace -r -- '-[0-9][0-9.]*.*$' '' +end diff --git a/share/functions/__fish_portage_print_repository_names.fish b/share/functions/__fish_portage_print_repository_names.fish new file mode 100644 index 000000000..47e204570 --- /dev/null +++ b/share/functions/__fish_portage_print_repository_names.fish @@ -0,0 +1,4 @@ +function __fish_portage_print_repository_names --description 'Print the names of all configured repositories' + # repos.conf may be a file or a directory + find /etc/portage/repos.conf -type f -exec sed -ne '/^[[:blank:]]*\[[[:alnum:]_][[:alnum:]_-]*\]/{s!^.*\[\(.*\)\].*$!\1!; /DEFAULT/!p}' '{}' + +end diff --git a/share/functions/__fish_portage_print_repository_paths.fish b/share/functions/__fish_portage_print_repository_paths.fish new file mode 100644 index 000000000..cfe23f715 --- /dev/null +++ b/share/functions/__fish_portage_print_repository_paths.fish @@ -0,0 +1,4 @@ +function __fish_portage_print_repository_paths --description 'Print the paths of all configured repositories' + # repos.conf may be a file or a directory + find /etc/portage/repos.conf -type f -exec awk 'BEGIN { FS="[[:blank:]]*=[[:blank:]]*" } $1 == "location" { print $2 }' '{}' + +end