# Author: Copyright © 2005 Eric P. Mangold - teratorn (-at-) gmail (-dot) com # License: MIT. http://www.opensource.org/licenses/mit-license.html # http://zshwiki.org/home/examples/functions local old_dirs current_dirs lower lower=${(L)1} old_dirs=( *(N/) ) if [[ $lower == *.tar.gz || $lower == *.tgz ]]; then tar zxfv $1 elif [[ $lower == *.gz ]]; then gunzip $1 elif [[ $lower == *.tar.bz2 || $lower == *.tbz ]]; then bunzip2 -c $1 | tar xfv - elif [[ $lower == *.bz2 ]]; then bunzip2 $1 elif [[ $lower == *.zip ]]; then unzip $1 elif [[ $lower == *.rar ]]; then unrar e $1 elif [[ $lower == *.tar ]]; then tar xfv $1 elif [[ $lower == *.lha ]]; then lha e $1 else print "Unknown archive type: $1" return 1 fi # Change in to the newly created directory, and # list the directory contents, if there is one. current_dirs=( *(N/) ) for i in {1..${#current_dirs}}; do if [[ $current_dirs[$i] != $old_dirs[$i] ]]; then cd $current_dirs[$i] ls break fi done #compdef '_files -g "*.gz *.tgz *.bz2 *.tbz *.zip *.rar *.tar *.lha"' extract_archive # vim: ft=zsh