How to rename terminal tab title in gnome-terminal?

Used to be able to right click on the tab and change the title. Not sure how to do this anymore. Just upgraded to Fedora 21.

EDIT: I have switched from gnome-terminal to ROXterm

Contents hide
Usage examples: Static title strings (title remains fixed): set-title my tab 1 OR set-title "my tab 1" set-title $PWD OR set-title "$PWD" Dynamic title strings (title updates each time you enter any terminal command): you may use function calls or variables within your title string and have them dynamically updated each time you enter a new command. Simply enter a command or access a global variable inside your title string. Be sure to use single quotes around the title string for this to work!: set-title '$PWD' – this updates the title to the Present Working Directory every time you cd to a new directory! set-title '$(date "+%m/%d/%Y - %k:%M:%S")' – this updates the title to the new date and time every time it changes and you enter a new terminal command! The format looks like this: 02/06/2020 - 23:32:58 Related: https://askubuntu.com/questions/315408/open-terminal-with-multiple-tabs-and-execute-application/1026563#1026563 My dotfiles (config files, scripts, & generic user settings): https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles Main References: [my question] https://askubuntu.com/questions/1310665/how-to-replace-terminal-title-using-sed-in-ps1-prompt-string How to rename terminal tab title in gnome-terminal? https://wiki.archlinux.org/index.php/Bash/Prompt_customization#Customizing_the_terminal_window_title https://www.thegeekstuff.com/2008/09/bash-shell-take-control-of-ps1-ps2-ps3-ps4-and-prompt_command/ Why is bash’s prompt variable called PS1? Bash Reference Manual: https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html Method 5

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Create a function in ~/.bashrc:

function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="[e]2;$*a]"
  PS1=${ORIG}${TITLE}
}

Then use your new command to set the terminal title. It works with spaces in the name too

set-title my new tab title

It is possible to subsequently use set-title again (original PS1 is preserved as ORIG).

Method 2

The user title code was removed1 from gnome-terminal 3.14. To set the title, you could use an escape sequence:

printf "e]2;YOUR TITLE GOES HEREa"

or e.g. with bash:

PROMPT_COMMAND='echo -ne "33]0;YOUR TITLE GOES HERE07"'

1: see gnome bug 724110 and gnome bug 740188.

Method 3

New versions of gnome-terminal just thrown away most helpful professional features. 🙁

I have tried to setup and get an older version of gnome-terminal running and also compared alternatives.

If terminator is too exotic for you, the mate-terminal is a great option! It is a fork of gnome-terminal and just keeps all the good features:

  • you can open multiple tabs from the command line giving them different titles
    mate-terminal --tab -t "aaa" --tab -t "bbb" --tab -t "ccc"
  • you can set up a keyboard shortcut (I use Ctrl+Shift-i) to set a title

Method 4

My new script as of March 2021:

I have a new version of the “set title” function now. For the latest version of it, search my ~/.bash_aliases file somewhere around here. Here’s what it might look like. It has a -h help menu now, and instead of relying on a backup of the PS1 variable the first time you run it, which is finicky, it simply uses the sed ‘s’tream ‘ed’itor command and a regular expression to strip the existing title string from the PS1 variable instead.

gs_set_title() {
    CMD="gs_set_title"
    # Help menu
    if [ "$1" == "-h" ] || [ "$1" == "-?" ]; then
        echo "Set the title of your currently-opened terminal tab."
        echo "Usage:   $CMD any title you want"
        echo "   OR:   $CMD "any title you want""
        echo "   OR (to make a dynamic title which relies on variables or functions):"
        echo "         $CMD '$(some_cmd)'"
        echo "     OR  $CMD '${SOME_VARIABLE}'"
        echo "Examples:"
        echo "         1. static title"
        echo "           $CMD my new title"
        echo "         2. dynamic title"
        echo "           $CMD 'Current Directory is "$PWD"'"
        echo "       OR  $CMD 'Date and time of last cmd is "$(date)"'"
        return $EXIT_SUCCESS
    fi

    TITLE="[email protected]"
    # Set the PS1 title escape sequence; see "Customizing the terminal window title" here:
    # https://wiki.archlinux.org/index.php/Bash/Prompt_customization#Customizing_the_terminal_window_title
    ESCAPED_TITLE="[e]2;${TITLE}a]"

    # Delete any existing title strings, if any, in the current PS1 variable. See my Q here:
    # https://askubuntu.com/questions/1310665/how-to-replace-terminal-title-using-sed-in-ps1-prompt-string
    PS1_NO_TITLE="$(echo "$PS1" | sed 's|\[\e]2;.*\a\]||g')"
    PS1="${PS1_NO_TITLE}${ESCAPED_TITLE}"
}

Original answer:

@Weston Ganger wrote this function (and posted it here) to put into ~/.bashrc:

function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="[e]2;$*a]"
  PS1=${ORIG}${TITLE}
}

You can then set a terminal title by calling set-title TERMINAL NAME (quotes around the name are optional).

It looked pretty mysterious to me (see my comments under his answer), so I spent a few hours last night reading and studying to figure out what the heck he had done and why it worked. Here’s what I found:

  1. As of gnome-terminal 3.16.2 or so (see comments under this answer), “the option --title is no longer supported.” Otherwise, you’d just do gnome-terminal --title="my title", like I used to do here.
  2. Per this answer here, and many comments all around this answer, you should be using [email protected] instead of $* to represent all input arguments in the script above. Apparently [email protected] is less bug-prone and more compatible, as it’s the POSIX way to represent “all input arguments”. Therefore, in my version below I use [email protected] instead of $*.
  3. It turns out that in nearly any terminal (so long as the given terminal supports it), there are ANSI escape codes, which are a form of “in-band signaling“, which can be used to set a terminal title. See the section titled “Customizing the terminal window title” in this most-excellent archlinux wiki here. The Bash escape sequence to set the terminal title looks like this: [e]2;new titlea], and to apply this title to your terminal window, all you have to do is modify its “Prompt String 1”, or PS1 variable, by adding this “set title” escape sequence after your current Prompt String 1, like this: PS1="${PS1}[e]2;new titlea]". Since gnome-terminal no longer supports the --title argument, this appears to be the only way to set the title anymore.

Now, here is my version of Weston Ganger’s function, with extensive explanatory comments. This will be going into my dotfiles so I never lose it:

# Set the title string at the top of your current terminal window or terminal window tab
set-title() {
    # If the length of string stored in variable `PS1_BAK` is zero...
    # - See `man test` to know that `-z` means "the length of STRING is zero"
    if [[ -z "$PS1_BAK" ]]; then
        # Back up your current Bash Prompt String 1 (`PS1`) into a global backup variable `PS1_BAK`
        PS1_BAK=$PS1 
    fi

    # Set the title escape sequence string with this format: `[e]2;new titlea]`
    # - See: https://wiki.archlinux.org/index.php/Bash/Prompt_customization#Customizing_the_terminal_window_title
    TITLE="[e]2;[email protected]a]"
    # Now append the escaped title string to the end of your original `PS1` string (`PS1_BAK`), and set your
    # new `PS1` string to this new value
    PS1=${PS1_BAK}${TITLE}
}

Usage examples:
  • Static title strings (title remains fixed):
    • set-title my tab 1 OR set-title "my tab 1"
    • set-title $PWD OR set-title "$PWD"
  • Dynamic title strings (title updates each time you enter any terminal command): you may use function calls or
    variables within your title string and have them dynamically updated each time you enter a new command.
    Simply enter a command or access a global variable inside your title string. Be sure to use single quotes
    around the title string for this to work!
    :
    • set-title '$PWD' – this updates the title to the Present Working Directory every time you cd to a new
      directory!
    • set-title '$(date "+%m/%d/%Y - %k:%M:%S")' – this updates the title to the new date and time every time
      it changes and you enter a new terminal command! The format looks like this: 02/06/2020 - 23:32:58

Related:
  1. https://askubuntu.com/questions/315408/open-terminal-with-multiple-tabs-and-execute-application/1026563#1026563
  2. My dotfiles (config files, scripts, & generic user settings): https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

Main References:
  1. [my question] https://askubuntu.com/questions/1310665/how-to-replace-terminal-title-using-sed-in-ps1-prompt-string
  2. How to rename terminal tab title in gnome-terminal?
  3. https://wiki.archlinux.org/index.php/Bash/Prompt_customization#Customizing_the_terminal_window_title
  4. https://www.thegeekstuff.com/2008/09/bash-shell-take-control-of-ps1-ps2-ps3-ps4-and-prompt_command/
  5. Why is bash’s prompt variable called PS1?
  6. Bash Reference Manual: https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html

Method 5

I had the same problem and found that no easy way to set tab title from right click of mouse (the way I and most of my colleagues are used to). It was so irritiating at the sametime :(. So in our case, the solution was to switch the terminal. So search for alternatives like sakura, etc and finally settled on xfce-terminal, use the below command to install it

sudo apt-get install xfce4-terminal

It provides profile and the command to right click and change tab name. All other features are similar to Gnome

Method 6

If you’re using Ubuntu 16.04 you may need to:

PS1=$
PROMPT_COMMAND=
echo -en "33]0;New titlea"

I list this an more info about it at link.

Method 7

put this in .bashrc:

function title() { 
  p1='echo -ne "33]0;' 
  p2='07"'
  <a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d080829f9d80848f939f9d9d919e94edf4a0e1f490">[email protected]</a>$p2 
  p1= 
  p2=
}

Method 8

When you run a resident program like top or ssh, the tab is properly labeled.

gnome-terminal --tab -e top -t "aaa" --tab -e top -t "bbb"

Method 9

For me -t parameter still works (gnome-terminal v3.36.1.1), but only while a command is executing:

gnome-terminal --tab -t browser-sync  -- npm run sync

so in the example above while browser-sync started by npm script is running – the title is there, and when it stopped.. then the tab is closed lol.
Well if you do just

gnome-terminal --tab -t my-title

without command – you will still see ‘my-title’ in tab header but for fraction of second only.

Method 10

As an expansion onto @Weston Ganger’s answer, if you want to automatically set a title upon opening a new Gnome terminal, then add this to the bottom of your ~/.bashrc:

if [ ! -z "$SET_TITLE" ]; then
    set-title $SET_TITLE;
    export SET_TITLE=;
fi

Then launch a terminal like:

gnome-terminal --tab -e 'bash -c "export SET_TITLE="my title"; bash -i"'

and it will automatically run set-title to apply the title.

Method 11

one line solution, add following line in your .bashrc

alias tab_name='read -p "Name to Assign:" tabname ;  printf "e]2;$tabnamea" '

now type tab_name in terminal i.e.

user:~$ tab_name  
Name to Assign: ( type desired name here! )

Done


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x