#!/usr/bin/env bash # # interactive menu to select file/commit to edit # # @params # Globals # ${mydir}: current directory of the script # ${modified}: select modified file only # ${commit}: rename commit # ${selected_commit}: selected commit to edit # ${selected_files}: selected file to edit # Arguments # -m: display modified file only # -c: edit commit using interactive rebase # -h: show helpe message and exit set -e set -f mydir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" source "${mydir}"/../helper/set_variable.sh source "${mydir}"/../helper/git_query.sh function usage() { echo -e "Usage: dotbare fedit [-h] [-m] [-c] ...\n" echo -e "List all tracked dotfiles and edit" echo -e "also support commit message edit\n" echo -e "optional arguments:" echo -e " -h\tshow this help message and exit" echo -e " -m\tonly display modified file" echo -e " -c\tedit commit using interactive rebase instead" } modified='' commit='' while getopts ":hmc" opt; do case "$opt" in m) modified='true' break ;; c) commit='true' break ;; h) usage exit 0 ;; *) echo "Invalid option: ${OPTARG}" >&2 usage exit 1 ;; esac done if [[ -n "${commit}" ]]; then selected_commit=$(get_commit "Select a commit to rename") [[ -z "${selected_commit}" ]] && exit 1 /usr/bin/git --git-dir="${DOTBARE_DIR}" --work-tree="${DOTBARE_TREE}" rebase -i "${selected_commit}"~ else if [[ -n "${modified}" ]]; then selected_files=$(get_modified_file "Select tracked files to edit") else selected_files=$(get_git_file "Select tracked files to edit") fi [[ -z "${selected_files}" ]] && exit 1 # shellcheck disable=SC2086 command "${EDITOR}" ${selected_files} fi