Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I am running the latest version of tmux (from the git repository) and xclip (0.12), and I would like to be able to use Emacs-like keyboard bindings to move around the text in copy-mode, copy (M-w) selections to the clipboard, and paste (C-y) from/to the copy buffer to the clipboard.

So far I have been able to paste text with C-y, and move around in copy-mode with Emacs-like keyboard bindings, but I am still unable to copy text from a tmux buffer (e.g. in copy-mode)

I found this thread for copying the entire buffer to the clipboard (and viceversa), but it does not seem to be working for me.

Also, in the tmux-users mail list I was told that recent versions of tmux (only in the git repo) provide a command called copy-pipe. The man page says the following about this command:

One command in accepts an argument, copy-pipe, which copies the selection and pipes it to a command. For example the following will bind ‘C-q’ to copy the selection into /tmp as well as the paste buffer:

       bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"

It looks like copy-pype is meant to be used in part to pipe the selection to another command. There also seem to be some typos in this description and in the command (what is temacs-copy?)

Either way, what I would like to do is:

Copying:

  1. Enter copy mode
  2. Move to the text I want to copy using Emacs navigation commands (i.e. C-f,C-b, M-f, M-b, C-a, C-e etc. to move the cursor). No prefix for any of these.
  3. Copy the selected text into the clipboard with: M-w (no prefix either)

Pasting:

  1. I would like to be able to type C-y (without having to enter copy-mode) to paste text in the terminal (no prefix either)

I have tried the following for copying without luck:

bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard" 

However, pasting works great:

bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

The odd thing is that I know that the "xclip -i -selection clipboard" part of the copy command above works well, since I can copy things to the clipboard in the command line, e.g.:

echo "Hello world. How are you?" | xclip -i -selection clipboard

With all this, how can I copy a selection from copy mode to the clipboard?

share|improve this question

2 Answers 2

up vote 5 down vote accepted

Use the following tmux.conf with copy-pipe in the new versions of tmux (1.8+):

# To copy:
bind-key -n -t emacs-copy M-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "

# To paste:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
share|improve this answer
    
Works fine. Thanks @josh –  Jaseem Dec 5 '13 at 16:36
    
This answer deserves more upvotes, it's the best for Linux-based setups. –  Baboon Mar 20 at 13:47

The -temacs-copy is not a typo. The leading dash means that this is an option to the bind-keys command (along with an argument for the option). It is equivalent to -t emacs-copy, if you like that better.

Copy mode uses a different set of bindings and commands1 than the “normal mode”. The copy-pipe command is only available in the alternate “mode” bindings tables. When mode-keys is emacs, copy mode will use the emacs-copy table, so you need to bind M-w to copy-pipe in the that table.

bind-key -temacs-copy M-w copy-pipe "xclip -i -selection clipboard"

Be careful making too many “no prefix” bindings. They will make it difficult to type those bound keys to a program running inside tmux (e.g. when you want to type C-y to a tty-mode instance of Emacs running inside tmux). You can always (prefix) bind some key that does send-keys C-y, but that might make it more cumbersome to type if you need it often enough.


1 Only movement and editing commands are available. With the exception of copy-pipe, these commands do not take any arguments (this is what the man page means with it says “One command in accepts an argument”; the “in” is probably a typo or an editing mistake).

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.