
tmux 1.8 Released - jterenzio
http://tmux.sourceforge.net/
======
danielweber
I love web pages like this. The top of it reads:

"tmux is a terminal multiplexer"

"What is a terminal multiplexer? It lets you switch easily between several
programs in one terminal, detach them (they keep running in the background)
and reattach them to a different terminal. And do a lot more. See the manual."

That's awesome. So many times someone posts on HN "CaffBook.ly.errr 0.98 now
released" and I have no idea what it is or why I would want it.

~~~
theDoug
I appreciated it too. I've heard tmux mentioned plenty of times but never with
a mention of what it is/does. That one line did it.

~~~
sprrlf
After years of using screen i switched to tmux.. i'm sure i'm not even using a
5th of the functionality but i love it.

~~~
jervisfm
What are the primary advantages that tmux has over GNU screen that you found ?

~~~
kokey
I'm also wondering about this. I've been using screen for almost 20 years, and
wonder if there's a compelling reason to switch.

~~~
elithrar
Take a look here: [http://unix.stackexchange.com/questions/549/tmux-vs-gnu-
scre...](http://unix.stackexchange.com/questions/549/tmux-vs-gnu-screen)

Some of it is arguable, but for me one of the greatest benefits is how tmux
will auto-resize to the smallest terminal connected, making it useful for
screen sharing or when connecting to an existing session from a mobile device.

------
jscheel
If you like tmux, also check out teamocil
(<https://github.com/remiprev/teamocil>) to really enhance your use. It
enables you to define tmux sessions via YAML, which is great for
programmatically setting up a complex dev session. Mine, for example, fires up
six panes in my preferred layout, and starts up a particular part of our
project in each pane.

~~~
kaens
I only glanced it over, but I'm having a hard time seeing the advantage of
this over shell scripts calling tmux commands.

~~~
remi
You could achieve the same thing with shell scripts, but one of teamocil’s
advantages is that it gives you the simplicity of YAML to build complex
layouts.

~~~
eridius
"simplicity of YAML"

Spoken like someone who's never actually looked into how complex YAML can be.

~~~
kaens
I don't see how someone could possibly write a tool like this without being
aware of YAMLs potential complexity.

Well, I suppose it's possible, but it seems extremely unlikely.

~~~
zurn
These days it's very easy to use a simple api without knowing about the
dragons lurking beneath the surface. Flip side of our "reusable components"
holy grail.

------
AlexanderDhoore
Tmux + Vim = Pure Awesome.

I use vim-slime[1] to send strings to other panes in tmux. I never type
anything directly into a REPL. I just send my code from Vim to it. It's
amazing with lisp or python. (A little less amazing with php, as the php repl
IS AWEFUL)

[1] <https://github.com/jpalardy/vim-slime>

~~~
iron_ball
Ruby users may also be interested in adding pry to that setup:
[http://www.alanmacdougall.com/blog/2012/03/27/using-vim-
slim...](http://www.alanmacdougall.com/blog/2012/03/27/using-vim-slime-with-
pry-for-repl-perfection/) (disclosure: my own blog)

------
cturner
I realise you can rebind them, but both screen and tmux do themselves a
disservice by choosing binding keys which overlap with prominent keys in emacs
and for users who use emacs mode in their shell.

First impressions count.

If you want to configure tmux to use just a backtick as the escape, create
~/.tmux.conf

    
    
        unbind C-b
        set -g prefix `
        bind-key ` send-prefix
    

When you need to type a backtick just press it twice.

For screen, I used to do this:

    
    
        escape ``
    

.. in ~/.screenrc, but I've just tried it and it seems that there's now no
easy way to type a backtick when you need one.

Query: in screen I can switch between two buffers by doing ctrl+a, ctrl+a.
This doesn't work in tmux. How do I configure this to work in tmux?

~~~
cbsmith
Emacs users should be using Emacs as their terminal multiplexer...

~~~
reedlaw
Could you elaborate? I'd love to try that.

~~~
merlincorey
; Open a terminal

M-x ansi-term

; Rename the buffer (escaping shell mode first)

C-c C-j M-x rename-buffer

; Shell responds to keyboard again

C-c C-k

; Split window in half horizontally

C-x 2

\-----

I stole this (possibly from Steve Yegge or another source) long ago to
somewhat automate the process of renaming terminal buffers:

    
    
      (global-set-key (kbd "<f2>") 'visit-ansi-term)
    
      ;; Terminal awesomeness
      (require 'term)
      (defun visit-ansi-term ()
        "If the current buffer is:
           1) a running ansi-term named *ansi-term*, rename it.
           2) a stopped ansi-term, kill it and create a new one.
           3) a non ansi-term, go to an already running ansi-term
              or start a new one while killing a defunt one"
        (interactive)
        (let ((is-term (string= "term-mode" major-mode))
              (is-running (term-check-proc (buffer-name)))
              (term-cmd "/usr/local/bin/zsh")
              (anon-term (get-buffer "*ansi-term*")))
          (if is-term
              (if is-running
                  (if (string= "*ansi-term*" (buffer-name))
                      (call-interactively 'rename-buffer)
                    (if anon-term
                        (switch-to-buffer "*ansi-term*")
                      (ansi-term term-cmd)))
                (kill-buffer (buffer-name))
                (ansi-term term-cmd))
            (if anon-term
                (if (term-check-proc "*ansi-term*")
                    (switch-to-buffer "*ansi-term*")
                  (kill-buffer "*ansi-term*")
                  (ansi-term term-cmd))
              (ansi-term term-cmd)))))

~~~
abecedarius
Hey, I found that code hard to follow, with the if-then-elses nested 4 deep. A
refactor, pretty much untested since I don't use ansi-term:

    
    
        (defun visit-ansi-term ()
          "If the current buffer is:
             1) a running ansi-term named *ansi-term*, rename it.
             2) a stopped ansi-term, kill it and create a new one.
             3) a non ansi-term, go to an already running ansi-term
                or start a new one while killing a defunct one."
          (interactive)
          (let ((is-term      (string= "term-mode" major-mode))
                (is-ansi-term (string= "*ansi-term*" (buffer-name)))
                (is-running   (term-check-proc (buffer-name)))
                (anon-term    (get-buffer "*ansi-term*")))
            (cond
             ((and is-term is-running is-ansi-term)
              (call-interactively 'rename-buffer))
             ((and anon-term (if is-term
                                 (and is-running (not is-ansi-term))
                               (term-check-proc "*ansi-term*")))
              (switch-to-buffer "*ansi-term*"))
             (t
              (cond ((and is-term (not is-running))
                     (kill-buffer (buffer-name)))
                    ((and anon-term (not (term-check-proc "*ansi-term*")))
                     (kill-buffer "*ansi-term*")))
              (ansi-term "/usr/local/bin/zsh")))))

------
jterenzio
Changelog: [http://sourceforge.net/p/tmux/tmux-
code/ci/master/tree/CHANG...](http://sourceforge.net/p/tmux/tmux-
code/ci/master/tree/CHANGES)

~~~
esamatti
My favorite "resize-pane learnt '-Z' for zooming a pane temporarily."

~~~
jterenzio
"ctrl-[prefix] z" toggles zooming in on a pane now, this is awesome!!!

------
javanix
Changelog:

[http://sourceforge.net/p/tmux/tmux-
code/ci/1b083aa0fd2d8ac00...](http://sourceforge.net/p/tmux/tmux-
code/ci/1b083aa0fd2d8ac000504488135bf58e35c3361e/tree/CHANGES)

------
Cthulhu_
I want to like tmux, I really do, but my main gripes are scrolling in panes
with the scroll wheel and selecting / copy/pasting text. iTerm (osx) or
Terminator (linux) handle that much better, although I admit they can't really
be compared technology-wise.

Alternatively, I never figured out how to select / copy text just as fast in
tmux / vim / etc as with the mouse.

~~~
zaius
Add these to your ~/.tmux.conf

    
    
        setw -g mode-mouse on
        setw -g mouse-select-window on
        setw -g mouse-select-pane on
        setw -g mouse-resize-pane on
    

Then you can scroll in panes, but also select like normal by holding
alt/option.

------
VaucGiaps
Incompatible Changes ====================

* layout redo/undo has been removed.

Normal Changes ==============

* Add halfpage up/down bindings to copy mode.

* Session choosing fixed to work with unattached sessions.

* New window options window-status-last-{attr,bg,fg} to denote the last window which was active.

* Scrolling in copy-mode now scrolls the region without moving the mouse cursor.

* run-shell learnt '-t' to specify the pane to use when displaying output.

* Support for middle-click pasting.

* choose-tree learns '-u' to start uncollapsed.

* select-window learnt '-T' to toggle to the last window if it's already current.

* New session option 'assume-paste-time' for pasting text versus key-binding actions.

* choose-* commands now work outside of an attached client.

* Aliases are now shown for list-commands command.

* Status learns about formats.

* Free-form options can be set with set-option if prepended with an '@' sign.

* capture-pane learnt '-p' to send to stdout, and '-e' for capturing escape sequences, and '-a' to capture the alternate screen, and '-P' to dump pending output.

* Many new formats added (client_session, client_last_session, etc.)

* Control mode, which is a way for a client to send tmux commands. Currently more useful to users of iterm2.

* resize-pane learnt '-x' and '-y' for absolute pane sizing.

* Config file loading now reports errors from all files which are loaded via the 'source-file' command.

* 'copy-pipe' mode command to copy selection and pipe the selection to a command.

* Panes can now emit focus notifications for certain applications which use those.

* run-shell and if-shell now accept formats.

* resize-pane learnt '-Z' for zooming a pane temporarily.

* new-session learnt '-A' to make it behave like attach-session.

* set-option learnt '-o' to prevent setting an option which is already set.

* capture-pane and show-options learns '-q' to silence errors.

* New command 'wait-for' which blocks a client until woken up again.

* Resizing panes will now reflow the text inside them.

* Lots and lots of bug fixes, fixing memory-leaks, etc.

* Various manpage improvements.

~~~
sethish
> * Resizing panes will now reflow the text inside them.

This is all I needed to know to upgrade.

------
sasvari
Here [0] is a nice introduction to the newly introduced _zoomed panes_ feature
in tmux 1.8 by Tom Ryder.

[0] <http://blog.sanctum.geek.nz/zooming-tmux-panes/>

~~~
gfodor
neat. this was the one feature i missed from xmonad!

------
thelarry
Should i finally switch from screens to tmux?

~~~
cake
I switched from screen to tmux to screen back again.

tmux _seemed_ slower while switching windows, plus I like the simplicity of
screen.

~~~
pyre
I was a heavy screen user for years, and 'simple' is not what I would use to
describe screen.

------
Sikul
Does anyone know where to find a good introduction to tmux?

I attempted to start using it a couple of weekends ago but wasn't able to find
any good documentation with my google-fu.

~~~
dktbs
It costs $ but I really liked this pragprog book:

<http://pragprog.com/book/bhtmux/tmux>

Really good introduction, and the included config file is a good start.

~~~
mrbill
And the book is $7.20 on Amazon for the Kindle, FYI. I just bought it (versus
$14something @ pragprog)

~~~
bphogan
Author here. I know it's better for you to get the book cheaper, but PragProg
gives authors 50% royalty on the sale of the book. If you buy it from
pragprog, I get more in my pocket than if you buy from Amazon.

Either way, thanks for reading. I hope it's enjoyable. Some minor updates are
coming to the book too.

------
bjliu
<http://www.tenshu.net/p/terminator.html> kinda like this...

~~~
andyl
With terminator, you can have a windowing editor (vim) inside a windowing
session manager (tmux) inside a windowing terminal (terminator).

Inception!

~~~
qznc
... inside a window manager (compiz) inside a nested x session (Xnest) inside
a virtual machine (VirtualBox) inside a chroot.

------
luser001
Anybody know if it's possible to move between terminal windows (panes in tmux
lingo) "clockwise" and "anti-clockwise"?

~~~
srbravo1
AFAIK there are tmux 'windows' which are like tabs and 'panes' which are
vertical and horizontal splits in 1 tmux window

but assuming you mean 'panes', it seems you can:

Ctrl-b o

to move around the current window's panes clockwise. Although I prefer
inputing a given direction like the other replier suggested with arrow keys.

For me moving between windows and panes is something that I do a lot. So much
so that I removed the need to use the 'tmux prefix' to do so. In my
~/.tmux.conf I have for window and pane switching:

# set pane switching with <alt>{U, E, N, I} for up, down, left, right and
respectively without needing prefix

bind -n M-N select-pane -L

bind -n M-I select-pane -R

bind -n M-U select-pane -U

bind -n M-E select-pane -D

# set window switching without needing prefix

bind -n M-a select-window -t :1

bind -n M-r select-window -t :2

bind -n M-s select-window -t :3

bind -n M-t select-window -t :4

bind -n M-d select-window -t :5

bind -n M-h select-window -t :6

You can just replace the keybindings I chose like M-a (alt-a) to something
that works for you. If you want to keep using a prefix (incase you are worried
the keybindings will clash with other program/system bindings), remove the
'-n' flag. Hope that helps.

If it doesn't here is a tutorial I found from a google search:
[http://blog.hawkhost.com/2010/06/28/tmux-the-terminal-
multip...](http://blog.hawkhost.com/2010/06/28/tmux-the-terminal-multiplexer/)

and IMO a really good book on Tmux if you decide to dive in more:
[http://www.amazon.com/tmux-Productive-Mouse-Free-
Development...](http://www.amazon.com/tmux-Productive-Mouse-Free-Development-
ebook/dp/B00A4I3ZVY/ref=sr_1_1?ie=UTF8&qid=1364581708&sr=8-1&keywords=tmux)

~~~
luser001
Thanks. Yes, I meant panes.

I also did the thing to get rid of the tmux prefix for pane switching. But
since I don't use the function keys, I mapped keys F1 through F9 to various
tmux functions. F1 = next pane, F2 = prev pane. One less key to press. :)

~~~
srbravo1
cool! Hehe, ya, one less key to press FTW! :D

------
ludwig
For what it's worth, here is my carefully crafted ~/.tmux.conf file. I was
used to screen, so I carried most of the keybindings along when I switched to
tmux.

<https://github.com/ludwig/dotfiles/blob/master/tmux.conf>

------
alepper
Two things I missed from screen last I tried tmux: an equivalent of 'screen
-xRR' and an orthogonality between terminals and windows so that distinct
terminals connected to one session can display different windows. Especially
the latter of these is integral to my workflow.

------
mcrittenden
Is there any compelling reason to use tmux if you're already using a tiling
window manager?

~~~
andyl
Detached sessions on remote systems.

~~~
oftenwrong
If that is the only reason, one could just use dtach instead.

<http://dtach.sourceforge.net/>

------
srik
tmux status bars are customizable(no surprises there I guess) and the
powerline is one of the nicer status bar arrangements -
<https://github.com/erikw/tmux-powerline>

------
s00pcan
'copy-pipe' mode command to copy selection and pipe the selection to a
command.

This is exactly the functionality I was looking for back when it didn't exist.
It wasn't immediately obvious how to use this, but here's how:

bind-key -t vi-copy 'y' copy-pipe "redis-cli -x set status"

set-option -g status-right '#(redis-cli --raw get status)'

And now I have a message I just copied to redis in my tmux status bar. I'm
planning on doing this with clipboard text next.

------
irahul
If you are moving from screen to tmux, it's very easy to configure tmux to
behave like screen. Also, for split panes, I like vim bindings('C-a l' for
left pane, 'C-a r' for right pane, 'C-a <' for resize pane...). I have
bindings for copying tmux buffer to and from clipboard(needs xclip).

<https://gist.github.com/rahulkmr/5275679>

------
akurilin
Don't know if I'm the only one in this boat, but I often feel pretty
conflicted about upgrading to a newer version of a tool where I have had a lot
of configuration and shortcuts defined for ages. If any of them break, you'll
have to go back and dig through the arcane tmux config file, figure out what
changed.

------
ZeWaren
For the lulz I use neercs. It's the same as screen and tmux, except you get
thumbnails of your panes in some kind of taskbar; and most importantly, you
can switch between panes with a cube ascii animation, compiz style.

<http://caca.zoy.org/wiki/neercs>

------
q_revert
the new choose-tree commmand is superb, for anyone who regularly uses tmux and
already understands how great it is, you should consider upgrading for this
alone..

with several sessions running on most of my machines, i frequently found
myself `detaching` and `reattaching` to a different session... as the `choose-
session` command gives you a full list of all the windows, which tends to
obfuscate exactly what's going on, particularly if you have a bunch of
sessions and windows..

however, the `choose-tree` gives you a session tree, which you can expand and
easily identify... meaning that instead of sending `^a d`, followed by tmux
attach sessionname you can comfortably do a `^a s` and get where you want to
be (presuming you've remapped ^b to ^a)

also, you should be using the tmux buffers, `^a =`!

------
snitko
One thing that I really want is the ability to set different background colors
for panes and windows. Sadly, it is a feature of a terminal app, not tmux. One
can only imagine tmux would integrate tightly with various terminal
applications to accomplish that.

------
eslaught
Does this release have better performance than previous releases? I enjoy
using tmux, but for some applications (i.e. with large amounts of text spewing
to the console) it just hasn't (historically) performed as well as GNU screen.

------
n0mad01
i've switched from tmux to screen to byobu ( which is a wrapper for screen )
because of its simplicity. screen also has very little problems, with tmux i
always had time costly issues.

------
Keyneston
Anyone know if it is possible to do single combination keybindings? Currently
all of the keybindings are things like 'Ctrl+W L', whereas I'd like to do
things like 'Command+L'?

~~~
bphogan
If you use bind-key -n C-f some-tmux-command it'll bind directly to Contrl-f.
The -n means no prefix. I don't know how you'd make tmux recognize the Mac's
command key though.

------
christiangenco
To install/update on a mac, install Homebrew[1] and run `brew install tmux`.

1\. <http://mxcl.github.com/homebrew/>

------
andyana
id love zmodem support... but I'm probably the only one that uses it

~~~
cnvogel
Yes, that† and the possibility to directly connect to a serial port (like
screen does). Would be a huge time-saver for the embedded folks.

†) or rather not builtin zmodem-support but generic "run this program with
stdin/stdout connected directly to the device" like cu's ~+ escape.

------
sunyc
i suggest new commer give byobu a try, a wrapper of tmux.

~~~
n0mad01
its actually a wrapper for screen as also for tmux, the standard ubuntu
package uses screen.

byobu is really recommended because its simple to use yet powerfull.

<http://en.wikipedia.org/wiki/Byobu_(software)>

------
nachteilig
tmux has been a great recent upgrade for me -- switched from a bunch of nested
screens. really highly recommended.

------
alinspired
pracically - how is it different form screen ?

------
andyl
What is the simplest way to install tmux 1.8 on Ubuntu 12.04?? Running `sudo
apt-get install tmux` puts tmux 1.6 on my system...

~~~
pkrumins

        pushd /tmp && \
        wget 'http://downloads.sourceforge.net/project/tmux/tmux/tmux-1.8/tmux-1.8.tar.gz?r=http%3A%2F%2Ftmux.sourceforge.net%2F&ts=1364579710&use_mirror=garr' && \
        gunzip < tmux-1.8.tar.gz | tar -vx && \
        cd tmux-1.8 && \
        ./configure --prefix=~/installs/tmux-1.8 && \
        mkdir ~/installs && \
        make && \
        make install && \
        popd

~~~
paulsmith
A simple `tar -xvf` can replace the separate `gunzip` and `tar` processes.

~~~
pkrumins
Do you mean `tar -xzvf`?

~~~
atsaloli
Yes, formally. You don't have to specify -z in GNU tar today, you can just say
-x and it'll add -z or -j for you -- it figures out on the fly if the
archive's been compressed and how. Very convenient.

~~~
dminor
You can also leave off the dash: `tar xvf`

~~~
riquito
And you may skip verbose too: `tar xf`

