diff --git a/share/functions/__fish_complete_tar.fish b/share/functions/__fish_complete_tar.fish index f7f654a0e..3b90bfa67 100644 --- a/share/functions/__fish_complete_tar.fish +++ b/share/functions/__fish_complete_tar.fish @@ -1,42 +1,21 @@ function __fish_complete_tar -d "Peek inside of archives and list all files" - set -l cmd (commandline -poc) - set -e cmd[1] - for i in $cmd - switch $i - case '-*' + set -l args (commandline -poc) + while count $args >/dev/null + switch $args[1] + case '-*f' '--file' + set -e args[1] + if test -f $args[1] + set -l file_list (tar -atf $args[1] ^ /dev/null) + if test -n "$file_list" + printf (_ "%s\tArchived file\n") $file_list + end + return + end + case '*' + set -e args[1] continue - - case '*.tar.bz' '*.tar.bz2' '*.tbz' '*.tbz2' - if test -f $i - set -l file_list (tar -jt <$i) - printf (_ "%s\tArchived file\n") $file_list - end - return - - case '*.tar.gz' '*.tgz' - if test -f $i - set -l file_list (tar -it <$i) - printf (_ "%s\tArchived file\n") $file_list - end - return - - case '*.tar.xz' - if test -f $i - set -l file_list (tar -Jt <$i) - printf (_ "%s\tArchived file\n") $file_list - end - return - - case '*.tar' - if test -f $i - set -l file_list (tar -t <$i) - printf (_ "%s\tArchived file\n") $file_list - end - return end end end - -