Add linewise user confirmation

This commit is contained in:
Junegunn Choi 2014-05-22 02:26:59 +09:00
parent 6a1b916598
commit c3827dea10

View File

@ -1,5 +1,22 @@
#!/bin/bash #!/bin/bash
confirm() {
while [ 1 ]; do
read -p "$1" -n 1 -r
echo
if [[ "$REPLY" =~ ^[Yy] ]]; then
return 0
elif [[ "$REPLY" =~ ^[Nn] ]]; then
return 1
fi
done
}
remove() {
echo "Remove $1"
rm -f "$1"
}
remove_line() { remove_line() {
src=$(readlink "$2") src=$(readlink "$2")
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
@ -8,23 +25,30 @@ remove_line() {
src=$2 src=$2
echo "Remove from $2:" echo "Remove from $2:"
fi fi
echo " - $1"
changed=0 line_no=1
match=0
while [ 1 ]; do while [ 1 ]; do
line=$(grep -m1 -nF "$1" "$src") || break line=$(sed -n "$line_no,\$p" "$src" | grep -m1 -nF "$1") || break
line_no=$(sed 's/:.*//' <<< "$line") match=1
echo " - Remove line ($line)" line_no=$(( $(sed 's/:.*//' <<< "$line") + line_no - 1 ))
echo " - Line #$line_no: $(sed 's/^[0-9]*://' <<< "$line")"
confirm " - Remove (y/n) ? "
if [ $? -eq 0 ]; then
awk -v n=$line_no 'NR == n {next} {print}' "$src" > "$src.bak" && awk -v n=$line_no 'NR == n {next} {print}' "$src" > "$src.bak" &&
mv "$src.bak" "$src" || break mv "$src.bak" "$src" || break
changed=1 echo " - Removed"
else
echo " - Skipped"
line_no=$(( line_no + 1 ))
fi
done done
[ $changed -eq 0 ] && echo " - Nothing found" [ $match -eq 0 ] && echo " - Nothing found"
echo echo
} }
for shell in bash zsh; do for shell in bash zsh; do
rm -f ~/.fzf.${shell} remove ~/.fzf.${shell}
remove_line "source ~/.fzf.${shell}" ~/.${shell}rc remove_line "source ~/.fzf.${shell}" ~/.${shell}rc
done done
@ -34,7 +58,7 @@ if [ -f "$bind_file" ]; then
fi fi
if [ -d ~/.config/fish/functions ]; then if [ -d ~/.config/fish/functions ]; then
rm -f ~/.config/fish/functions/fzf.fish remove ~/.config/fish/functions/fzf.fish
if [ "$(ls -A ~/.config/fish/functions)" ]; then if [ "$(ls -A ~/.config/fish/functions)" ]; then
echo "Can't delete non-empty directory: \"~/.config/fish/functions\"" echo "Can't delete non-empty directory: \"~/.config/fish/functions\""