summaryrefslogtreecommitdiff
path: root/70_Trash.zsh
diff options
context:
space:
mode:
authorHugues Hiegel <hugues.hiegel@qosmos.com>2012-01-25 17:44:09 +0100
committerHugues Hiegel <hugues.hiegel@qosmos.com>2012-01-25 17:44:09 +0100
commit60d6c8e75cfec1e30ca0f6bd113dbbfa051c697c (patch)
tree92a3eafb03c5c5f2475f117a6739166be89a904b /70_Trash.zsh
parentfc32b3a21708bf48ffd5af87fd5de45cebd7398c (diff)
[Trash] Better trash managment with relative paths support
Diffstat (limited to '70_Trash.zsh')
-rw-r--r--70_Trash.zsh74
1 files changed, 49 insertions, 25 deletions
diff --git a/70_Trash.zsh b/70_Trash.zsh
index 0dbe042..c639db1 100644
--- a/70_Trash.zsh
+++ b/70_Trash.zsh
@@ -10,56 +10,80 @@
TRASH=$ZDOTDIR/.trash
-move_to_trash ()
+delete ()
{
- FOLDER=$TRASH/$PWD
+ local element real_element
for element in $@
do
- if [ -e $element ]
+ real_element=$(readlink -f $(dirname $element))/$(basename $element)
+ if [ -e $real_element ]
then
echo "Deleting $element..."
- mkdir -p $FOLDER/${element:h}
- mv -f $element $FOLDER/${element:h}/.
+ if [ ! -d $real_element ]
+ then
+ mkdir -p $TRASH${real_element:h}
+ else
+ mkdir -p $TRASH$real_element
+ fi
+ mv $element $TRASH$real_element
+ else
+ echo "Skipping unknown '$element' ..."
fi
done
}
-list_deleted_elements ()
+lsdel ()
{
- FOLDER=$TRASH/$PWD
+ local LS_OPTS __ARG
+ while [ $# -gt 0 ]
+ do
+ typeset -A __ARG
+ __ARG=$1
+ shift
+
+ [ $__ARG == "--" ] && break
+
+ if [ $__ARG[1] == "-" ]
+ then
+ LS_OPTS="$LS_OPTS $__ARG"
+ else
+ set -- ${@:-"--"} $__ARG
+ fi
+ done
- if [ -d $FOLDER ]
- then
- ls -lad $(find $FOLDER -maxdepth 1 ! -wholename $FOLDER) | sed "s:$FOLDER/::"
- else
- echo "Nothing found in trash."
- fi
+
+ for element in ${@:-.}
+ do
+ element=$(readlink -f $element)
+ [ ! -d $element ] && element_dir=${element:h} || element_dir=$element
+ if [ -e $TRASH$element ]
+ then
+ echo "Deleted from $element_dir:"
+ ls ${=LS_OPTS} $TRASH$element | sed "s'$TRASH$element_dir/''"
+ else
+ echo "Nothing found in trash for '$element'."
+ fi
+ done
}
-undelete_from_trash ()
+undel ()
{
- FOLDER=$TRASH/$PWD
for element in $@
do
- if [ -e $FOLDER/$element ]
+ if [ -e ~trash/$element ]
then
echo "Getting back $element..."
mkdir -p ${element:h}
- mv $FOLDER/$element .
- rmdir --ignore-fail-on-non-empty -p $FOLDER
+ mv ~trash/$element .
+ rmdir --ignore-fail-on-non-empty -p ~trash 2>&-
else
echo "Not found in trash: $element"
fi
done
}
-alias delete='move_to_trash'
-alias undelete='undelete_from_trash'
-alias lsdeleted='list_deleted_elements'
-
-alias cdtrash='cd $TRASH/$PWD'
-alias sotrash='cd ${PWD/$TRASH/}'
+alias lldel='lsdel -l'
+alias ldel='lsdel -lh'
-hash -d trash=$TRASH