Unable to copy from tmux (2.4+) to the OS X clipboard

osxtmux

The following code used to work in my .tmux.conf:

# Mac OS X:
bind-key -n -t emacs-copy M-w copy-pipe "reattach-to-user-namespace pbcopy"

# Move tmux copy buffer into x clipboard
unbind-key M-w
bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard" \; display-message 'Copying to clipboard'

It stopped working just recently, so I can't copy text anymore from tmux to elsewhere. I am guessing this is the result of upgrading tmux or reattach-to-user-namespace.

I now get the following error:

invalid or unknown command: bind-key -n -t emacs-copy M-w copy-pipe 
"reattach-to-user-namespace pbcopy"

Here are the versions I am using (from brew).

/usr/local/Cellar/tmux/2.4/bin/tmux

/user/local/bin/reattach-to-user-namespace/2.5

What may have changed, and how can I go about restoring my ability to copy from tmux to the system?

Best Answer

Try the following instead:

bind-key -T copy-mode M-w send-keys -X copy-pipe 'reattach-to-user-namespace pbcopy'

Note that tmux recently changed key tables:

  • Key tables have undergone major changes. Mode key tables are no longer separate from the main key tables. All mode key tables have been removed, together with the -t flag to bind-key and unbind-key.

    The emacs-edit, vi-edit, emacs-choose and vi-choose tables have been replaced by fixed key bindings in the command prompt and choose modes. The mode-keys and status-keys options remain.

    The emacs-copy and vi-copy tables have been replaced by the copy-mode and copy-mode-vi tables. Commands are sent using the -X and -N flags to send-keys. So the following:

    bind -temacs-copy C-Up scroll-up bind -temacs-copy -R5 WheelUpPane scroll-up

    Becomes:

    bind -Tcopy-mode C-Up send -X scroll-up bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up

    This changes allows the full command parser (including command sequences) and command set to be used - for example, the normal command prompt with editing and history is now used for searching, jumping, and so on instead of a custom one. The default C-r binding is now:

    bind -Tcopy-mode C-r command-prompt -p'search up' "send -X search-backward '%%'"

    There are also some new commmands available with send -X, such as
    copy-pipe-and-cancel.

Related Question