diff --git a/Makefile.in b/Makefile.in index b70ff2f77..1251dc3af 100644 --- a/Makefile.in +++ b/Makefile.in @@ -823,21 +823,6 @@ fish.spec: fish.spec.in ./config.status -# -# Completion files which are autogenerated using various scripts -# - -share/completions/darcs.fish: make_mercurial_completions.fish - ./make_mercurial_completions.fish darcs 'complete -c darcs -n "not __fish_use_subcommand" -a "(test -f _darcs/prefs/repos; and cat _darcs/prefs/repos)" --description "Darcs repo"' 'complete -c darcs -a "test predist boringfile binariesfile" -n "contains setpref (commandline -poc)" -d "woot" -x' >$@ - -share/completions/hg.fish: make_mercurial_completions.fish - ./make_mercurial_completions.fish hg >$@ - -share/completions/svn.fish: make_mercurial_completions.fish - ./make_mercurial_completions.fish svn >$@ - -share/completions/cvs.fish: make_mercurial_completions.fish - ./make_mercurial_completions.fish cvs >$@ # # Create .rpm file for the current systems architecture and an diff --git a/make_mercurial_completions.fish b/make_vcs_completions.fish similarity index 65% rename from make_mercurial_completions.fish rename to make_vcs_completions.fish index e885d00ea..8c576d0aa 100755 --- a/make_mercurial_completions.fish +++ b/make_vcs_completions.fish @@ -70,7 +70,13 @@ function complete_from_list case '?*' set str $str -x - echo "Don't know how to handle arguments of type '$arg'" >&2 + if not set -q unknown + set -g unknown + end + if not contains $arg $unknown + echo "Don't know how to handle arguments of type '$arg'" >&2 + set unknown $unknown $arg + end end switch $desc @@ -85,39 +91,44 @@ function complete_from_list end -set cmd $argv[1]; or exit 1 +function write_completions -echo ' + set -g cmd $argv[1]; or return 1 + + echo "Making completions for $cmd" >&2 + + + echo ' # # Completions for the '$cmd' command -# This file was autogenerated by the file make_mercurial_completions.fish -# which is shipped with the fish source code +# This file was autogenerated by the file make_vcs_completions.fish +# which is shipped with the fish source code. # # # Completions from commandline # ' -set -e argv[1] + set -e argv[1] -while count $argv >/dev/null - echo $argv[1] - set -e argv[1] -end + while count $argv >/dev/null + echo $argv[1] + set -e argv[1] + end -eval "function cmd; $cmd \$argv; end" + eval "function cmd; $cmd \$argv; end" -set -l cmd_str + set -l cmd_str -switch $cmd - case svn + switch $cmd + case svn function list_subcommand set cmd1 '\([^ ]*\)' set cmd2 '\([^,)]*\)' set cmdn '\(, \([^,)]*\)\|\)' - set svn_re '^ *'$cmd1'\( ('$cmd2$cmdn$cmdn')\|\).*$' + set svn_re '^ *'$cmd1'\( ('$cmd2$cmdn$cmdn')\|\).*$' cmd help|sed -ne 's/'$svn_re'/\1\n\3\n\5\n\7/p'| grep . end @@ -130,23 +141,22 @@ switch $cmd cmd help $argv | sed -n -e 's/'$re'/\1\t\2\t\3\t\5/p' end - for i in (list_subcommand) set desc (cmd help $i|head -n 1|sed -e 's/[^:]*: *\(.*[^.]\)\(\|\\.\)$/\1/') set desc (esc $desc) set cmd_str $cmd_str "-a $i --description '$desc'" end - case cvs + case cvs function list_subcommand - cmd --help-commands 2>| sed -n -e 's/^ *\([^ ][^ ]*\) .*$/\1/p' + cmd --help-commands 2>| sed -n -e 's/^ *\([^ ][^ ]*\) .*$/\1/p' end set short_exp '\(-.\)' set arg_exp '\(\| [^ \t][^ \t]*\)' set desc_exp '\([\t ]*:[\t ]*\|\)\([^ ].*\)' - set re '^[ \t]*'$short_exp$arg_exp'[ \t]*'$desc_exp'$' + set -g re '^[ \t]*'$short_exp$arg_exp'[ \t]*'$desc_exp'$' function list_subcommand_help #'s/^[ \t]*\(-.\)[ \t]\([^- \t][^ \t]*\)*[ \t]*\([^-].*\)$/\1\t\2\t\3/p' @@ -168,44 +178,54 @@ switch $cmd set cmd_str $cmd_str "-a $exploded[1] --description '"(esc $exploded[2])"'" end - case '*' + case '*' function list_subcommand - cmd help | sed -n -e 's/^ *\([^ ][^ ]*\) .*$/\1/p' + cmd help | sed -n -e 's/^ *\([^ ][^ ]*\) .*$/\1/p' end function list_subcommand_help - set short_exp '\(-.\|\)\( [^ -][^ ]*\|\)' - set long_exp '\(--[^ =,]*\)' - set arg_exp '\(\|[= ][^ ][^ ]*\)' - set desc_exp '\([\t ]*:[\t ]*\|\)\([^ ].*[^.]\)' - set re "^ *$short_exp *$long_exp$arg_exp *$desc_exp\(\|\\.\)\$" + set -l short_exp '\(-.\|\)\( [^ -][^ ]*\|\)' + set -l long_exp '\(--[^ =,]*\)' + set -l arg_exp '\(\|[= ][^ ][^ ]*\)' + set -l desc_exp '\([\t ]*:[\t ]*\|\)\([^ ].*[^.]\)' + set -l re "^ *$short_exp *$long_exp$arg_exp *$desc_exp\(\|\\.\)\$" cmd help $argv | sed -n -e 's/'$re'/\1\t\3\t\4\t\6/p' end set cmd_str (cmd help | sed -n -e 's/^ *\([^ ][^ ]*\)[\t ]*\([^ ].*[^.]\)\(\|\\.\)$/-a \1 --description \'\2\'/p') -end - -echo ' + end + + echo ' # # subcommands # ' -printf "complete -c $cmd -n '__fish_use_subcommand' -x %s\n" $cmd_str + printf "complete -c $cmd -n '__fish_use_subcommand' -x %s\n" $cmd_str -for i in (list_subcommand) + for i in (list_subcommand) - echo ' + echo ' # # Completions for the \''$i'\' subcommand # ' - complete_from_list "-n 'contains \\'$i\\' (commandline -poc)'" (list_subcommand_help $i) + complete_from_list "-n 'contains \\'$i\\' (commandline -poc)'" (list_subcommand_help $i) + end + + echo \n\n + end -echo \n\n +set darcs_comp 'complete -c darcs -n "not __fish_use_subcommand" -a "(test -f _darcs/prefs/repos; and cat _darcs/prefs/repos)" --description "Darcs repo"' +set darcs_comp $darcs_comp 'complete -c darcs -a "test predist boringfile binariesfile" -n "contains setpref (commandline -poc)" --description "Set the specified option" -x' + +write_completions darcs $darcs_comp >share/completions/darcs.fish +write_completions hg >share/completions/hg.fish +write_completions svn >share/completions/svn.fish +write_completions cvs >share/completions/cvs.fish diff --git a/share/completions/darcs.fish b/share/completions/darcs.fish index c4e43b7b4..f4330446e 100644 --- a/share/completions/darcs.fish +++ b/share/completions/darcs.fish @@ -10,6 +10,7 @@ # complete -c darcs -n "not __fish_use_subcommand" -a "(test -f _darcs/prefs/repos; and cat _darcs/prefs/repos)" --description "Darcs repo" +complete -c darcs -a "test predist boringfile binariesfile" -n "contains setpref (commandline -poc)" --description "Set the specified option" -x # # subcommands diff --git a/share/completions/svn.fish b/share/completions/svn.fish index b8daaff8d..1fa2adb46 100644 --- a/share/completions/svn.fish +++ b/share/completions/svn.fish @@ -31,8 +31,8 @@ complete -c svn -n '__fish_use_subcommand' -x -a delete --description 'Remove fi complete -c svn -n '__fish_use_subcommand' -x -a del --description 'Remove files and directories from version control' complete -c svn -n '__fish_use_subcommand' -x -a remove --description 'Remove files and directories from version control' complete -c svn -n '__fish_use_subcommand' -x -a rm --description 'Remove files and directories from version control' -complete -c svn -n '__fish_use_subcommand' -x -a diff --description 'Display the differences between two paths' -complete -c svn -n '__fish_use_subcommand' -x -a di --description 'Display the differences between two paths' +complete -c svn -n '__fish_use_subcommand' -x -a diff --description 'Display the differences between two revisions or paths' +complete -c svn -n '__fish_use_subcommand' -x -a di --description 'Display the differences between two revisions or paths' complete -c svn -n '__fish_use_subcommand' -x -a export --description 'Create an unversioned copy of a tree' complete -c svn -n '__fish_use_subcommand' -x -a help --description 'Describe the usage of this program or its subcommands' complete -c svn -n '__fish_use_subcommand' -x -a ? --description 'Describe the usage of this program or its subcommands' @@ -94,6 +94,7 @@ complete -c svn -n 'contains \'add\' (commandline -poc)' -l no-auto-props --desc complete -c svn -n 'contains \'blame\' (commandline -poc)' -l incremental --description 'Give output suitable for concatenation' complete -c svn -n 'contains \'blame\' (commandline -poc)' -l xml --description 'Output in XML' +complete -c svn -n 'contains \'blame\' (commandline -poc)' -l force --description 'Force operation to run' complete -c svn -n 'contains \'blame\' (commandline -poc)' -l username -x --description 'Specify a username ARG' complete -c svn -n 'contains \'blame\' (commandline -poc)' -l password -x --description 'Specify a password ARG' complete -c svn -n 'contains \'blame\' (commandline -poc)' -l no-auth-cache --description 'Do not cache authentication tokens' @@ -107,6 +108,7 @@ complete -c svn -n 'contains \'blame\' (commandline -poc)' -l config-dir -x --de complete -c svn -n 'contains \'praise\' (commandline -poc)' -l incremental --description 'Give output suitable for concatenation' complete -c svn -n 'contains \'praise\' (commandline -poc)' -l xml --description 'Output in XML' +complete -c svn -n 'contains \'praise\' (commandline -poc)' -l force --description 'Force operation to run' complete -c svn -n 'contains \'praise\' (commandline -poc)' -l username -x --description 'Specify a username ARG' complete -c svn -n 'contains \'praise\' (commandline -poc)' -l password -x --description 'Specify a password ARG' complete -c svn -n 'contains \'praise\' (commandline -poc)' -l no-auth-cache --description 'Do not cache authentication tokens' @@ -120,6 +122,7 @@ complete -c svn -n 'contains \'praise\' (commandline -poc)' -l config-dir -x --d complete -c svn -n 'contains \'annotate\' (commandline -poc)' -l incremental --description 'Give output suitable for concatenation' complete -c svn -n 'contains \'annotate\' (commandline -poc)' -l xml --description 'Output in XML' +complete -c svn -n 'contains \'annotate\' (commandline -poc)' -l force --description 'Force operation to run' complete -c svn -n 'contains \'annotate\' (commandline -poc)' -l username -x --description 'Specify a username ARG' complete -c svn -n 'contains \'annotate\' (commandline -poc)' -l password -x --description 'Specify a password ARG' complete -c svn -n 'contains \'annotate\' (commandline -poc)' -l no-auth-cache --description 'Do not cache authentication tokens' @@ -133,6 +136,7 @@ complete -c svn -n 'contains \'annotate\' (commandline -poc)' -l config-dir -x - complete -c svn -n 'contains \'ann\' (commandline -poc)' -l incremental --description 'Give output suitable for concatenation' complete -c svn -n 'contains \'ann\' (commandline -poc)' -l xml --description 'Output in XML' +complete -c svn -n 'contains \'ann\' (commandline -poc)' -l force --description 'Force operation to run' complete -c svn -n 'contains \'ann\' (commandline -poc)' -l username -x --description 'Specify a username ARG' complete -c svn -n 'contains \'ann\' (commandline -poc)' -l password -x --description 'Specify a password ARG' complete -c svn -n 'contains \'ann\' (commandline -poc)' -l no-auth-cache --description 'Do not cache authentication tokens' @@ -316,6 +320,7 @@ complete -c svn -n 'contains \'diff\' (commandline -poc)' -l new -x --descriptio complete -c svn -n 'contains \'diff\' (commandline -poc)' -l diff-cmd -x --description 'Use ARG as diff command' complete -c svn -n 'contains \'diff\' (commandline -poc)' -l no-diff-deleted --description 'Do not print differences for deleted files' complete -c svn -n 'contains \'diff\' (commandline -poc)' -l notice-ancestry --description 'Notice ancestry when calculating differences' +complete -c svn -n 'contains \'diff\' (commandline -poc)' -l summarize --description 'Show a summary of the results' complete -c svn -n 'contains \'diff\' (commandline -poc)' -l force --description 'Force operation to run' complete -c svn -n 'contains \'diff\' (commandline -poc)' -l username -x --description 'Specify a username ARG' complete -c svn -n 'contains \'diff\' (commandline -poc)' -l password -x --description 'Specify a password ARG' @@ -333,6 +338,7 @@ complete -c svn -n 'contains \'di\' (commandline -poc)' -l new -x --description complete -c svn -n 'contains \'di\' (commandline -poc)' -l diff-cmd -x --description 'Use ARG as diff command' complete -c svn -n 'contains \'di\' (commandline -poc)' -l no-diff-deleted --description 'Do not print differences for deleted files' complete -c svn -n 'contains \'di\' (commandline -poc)' -l notice-ancestry --description 'Notice ancestry when calculating differences' +complete -c svn -n 'contains \'di\' (commandline -poc)' -l summarize --description 'Show a summary of the results' complete -c svn -n 'contains \'di\' (commandline -poc)' -l force --description 'Force operation to run' complete -c svn -n 'contains \'di\' (commandline -poc)' -l username -x --description 'Specify a username ARG' complete -c svn -n 'contains \'di\' (commandline -poc)' -l password -x --description 'Specify a password ARG' @@ -359,7 +365,6 @@ complete -c svn -n 'contains \'export\' (commandline -poc)' -l ignore-externals # Completions for the 'help' subcommand # -complete -c svn -n 'contains \'help\' (commandline -poc)' -l version --description 'Print client version info' complete -c svn -n 'contains \'help\' (commandline -poc)' -l config-dir -x --description 'Read user configuration files from directory ARG' @@ -367,7 +372,6 @@ complete -c svn -n 'contains \'help\' (commandline -poc)' -l config-dir -x --des # Completions for the '?' subcommand # -complete -c svn -n 'contains \'?\' (commandline -poc)' -l version --description 'Print client version info' complete -c svn -n 'contains \'?\' (commandline -poc)' -l config-dir -x --description 'Read user configuration files from directory ARG' @@ -375,7 +379,6 @@ complete -c svn -n 'contains \'?\' (commandline -poc)' -l config-dir -x --descri # Completions for the 'h' subcommand # -complete -c svn -n 'contains \'h\' (commandline -poc)' -l version --description 'Print client version info' complete -c svn -n 'contains \'h\' (commandline -poc)' -l config-dir -x --description 'Read user configuration files from directory ARG'