Git Branch Prompt
Many people have written about showing the current git branch in your shell prompt.
There is even the Bash function __git_ps1 provided in the main Git repo.
I prefer to show info like the current time and current git branch in a GNU screen status line.
Screen Status
As I use screen constantly, I decided to take a different route: put the current branch name in my screen status line.
Changing the Screen Current Directory
When you start screen, it remembers the current directory. Issuing ‘cd’ commands inside a shell does not change the value. The only way to change it is to issue a screen
chdir
command.
In order to know the current branch in a particular screen window, I needed to make screen’s current directory change to follow the shell it is presenting.
I added the following to my .bashrc:
1 2 3 4 5 6 7 8 9 |
|
This is Bash specific, but similar code should work in other shells.
git-current-branch
Next, I created the following shell script:
1 2 3 |
|
.screenrc
And finally, I added a ‘backtick’ command to my .screenrc file:
startup_message off
backtick 1 0 1 git-current-branch
hardstatus alwayslastline "%-w%{.bw}%n %t%{-}%+w %-45= %1`"
screen -t bash 0
screen -t edit 1
select 0
The important line is: backtick 1 0 1 git-current-branch
which creates a ‘backtick command’ (number 1) which calls git-current-branch
once a second via %1`
in the hardstatus line.
The Result
Conclusion
This system is not perfect as the shell only notifies screen of its directory when a new prompt is created.
The result is that if you switch screens, the status line doesn’t get updated until after you issue a command.