Added tab completion

This commit is contained in:
William Hilton 2015-07-17 01:25:50 -04:00
parent 26145b88a7
commit 2d51867efd
3 changed files with 53 additions and 5 deletions

View file

@ -4,7 +4,7 @@
I started this project because `git log --no-pager` gives an error. Apparently I wanted `git --no-pager log`. This was the last straw.
*So I decided to "fix" the git CLI.*
This project takes inspiration from [gitless](http://gitless.com/) and [legit](https://github.com/kennethreitz/legit), and is
This project takes inspiration from [gitless](http://gitless.com/) and [legit](https://github.com/kennethreitz/legit), and is
influenced by this [blog post](http://www.saintsjd.com/2012/01/a-better-ui-for-git/) and this [fantastic diatribe](http://stevebennett.me/2012/02/24/10-things-i-hate-about-git).
However, I feel all of these tools are either underdeveloped or too opinionated. I want a tool that gives me all the
same control as git but without the headache of its impossible to remember commands.
@ -28,7 +28,7 @@ get reset %FILES% | git checkout %FILES%
get commit %MESSAGE% | git commit -m %MESSAGE%
get branch %BRANCH% | stashes working tree, creates or switches branch, and checks out branch
get rmbranch %BRANCH% | git branch -d %BRANCH% *TODO: rename?*
get update | Fetches all remote branches and fast-forwards all local branches
get fetch | Fetches all remotes and fast-forwards local branches when possible
get status | git status
get review | git diff --cached
get diff | compare working tree with HEAD (git diff HEAD)
@ -37,5 +37,11 @@ get diff %REF% | compare working tree with %REF% (git diff %REF%)
get diff STAGE %REF% | compare stage with %REF% (git diff --cached %REF%)
get diff %REFA% %REFB% | compare %REFA% with %REFB% (git diff %REFA% %REFB%)
### TODO
Now that I've added tab completion, I think "stage" and "status" are too similar.
Also, I have three commands that start with "r" which is a problem.
### Changelog
- I renamed "update" to "fetch" to avoid completion conflicts with "unstage".
Also, it really is just fetch + fast-forward. One of my goals is NOT to use
different terminology than git, because that makes StackOverflow less useful.

38
bash_completion Normal file
View file

@ -0,0 +1,38 @@
#!/bin/bash
list_branches() {
git for-each-ref refs/heads --format="%(refname:short)"
}
_get_complete()
{
# Available variables:
# COMP_LINE COMP_POINT COMP_KEY COMP_TYPE COMP_WORDS COMP_CWORD
# $1 : name of command whose arguments are being completed
# $2 : the word being completed
# $3 : the word preceding the word being completed
case ${COMP_CWORD} in
1)
commands="branch commit diff fetch ignore reset rmbranch review stage status unstage"
COMPREPLY=( $(compgen -W "${commands}" "$2") )
;;
2)
case "$3" in
branch | rmbranch | fetch)
commands=$(list_branches)
COMPREPLY=( $(compgen -W "${commands}" "$2") )
;;
stage | unstage | ignore)
COMPREPLY=( $(compgen -A file -X .git "$2") )
;;
diff)
commands="STAGE"
COMPREPLY=( $(compgen -A file -X .git -W "${commands}" "$2") )
;;
esac
;;
*)
COMPREPLY=()
;;
esac
}
complete -F _get_complete get

8
get
View file

@ -10,7 +10,11 @@ list_branches() {
list_remote_branches() {
git for-each-ref refs/heads --format="%(refname:short)"
}
case "$1" in
"")
echo 'TODO: Display help, or git status if inside a repo'
;;
stage)
if [ -z "$2" ]; then
@ -76,7 +80,7 @@ else
fi
;;
update)
fetch)
echo Updating
if [ -z "$2" ]; then
git fetch --all
@ -108,12 +112,12 @@ status)
# TODO: figure out how to git config --global color.status always automatically.
git status \
| grep -v '# On branch' \
| grep -v '# (use "git push" to publish your local commits)' \
| grep -v '# (use "git reset HEAD <file>..." to unstage)' \
| grep -v '# (use "git add <file>..." to update what will be committed)' \
| grep -v '# (use "git checkout -- <file>..." to discard changes in working directory)' \
| grep -v '# (use "git add <file>..." to include in what will be committed)' \
| grep -v 'nothing added to commit but untracked files present (use "git add" to track)'
;;
diff)