2026-04-18 12:03:48 +03:00

32 lines
813 B
Bash
Executable File

#!/bin/sh
_fzf_base() {
fzf -0 -m --bind load:last --print0 "${@}" | sed -z 's/^[^ ]* //'
}
fzf_get_selected_modified() {
_fzf_base -1 --border-label=' Modified ' --preview 'git diff --color=always -- "$(echo {+} | sed "s/^[^ ]* //")"'
}
fzf_get_selected_untracked() {
_fzf_base --border-label=' Untracked ' --preview 'highlight -O xterm256 -- "$(echo {+} | sed "s/^[^ ]* //")"'
}
gitadd() {
xargs -0 git add
}
git_ls_files() {
git ls-files --exclude-standard -t "${@}"
}
modified_files="$(git_ls_files --modified)"
if [ -n "$modified_files" ]; then
printf "%s\n" "${modified_files}" | fzf_get_selected_modified | gitadd
fi
untracked_files="$(git_ls_files --others)"
if [ -n "$untracked_files" ]; then
printf "%s\n" "${untracked_files}" | fzf_get_selected_untracked | gitadd
fi