Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

How can I put the current running process name into a GNOME Terminal tab title (or title bar when there's only one tab)?

-- UPDATE --

To clarify, I want the tab title to update when I run a process, for example:

# title is currently "bash"
$ find / -name foo # while searching for foo, title is "find"
$ # title is once again "bash"
$ less /proc/cpuinfo # title changes to "less"
$ man ls # title changes to man
$ # title returns to "bash"
share|improve this question

4 Answers 4

up vote 6 down vote accepted

Found it. This site provides a good explanation of a solution.
In your bashrc, it would look like:

case "$TERM" in
xterm*|rxvt*)
    set -o functrace
    trap 'echo -ne "\e]0;$BASH_COMMAND\007"' DEBUG
    PS1="\e]0;\s\007$PS1"
    ;;
*)
    ;;
esac

Personally, I don't think I would add it to my bashrc, because the DEBUG combined with trace does throw out a load of garbage when all your shell starts. If you can live with that, it actually does work. It does display the entire command, however, not just the first word.

share|improve this answer
1  
Thanks for putting in the effort on this one! –  adurity Sep 21 '09 at 5:09
2  
Thank you for asking a good question. This looked like a simple question at first... After the first 10 minutes, it was starting to drive me nuts! That's why I thought it was a good question - sounds simple, but forced me to learn something deeper about the interaction between the shell, the terminal and signals. –  DaveParillo Sep 21 '09 at 17:10

The below should work. I have the function in a .bash_functions file, and source it in the .bashrc file before setting $PROMPT_COMMAND.

function term_title
{
        history 1 | awk '{print $2}';
}

PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'
share|improve this answer
1  
You're close, but I don't have much better. This will give you the last executed command, but not really what adurity is after. I thought just changing term_title to : ` if [ jobs ]; then history 1 | awk '{print $2}'; else echo -ne 'bash em' fi` would work, but it's inconsistent about catching processes with short lifetimes and it still doesn't switch back when the process is finished. I don't know about the innerworkings of xterm to know how to mess with those triggers/ events. –  DaveParillo Sep 18 '09 at 1:21
    
bash executes $PROMPT_COMMAND just before displaying the prompt, so this is the best I can do with this approach. There might be other triggers that can execute right after you hit Enter, but I don't know of them. –  nagul Sep 18 '09 at 8:01

in zsh you just define your 'precmd' function. see here.

share|improve this answer

Well, since everyone already seems to know David Pashley's solution I'm kind of surprised it took me so long to find this one because it's almost as old.

This solution actually takes care of bash-completion spamming garbage.

To be clear: I did nothing on my own here but research. All credit goes to Marius Gedminas.

This works perfectly for me with Gnome-Terminal/Terminator

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

    # Show the currently running command in the terminal title:
    # http://www.davidpashley.com/articles/xterm-titles-with-bash.html
    show_command_in_title_bar()
    {
        case "$BASH_COMMAND" in
            *\033]0*)
                # The command is trying to set the title bar as well;
                # this is most likely the execution of $PROMPT_COMMAND.
                # In any case nested escapes confuse the terminal, so don't
                # output them.
                ;;
            *)
                echo -ne "\033]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}\007"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG
    ;;
*)
    ;;
esac

Also this is a cross-post because I just found out about it and wanted to share and I think it's useful here as well.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.