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.

I'm new to tmux, and I'm having trouble finding a solution to resizing my actual terminal (I haven't learned quite enough about panes and windows yet).

I'm running tmux1.6, and bash as my shell, on ubuntu12.04. bash has a builtin function resize which seems to work outside of tmux just fine.

% resize -s 50 80

resizes the terminal to 80 characters wide and 50 lines tall. However, when I try to run this exact command inside a tmux pane, it hangs after I hit enter, until I hit any key, and then responds

"resize: unknown character, exiting" 

which is a bit opaque to me. Now, I don't need to use the resize function per se, but how can I, through a command (built in or scripted), physically resize the terminal that is displaying my tmux windows? The use case for this is that when I decide to open a new vertical pane, both of which contain code, I want my terminal to be an exact number of characters wide (2 panes = 161 characters, 80 for each and 1 for the dividing line, for example). Resizing with the mouse is not only tedious; my ubuntu doesn't display the width while I'm resizing.

Any help is appreciated, thanks!

share|improve this question

1 Answer 1

It seems that tmux isn't letting the escape characters through.

I filed a bug report on the tmux bug-tracker - so hopefully it can be fixed: http://sourceforge.net/p/tmux/tickets/88/

-- edit: added workaround --

It seems you can force tmux to let specific escape command through: You can use printf '\033Ptmux;whatever\033' but you need to double up \033.

So I wrote a small bash function (put it in your .bashrc or .bash_profile), that tests if your are inside of tmux and prints out the escape codes (tested in xterm, Apple Terminal and iTerm):

 function resimux {                                                                                                                                                           
     if [ ! -z "$TMUX" ]; then
         printf '\ePtmux;\e\e[8;%i;%it\e\' $1 $2
     else
         printf '\e[8;%i;%it' $1 $2
     fi
 }

Then you can call it like this:

 resimux 50 80

The resize escape sequence is send to all connected terminals.

Voila.

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.