#!/bin/bash

# Lists the current directory's files in Vim, so you can edit it and save to rename them
# USAGE: vimv [file1 file2]
# https://github.com/thameera/vimv

declare -r FILENAMES_FILE="$(mktemp --tmpdir vimv.XXX)"

trap '{ rm -f "${FILENAMES_FILE}" ; }' EXIT

if [ $# -ne 0 ]; then
    src=( "$@" )
else
    IFS=$'\r\n' GLOBIGNORE='*' command eval  'src=($(/bin/ls))'
fi

for ((i=0;i<${#src[@]};++i)); do
    echo "${src[i]}" >> "${FILENAMES_FILE}"
done

${EDITOR:-vi} "${FILENAMES_FILE}"

IFS=$'\r\n' GLOBIGNORE='*' command eval  'dest=($(cat "${FILENAMES_FILE}"))'

count=0
for ((i=0;i<${#src[@]};++i)); do
    if [ "${src[i]}" != "${dest[i]}" ]; then
        mkdir -p "`dirname "${dest[i]}"`"
        if git ls-files --error-unmatch "${src[i]}" > /dev/null 2>&1; then
            git mv "${src[i]}" "${dest[i]}"
        else
            mv "${src[i]}" "${dest[i]}"
        fi
        ((count++))
    fi
done

echo "$count" files renamed.
