Browse Source

Merge pull request #208 from sorin-ionescu/plugin-extract

extract plugin
Robby Russell 13 years ago
parent
commit
46440e7198
4 changed files with 93 additions and 36 deletions
  1. 0 1
      lib/aliases.zsh
  2. 0 35
      lib/functions.zsh
  3. 8 0
      plugins/extract/_extract
  4. 85 0
      plugins/extract/extract.plugin.zsh

+ 0 - 1
lib/aliases.zsh

@@ -22,4 +22,3 @@ alias sl=ls # often screw this up
 
 
 alias afind='ack-grep -il'
 alias afind='ack-grep -il'
 
 
-alias x=extract

+ 0 - 35
lib/functions.zsh

@@ -15,38 +15,3 @@ function take() {
   cd $1
   cd $1
 }
 }
 
 
-function extract() {
-    unset REMOVE_ARCHIVE
-    
-    if test "$1" = "-r"; then
-        REMOVE=1
-        shift
-    fi
-  if [[ -f $1 ]]; then
-    case $1 in
-      *.tar.bz2) tar xvjf $1;;
-      *.tar.gz) tar xvzf $1;;
-      *.tar.xz) tar xvJf $1;;
-      *.tar.lzma) tar --lzma -xvf $1;;
-      *.bz2) bunzip $1;;
-      *.rar) unrar x $1;;
-      *.gz) gunzip $1;;
-      *.tar) tar xvf $1;;
-      *.tbz2) tar xvjf $1;;
-      *.tgz) tar xvzf $1;;
-      *.zip) unzip $1;;
-      *.Z) uncompress $1;;
-      *.7z) 7z x $1;;
-      *) echo "'$1' cannot be extracted via >extract<";;
-    esac
-
-    if [[ $REMOVE_ARCHIVE -eq 1 ]]; then
-        echo removing "$1";
-        /bin/rm "$1";
-    fi
-
-  else
-    echo "'$1' is not a valid file"
-  fi
-}
-

+ 8 - 0
plugins/extract/_extract

@@ -0,0 +1,8 @@
+#compdef extract
+#autoload
+
+_arguments \
+  '(-r --remove)'{-r,--remove}'[Remove archive.]' \
+  "*::archive file:_files -g '(#i)*.(tar|tgz|tbz|tbz2|txz|tlz|gz|bz2|xz|lzma|Z|zip|rar|7z|deb)(-.)'" && return 0
+
+

+ 85 - 0
plugins/extract/extract.plugin.zsh

@@ -0,0 +1,85 @@
+# ------------------------------------------------------------------------------
+#          FILE:  extract.plugin.zsh
+#   DESCRIPTION:  oh-my-zsh plugin file.
+#        AUTHOR:  Sorin Ionescu (sorin.ionescu@gmail.com)
+#       VERSION:  1.0.1
+# ------------------------------------------------------------------------------
+
+
+function extract() {
+  local remove_archive
+  local success
+  local file_name
+  local extract_dir
+
+  if (( $# == 0 )); then
+    echo "Usage: extract [-option] [file ...]"
+    echo
+    echo Options:
+    echo "    -r, --remove    Remove archive."
+    echo
+    echo "Report bugs to <sorin.ionescu@gmail.com>."
+  fi
+
+  remove_archive=1
+  if [[ "$1" == "-r" ]] || [[ "$1" == "--remove" ]]; then
+    remove_archive=0 
+    shift
+  fi
+
+  while (( $# > 0 )); do
+    if [[ ! -f "$1" ]]; then
+      echo "extract: '$1' is not a valid file" 1>&2
+      shift
+      continue
+    fi
+
+    success=0
+    file_name="$( basename "$1" )"
+    extract_dir="$( echo "$file_name" | sed "s/\.${1##*.}//g" )"
+    case "$1" in
+      (*.tar.gz|*.tgz) tar xvzf "$1" ;;
+      (*.tar.bz2|*.tbz|*.tbz2) tar xvjf "$1" ;;
+      (*.tar.xz|*.txz) tar --xz --help &> /dev/null \
+        && tar --xz -xvf "$1" \
+        || xzcat "$1" | tar xvf - ;;
+      (*.tar.zma|*.tlz) tar --lzma --help &> /dev/null \
+        && tar --lzma -xvf "$1" \
+        || lzcat "$1" | tar xvf - ;;
+      (*.tar) tar xvf "$1" ;;
+      (*.gz) gunzip "$1" ;;
+      (*.bz2) bunzip2 "$1" ;;
+      (*.xz) unxz "$1" ;;
+      (*.lzma) unlzma "$1" ;;
+      (*.Z) uncompress "$1" ;;
+      (*.zip) unzip "$1" -d $extract_dir ;;
+      (*.rar) unrar e -ad "$1" ;;
+      (*.7z) 7za x "$1" ;;
+      (*.deb)
+        mkdir -p "$extract_dir/control"
+        mkdir -p "$extract_dir/data"
+        cd "$extract_dir"; ar vx "../${1}" > /dev/null
+        cd control; tar xzvf ../control.tar.gz
+        cd ../data; tar xzvf ../data.tar.gz
+        cd ..; rm *.tar.gz debian-binary
+        cd ..
+      ;;
+      (*) 
+        echo "extract: '$1' cannot be extracted" 1>&2
+        success=1 
+      ;; 
+    esac
+
+    (( success = $success > 0 ? $success : $? ))
+    (( $success == 0 )) && (( $remove_archive == 0 )) && rm "$1"
+    shift
+  done
+}
+
+alias x=extract
+
+# add extract completion function to path
+fpath=($ZSH/plugins/extract $fpath)
+autoload -U compinit
+compinit -i
+