I'm using POSH git for powershell and can do for example
git checkout mini<tab>
and I get
git checkout minidisk
I'd like to create a alias gco for git checkout to do
gco mini<tab>
to get
gco minidisk
Is it possible to forward the tab completion to the POSH git handler?
To include git information in your prompt, the posh-git module needs to be imported. To have posh-git imported every time PowerShell starts, execute the Add-PoshGitToProfile command which will add the import statement into your $profile script. This script is executed everytime you open a new PowerShell console.
The default install options will put git on your PATH. It will run from PowerShell, CMD, and "git bash" shell based on Msys (a Linux-like Gnu dev environment for Windows from the MinGW project).
There is no such thing as "git handler". The only thing that posh-git shell is doing is replacing default TabExpansion function with own implementation.
You need to modify their implementation to get behavior you want.
If you want to modify it, just run this command within posh-git shell:
notepad (Get-Command TabExpansion).ScriptBlock.File
You can replace notepad with your editor of choice.
EDIT
There are few ways you can do it in this particular case. With all the complexity in this implementation though I would not invest too much time, I would just try to convince tab function that you actually used 'git checkout':
function TabExpansion($line, $lastWord) {
$line = $line -replace '^gco ', 'git checkout '
# rest of the function as it is...
BTW: there is no way to create alias like that in PowerShell: aliases in PowerShell can replace command, not command + arguments (for latter you will need to define function).
There is a simple way to add your own tab expansion hooks via the PowerTab powershell plugin. Once you have PowerTab installed. ( You can do this via chocolately using an admin privilege shell) then create the following in your powershell profile
# Load posh-git example profile
. 'C:\tools\poshgit\dahlbyk-posh-git-c481e5b\profile.example.ps1'
# Create a function for registering alias's that support tab expansion
function Register-TabExpansion-Alias([string]$alias, [string]$expansion) {
Invoke-Expression "function global:$alias { $expansion `$args }"
Register-TabExpansion -Name $alias -Type Command {
param($Context, [ref]$TabExpansionHasOutput, [ref]$QuoteSpaces)
$Argument = $Context.Argument
if ( $Argument -notlike '^\$' ){
$TabExpansionHasoutput.Value = $true
TabExpansion "$expansion $Argument"
}
}.GetNewClosure()
}
Register-TabExpansion-Alias "gco" "git checkout"
Register-TabExpansion-Alias "grb" "git rebase"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With