In my last post I shared my colorful but otherwise inert bash prompt. Pedro Melo extended it to integrate __git_ps1 with extra coloring using git status.
Unfortunately this can take a long while on large source trees (git status needs to scan the directory structure), and while smart bash prompts are handy, it can be frustrating if every prompt incurs a delay.
Of course this is annoying for any over zealous $PROMPT_COMMAND, not just git status based ones.
My version of his version has a small trick to add simple but effective throttling:
_update_prompt () { if [ -z "$_dumb_prompt" ]; then # if $_dumb_prompt isn't set, do something potentially expensive, e.g.: git status --porcelain | perl -ne 'exit(1) if /^ /; exit(2) if /^[?]/' case "$?" in # handle all the normal cases ... # but also add a case for exit due to SIGINT "130" ) _dumb_prompt=1 ;; esac else # in this case the user asked the prompt to be dumbed down ... fi } # helper commands to explicitly change the setting: dumb_prompt () { _dumb_prompt=1 } smart_prompt () { unset _dumb_prompt }
If the prompt is taking too long to show up I simply hit ^C and my $PROMPT_COMMAND becomes a quicker dumbed down version for the current session.
2 comments:
Maybe you should add a sigalarm to time it out for you :)
--awwaiid
I actually tried that initially, every combination of ulimit, trap, bash job control, i could think of, before I realized this is much simpler *and* more usable.
Post a Comment