From: Oleg Broytman Date: Sun, 15 Oct 2023 12:24:03 +0000 (+0300) Subject: .bashrc, .shellrc: Add `cd_worktree` with completion X-Git-Url: https://git.phdru.name/?a=commitdiff_plain;h=e7e38d09468bc1f412dade47dff41e3facb26580;p=dotfiles.git .bashrc, .shellrc: Add `cd_worktree` with completion --- diff --git a/.bashrc b/.bashrc index 85cb4d8..18c00e2 100644 --- a/.bashrc +++ b/.bashrc @@ -235,6 +235,24 @@ if test -x /usr/bin/git >/dev/null 2>&1; then fi } + # completion for `cd_worktree` + + _cd_worktree_comp() { + local cur="${COMP_WORDS[COMP_CWORD]}" + COMPREPLY=(`compgen -W "$( + git worktree list | awk '{s=$3; gsub("[\\\\[\\\\]]", "", s); print s}' + )" -- "$cur"`) + } + + _cd_worktree_comp_loader() { + _completion_loader git + unset _cd_worktree_comp_loader + complete -F _cd_worktree_comp cd_worktree + return 124 + } + + complete -F _cd_worktree_comp_loader cd_worktree + # completion for aliases in global .gitconfig # fixup rbi rbia rbiap rbip - do refs name completion diff --git a/.shellrc b/.shellrc index b06ba8b..5d46454 100644 --- a/.shellrc +++ b/.shellrc @@ -72,6 +72,22 @@ if test -x /usr/bin/git >/dev/null 2>&1; then fi cd "$path_url" } + + # See https://stackoverflow.com/a/77266926/7976758 + + cd_worktree() { + if [ $# -ne 1 ]; then + echo "Usage: cd_worktree " >&2 + return 1 + fi + path="$(git worktree list | grep -F "$1" | awk '{print $1}')" + if [ -n "$path" ]; then + cd "$path" + else + echo "Cannot find path for branch '$1'" >&2 + return 1 + fi + } fi include() {