I want to set the Xterm window title to switch between two states:
- When a command is running, show the command name (e.g. "less")
- When no command is running, show the current path (e.g. "src")
I can create an Xterm window title with the current path with:
$ export PROMPT_COMMAND='echo -ne "\033]0;`basename ${PWD}`\007"'
And I can show the current running command by adding a trap
statement to .bashrc
:
$ trap 'echo -ne "\033]0;$BASH_COMMAND\007"' DEBUG
But I'm not able to automatically switch between the two. Is it possible?
EDIT: @terdon shows a solution that works in a regular xterm, that's cool! But I failed to mention that I use the MacOSX Terminal.app. That shows still shows "bash" instead of the current path when no command is running. With a little tinkering I figured out how to solve this.
Best Answer
You can do this if you use a function that checks whether
$BASH_COMMAND
is set and prints your CWD if it is not. Add these lines to your~/.bashrc
:This will cause your terminal's name to be the currently running command (if there is one) or your current directory if there is not. Bear in mind that this will result in a slightly schizophrenic terminal if you run a long loop that runs a command many times. Try it with
while true; do echo foo; done
for example.If you are using
zsh
this is much easier to achieve (source) and it handles loops correctly: