For me, the two killer features that made me switch were the vertical splits (vanilla screen only does horizontal splits), and the distinction between windows and panes.
If it helps anyone else, here's my ~/.tmux.conf file[1], with keybindings that match closely to the screen setup I've grown so accustomed to.
[1] http://github.com/ludwig/dotfiles/blob/master/.tmux.conf
1. The defaults are sane (altscreen is on by default, emacs keys in copy mode by default, no stupid "wuff wuff" covering up my prompt, history is 2000 lines instead screen's almost useless 100).
2. Screen sometimes interacts badly with Terminal.app on my mac. I can't run aptitude from within screen on my mac without it randomly switching to graphic charset mode. Also running emacs inside screen sometime results in the arrow keys not working.
I like it so far. I think I'll switch for a while and see how it goes...
startup_message off
defscrollback 10000
I recently switched to tmux and after several weeks of testig it out I think I'm going to make the change permanent.
It is actively being developed (screen is currently stagnant), it has a much greater scripting capability, it is rock solid, its region-splitting capabilities is hugely better than screen's (that is the single reason I switched to tmux initially).
On the con side: it seems you have to use the metakey to enable the scrollback buffer. I really hate that, but now I've used it for a while I'm used to it and it is not as annoying as it was at first. (I'm always using 'ls' in a terminal and I invariably want to scroll up to see the first few entries. With screen I could just shift-PgUp, with tmux I do ctrl-A, PgUp. It's ok.)
Other than those things, tmux seems to do everything screen can do in terms of resuming sessions and so on.
The enhanced region splitting makes it superior for my use, so I will stick with tmux.
Has anybody benefited from using tmux with emacs? Or, when in emacs, is running tmux too overkill?
A useful trick is to ssh to a remote machine and start a screen session on the remote machine. Then you can start long-running jobs on the remote machine, detach, turn your local machine off, come back later, and ssh and re-attach to check on progress.
I assume tmux and similar screen-like programs can all do this.
"dtach is a tiny program that emulates the detach feature of screen, allowing you to run a program in an environment that is protected from the controlling terminal and attach to it later. dtach does not keep track of the contents of the screen, and thus works best with programs that know how to redraw themselves."
"dtach does not, however, have the other features of screen, such as its support of multiple terminals or its terminal emulation support. This makes dtach extremely tiny compared to screen, making it more easily audited for bugs and security holes, and also allows it to fit in environments where space is limited, such as on rescue disks. "
It's a user-friendly screen wrapper with intelligent defaults (key shortcuts and tab indicators with the title of the screen session inside them) and a myriad of status indicators for the bottom of your screen
http://blog.hawkhost.com/2010/07/02/tmux-%E2%80%93-the-termi...
If you don't know what reflowing text means, run tmux, get some output on the terminal (say from `ls` or something), and then split the window. You'll notice that your output gets cut off. reflow is a terminal wrapper that reformats the text when the terminal is resized.
At the moment it's still really early in its development, but it's working on all the systems I've tested it on. I'm considering adding better scroll-back support, more customization and possibly using the Knuth reflowing algorithm.
tmux advantages: much better default setup than screen. Ships by default with OpenBSD. Ctrl-B key doesn't conflict with as many default keystrokes as screen's Ctrl-A.
* start tmux from ~/project1: windows created all start in path ~/project1
* start tmux from ~/project2: first window has path ~/project2 but subsequent windows have path ~/project1
haven't had time though to check if this is a (known) bug