I'm trying to simulate GNU Screen's shelltitle feature in tmux. I have the following in my ~/.bashrc:

if [[ "$TERM" == screen* ]]; then

PS1="\n\w ${SCREEN_ESC}$ "

and the following in my ~/.screenrc:

shelltitle        "$ |bash"

Setting shelltitle makes GNU Screen search for a newline in the shell and strip away all the characters from $PS1 upto the escape character, and replace it with the first word found after that. This is more clearly explained in the man page:

Here's how it works: you must modify your shell prompt to output a null title-escape-sequence (<esc>k<esc>) as a part of your prompt. The last part of your prompt must be the same as the string you specified for the search portion of the title. Once this is set up, screen will use the title-escape-sequence to clear the previous command name and get ready for the next command. Then, when a newline is received from the shell, a search is made for the end of the prompt. If found, it will grab the first word after the matched string and use it as the command name. If the command name begins with either '!', '%', or '^' screen will use the first word on the following line (if found) in preference to the just- found name.

This is different from tmux's set-option -g set-titles on which only captures the process name. So a Python script script.py would be titled as script.py in Screen (which is the way I want it) whereas, it would be titled as python in tmux (which I don't want.)

I know that one can rename tmux windows by:

printf '\033kWINDOW_NAME\033\\'

So I was wondering if there is some way I can alternatively let tmux know that I've entered a new command. If there is some way I can get the last command entered, I could use Bash's PROMPT_COMMAND to do this. Any ideas?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.