Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Remove space added by completion

At 18:33 -0800 14 Feb 2014, Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
On Feb 14,  7:49pm, Aaron Schrab wrote:
} I don't know about the original poster, but one place where I often
} don't want a space after a completion is with git branch names, to make
} it easier to do commands like:
}   # List commits in current branch but not in master
}   git log master..
}   # List commits from either branch which aren't in the other
}   git log branch1...branch2

Try something like the following; I won't hazard to commit it because
I don't know git branch syntax well enough yet.  With this diff you
should be able to complete the branch name and then type "." and it
will auto-remove the space.

That doesn't seem to work at all for me. Looking at the code now, I see that the main place I'd want that behaviour (git log) isn't even completing branches. It calls __git_commit_ranges, which in turn calls __git_commits which uses _alternative to call __git_heads to get branches and similar names as well as a couple of other functions to complete other ways to specify a commit.

That first function is already attempting to do this by passing `-qS ..` on towards compadd, but that doesn't get through _alternative. If I modify it to instead call __git_heads directly (as in the diff below) it works. But then that loses the ability to complete tags.

In the below patch I've also modified the additional arguments for compadd to work a bit better. I changed the suffix to only a single dot rather than 2. This allows typing one more dot to get the first form from my previous message; if two dots are supplied already it actually becomes harder to get that at the end of the range. I also changed to remove the suffix if anything other than an alphanumeric follows. This allows forms like `master~` or `branch@{1}` to be entered without needing to manually remove the dot.

If there's a way to get these arguments passed through the call to _alternative in __git_commits, I think it would be an improvement to change the actual arguments used.

diff --git c/Completion/Unix/Command/_git w/Completion/Unix/Command/_git
index 0c1288a..bf9417a 100644
--- c/Completion/Unix/Command/_git
+++ w/Completion/Unix/Command/_git
@@ -5499,7 +5499,7 @@ __git_commit_ranges () {
  if compset -P '*..(.|)'; then
    __git_commits $*
-    __git_commits $* -qS ..
+    __git_heads $* -S . -r '^a-zA-Z0-9'

Messages sorted by: Reverse Date, Date, Thread, Author