From ff0b25b745494d96ae06694321b2299991620b14 Mon Sep 17 00:00:00 2001
From: SuprDewd <suprdewd@gmail.com>
Date: Fri, 24 Dec 2010 22:20:57 +0000
Subject: [PATCH 1/3] Added a function to extract various archives. Also an
 alias for the function.

---
 lib/aliases.zsh   |  2 ++
 lib/functions.zsh | 21 +++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/lib/aliases.zsh b/lib/aliases.zsh
index d2d3aed81..b47de5bde 100644
--- a/lib/aliases.zsh
+++ b/lib/aliases.zsh
@@ -21,3 +21,5 @@ alias ll='ls -l'
 alias sl=ls # often screw this up
 
 alias afind='ack-grep -il'
+
+alias x=extract
diff --git a/lib/functions.zsh b/lib/functions.zsh
index e3c0de43e..99b75409c 100644
--- a/lib/functions.zsh
+++ b/lib/functions.zsh
@@ -37,3 +37,24 @@ function take() {
   mkdir -p $1
   cd $1
 }
+
+function extract() {
+  if [[ -f $1 ]]; then
+    case $1 in
+      *.tar.bz2) tar xvjf $1;;
+      *.tar.gz) tar xvzf $1;;
+      *.bz2) bunzip $1;;
+      *.rar) unrar $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
+  else
+    echo "'$1' is not a valid file"
+  fi
+}

From f0136f2aec4efdd11e976ddbbfd204ca5e113498 Mon Sep 17 00:00:00 2001
From: SuprDewd <suprdewd@gmail.com>
Date: Sat, 25 Dec 2010 13:28:16 +0000
Subject: [PATCH 2/3] Support for more archive formats.

---
 lib/functions.zsh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/functions.zsh b/lib/functions.zsh
index 99b75409c..4246f8811 100644
--- a/lib/functions.zsh
+++ b/lib/functions.zsh
@@ -43,6 +43,8 @@ function extract() {
     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 $1;;
       *.gz) gunzip $1;;

From bcc235e1420f39a0dbd8a7672dffc0f0c81e9b53 Mon Sep 17 00:00:00 2001
From: Robin Ramael <robin.ramael@gmail.com>
Date: Mon, 10 Jan 2011 17:34:38 +0100
Subject: [PATCH 3/3] Added an option to remove file afterwards.

---
 lib/functions.zsh | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/lib/functions.zsh b/lib/functions.zsh
index 4246f8811..914f2ef25 100644
--- a/lib/functions.zsh
+++ b/lib/functions.zsh
@@ -39,6 +39,12 @@ function take() {
 }
 
 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;;
@@ -56,7 +62,14 @@ function extract() {
       *.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
 }
+