102 lines
1.8 KiB
Bash
102 lines
1.8 KiB
Bash
tagfs_nofs()
|
|
{
|
|
echo "No tagfs filesystem found in `pwd`"
|
|
}
|
|
|
|
tagfs_exists()
|
|
{
|
|
[ -d .tagfs ] && return 1 || return 0
|
|
}
|
|
|
|
tagfs_clear_filter()
|
|
{
|
|
rm .tagfs/filters/$$ 2> /dev/null
|
|
return 0
|
|
}
|
|
|
|
tagfs_list_filter()
|
|
{
|
|
cat .tagfs/filters/$$ 2> /dev/null
|
|
return 0
|
|
}
|
|
|
|
tagfs_list_tags()
|
|
{
|
|
/bin/ls -1 .tagfs/tags/
|
|
}
|
|
|
|
tagfs_is_tag()
|
|
{
|
|
[ -n "$(echo $1 | egrep '^[-+]')" ] && return 1 || return 0
|
|
}
|
|
|
|
filter()
|
|
{
|
|
tagfs_exists
|
|
[ $? -eq 0 ] && tagfs_nofs && return
|
|
[ $# -eq 1 ] && [ "$1" = "-" ] && tagfs_clear_filter && return
|
|
|
|
filter_file=".tagfs/filters/$$"
|
|
tmp_file=".tagfs/filters/tmp_$$"
|
|
for t in "$@"; do
|
|
case "$(echo $t | cut -b1)" in
|
|
+) [ -z "$(fgrep $t $filter_file 2> /dev/null)" ] && echo "${t#+}" >> $filter_file ;;
|
|
-) sed -e "/${t#-}/d" $filter_file > $tmp_file && mv $tmp_file $filter_file
|
|
echo nigga;;
|
|
esac
|
|
done
|
|
|
|
tagfs_list_filter
|
|
}
|
|
|
|
tags()
|
|
{
|
|
tagfs_exists
|
|
[ $? -eq 0 ] && tagfs_nofs && return
|
|
[ $# -eq 0 ] && tagfs_list_tags && return
|
|
|
|
tagfs_is_tag "$1"
|
|
if [ $? -eq 1 ]; then
|
|
for tag in "$@"; do
|
|
[ "$tag" = "-" ] && continue
|
|
|
|
case "$(echo $tag | cut -b1)" in
|
|
+) mkdir .tagfs/tags/${tag#+} ;;
|
|
-) rm -r .tagfs/tags/${tag#-} ;;
|
|
esac
|
|
done
|
|
else
|
|
for tag in "$@"; do
|
|
[ "$tag" = "$1" ] && continue
|
|
[ "$tag" = "-" ] && rm $(find -name "$1") && continue
|
|
|
|
case "$(echo $tag | cut -b1)" in
|
|
+) ln -s ../../../"$1" .tagfs/tags/"${tag#+}"/"$1" ;;
|
|
-) rm .tagfs/tags/"${tag#-}"/"$1" ;;
|
|
esac
|
|
done
|
|
fi
|
|
}
|
|
|
|
# Bash completion
|
|
# _filter_completion()
|
|
# {
|
|
# filter_file=".tagfs/filters/$$"
|
|
# list=""
|
|
#
|
|
# for t in $(cat $filter_file 2> /dev/null); do
|
|
# list+="-$t "
|
|
# done
|
|
#
|
|
# for t in $(ls .tagfs/tags/); do
|
|
# [ -n "$(fgrep $t $filter_file 2> /dev/null)" ] && continue
|
|
# list+="+$(basename $t) "
|
|
# done
|
|
#
|
|
# COMPREPLY=($(compgen -W "$list" -- "${COMP_WORDS[$COMP_CWORD]}"))
|
|
# }
|
|
#
|
|
# complete -F _filter_completion filter
|
|
#
|
|
|