Skip to content

Instantly share code, notes, and snippets.

@rodricels
Last active April 21, 2024 12:22
Show Gist options
  • Star 60 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save rodricels/7951c3bd505d343b07309b76188af9b3 to your computer and use it in GitHub Desktop.
Save rodricels/7951c3bd505d343b07309b76188af9b3 to your computer and use it in GitHub Desktop.
tmux configuration, mouse copy & paste added
# My tmux configuration, partly based on https://github.com/wbkang/wbk-stow/blob/master/tmux-config/.tmux.conf
# Scroll History
set -g history-limit 50000
# show messages for 4 seconds instead
set -g display-time 4000
# set first window to index 1 (not 0) to map more to the keyboard layout
set-option -g renumber-windows on
set -g base-index 1
setw -g pane-base-index 1
# Make mouse useful, tmux > 2.1 include select, resize pane/window and console wheel scroll
set -g mouse on
# Lower escape timing from 500ms to 50ms for quicker response to scroll-buffer access.
set -s escape-time 50
## Clipboard integration
# ctrl+c to send to clipboard
bind C-c run "tmux save-buffer - | xclip -i -sel clipboard"
# ctrl+v to paste from clipboard
bind C-v run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"
# Selection with mouse should copy to clipboard right away, in addition to the default action.
unbind -n -Tcopy-mode-vi MouseDragEnd1Pane
bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-selection-and-cancel\; run "tmux save-buffer - | xclip -i -sel clipboard > /dev/null"
# Middle click to paste from the clipboard
unbind-key MouseDown2Pane
bind-key -n MouseDown2Pane run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"
# Drag to re-order windows
bind-key -n MouseDrag1Status swap-window -t=
# Double click on the window list to open a new window
bind-key -n DoubleClick1Status new-window
@x3rAx
Copy link

x3rAx commented Feb 21, 2020

Hey @elijahgagne,

I could not get your improvement to work. When I copied something that ended in a semicolon, it would still eat the semicolon.

But thanks for the hint, who knows when this would have hit me ;)

While playing around, I also noticed, that when pasting something that starts with a minus (like --option) then it would paste the previous thing, whatever it was.

This led to the following solution:

bind-key -n MouseDown2Pane run "tmux set-buffer -- \"$(xclip -o -sel primary);\"; tmux paste-buffer -p"
                                                ^^                           ^                      ^^
                                                [1]                          [2]                    [3]

[1]: Stop parsing options. This prevents text starting with "-" to be interpreted as options.
[2]: Always insert a semicolon. The last semicolon is always cut away, so just add a dummy.
[3]: Paste bracket control codes. Allows for example pasting in vim normal mode.

@elijahgagne
Copy link

@x3rAx I agree my solution did not solve the semicolon issue. It always hits me pasting SQL statements in sqlplus. Thanks for sharing your update!

@stevencch99
Copy link

Thanks for sharing this. I borrowed lines 33-34 from you and changed them to:

unbind-key MouseDown2Pane
bind-key -n MouseDown2Pane run " \
  X=$(xclip -o -sel clipboard); \
  tmux set-buffer \"$X\"; \
  tmux paste-buffer -p; \
  tmux display-message 'pasted!' \
"

I was finding that when I pasted something that ended in a semicolon, the pasted content would be missing the semicolon. Above is preserving the semicolon for me.

It works for me on Ubuntu 20.04, thanks!

@chinglinwen
Copy link

chinglinwen commented Aug 6, 2020

thanks for sharing, finally found a way to restore right click to paste with mouse mode on with tmux version >2.1

# paste from right click
unbind-key MouseDown3Pane
bind-key -n MouseDown3Pane run " \
  X=$(xclip -o -sel clipboard); \
  tmux set-buffer \"$X\"; \
  tmux paste-buffer -p; \
  tmux display-message 'pasted!' \
"

PS: but I still can only make it paste from tmux's copy, not from other windows ( I'm using windows's chrome secure shell for ssh )

tried this too, same result with above

bind-key -n MouseDown3Pane run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"

@deadlysyn
Copy link

tyvm! i'm probably odd, but prefer "unified clipboard" (whether ctrl-* or mouse, do the same) so also found it useful that xclip lets you specify multiple select args...

xclip -se c -se p -i -r

@RolandWarburton
Copy link

Thank you for sharing this! Exactly solved my clipboard problems

@cygenb0ck
Copy link

thank you for sharing!

@simonalsa
Copy link

ty

@xiaolitongxue666
Copy link

In centos8 stream pre install xclip , this config work well , thanks a lot~!

@Anas-jaf
Copy link

thanks for sharing your configs

@jianhe-fun
Copy link

thanks. this is the one.

@vivekramaswamy
Copy link

Thanks a ton for this. I simply cut and pasted line 22 to 34. I am finally able to copy error messages from my terminal to browser.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment