diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2018-12-06 13:36:38 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2018-12-06 13:36:38 +1300 |
commit | ad1ec8eb97907f17282ffe465fce036b09d44699 (patch) | |
tree | 4d0b1a256f7356aca95da92bf48b5ae39860c800 | |
parent | Merge branch 'release/v3.1.0' into develop (diff) | |
download | dotfiles-ad1ec8eb97907f17282ffe465fce036b09d44699.tar.gz dotfiles-ad1ec8eb97907f17282ffe465fce036b09d44699.zip |
Apply much simpler completion to Git
Use CTRL-X, B to complete branch names, and CTRL-X, T to complete tag
names. It's too complicated to do it contextually, and it's all I really
wanted anyway.
-rw-r--r-- | bash/bash_completion.d/git.bash | 35 | ||||
-rw-r--r-- | readline/inputrc | 6 |
2 files changed, 41 insertions, 0 deletions
diff --git a/bash/bash_completion.d/git.bash b/bash/bash_completion.d/git.bash new file mode 100644 index 00000000..450160fc --- /dev/null +++ b/bash/bash_completion.d/git.bash @@ -0,0 +1,35 @@ +# Complete Git with branch names or tag names if specific keys are used, but +# fall back on filenames otherwise; it's too complicated to be worth trying to +# do it all contextually + +# Requires Bash >=4.0 for COMP_KEY +((BASH_VERSINFO[0] >= 4)) || continue + +# Define and set helper function +_git() { + + # What completion to do + case $COMP_KEY in + + # Complete with branch names if C-x,B is pressed + 98) + local ci + while read -r _ ref ; do + COMPREPLY[ci++]=${ref#refs/heads/} + done < <(git show-ref --heads) + ;; + + # Complete with tag names if C-x,T is pressed + 116) + local ci + while read -r _ ref ; do + COMPREPLY[ci++]=${ref#refs/tags/} + done < <(git show-ref --tags) + ;; + + # Do no completion, so we fall back on filenames + *) return 1 ;; + + esac +} +complete -F _git -o bashdefault -o default git diff --git a/readline/inputrc b/readline/inputrc index c11d8fe7..857952cd 100644 --- a/readline/inputrc +++ b/readline/inputrc @@ -62,6 +62,12 @@ $if Bash # Alt+A cycles through completion options "\ea": menu-complete + # Special completion keys for git(1) + ## Branches + "\C-xb": complete + ## Tags + "\C-xt": complete + # Ctrl-Alt-L to clear screen; more ksh-like "\e\C-l": clear-screen |