summaryrefslogtreecommitdiff
path: root/70_Trash.zsh
blob: c639db1daf5e761d27be36f631f09f976f8f086b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
##
## Part of configuration files for Zsh4
## AUTHOR: Hugues Hiegel <hugues@hiegel.fr>
## 
## You are encouraged to use, modify, and redistribute
## these files with or without this notice.
## 
## NO WARRANTY PROVIDED, USE AT YOUR OWN RISKS
##

TRASH=$ZDOTDIR/.trash

delete ()
{
	local element real_element

	for element in $@
	do
		real_element=$(readlink -f $(dirname $element))/$(basename $element)
		if [ -e $real_element ]
		then
			echo "Deleting $element..."
			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
}

lsdel ()
{
	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


	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
}

undel ()
{

	for element in $@
	do
		if [ -e ~trash/$element ]
		then
			echo "Getting back $element..."
			mkdir -p ${element:h}
			mv ~trash/$element .
			rmdir --ignore-fail-on-non-empty -p ~trash 2>&-
		else
			echo "Not found in trash: $element"
		fi
	done
}

alias lldel='lsdel -l'
alias ldel='lsdel -lh'