1
0
mirror of https://github.com/samoshkin/tmux-config.git synced 2026-01-10 11:58:03 +00:00

Integration with clipboard: pbcopy, reattach-to-user-namespace, xclip, xsel, OSC 52 ANSI escape sequence

This commit is contained in:
Alexey Samoshkin
2017-11-24 14:29:38 +02:00
parent 5636f7a4dc
commit 59dbdbe52a
2 changed files with 92 additions and 7 deletions

View File

@@ -133,9 +133,9 @@ set -g visual-activity on
# set -g visual-bell on
# setw -g bell-action other
# ================================
# === Copy and scroll ===
# ================================
# ================================================
# === Copy mode, scroll and clipboard ===
# ================================================
# Prefer vi style key table
setw -g mode-keys vi
@@ -144,6 +144,7 @@ bind C-p choose-buffer
# trigger copy mode by
bind -n M-Up copy-mode
bind -n PageUp copy-mode
# Scroll up/down by 1 line, half screen, whole screen
bind -T copy-mode-vi M-Up send-keys -X scroll-up
@@ -157,11 +158,38 @@ bind -T copy-mode-vi PageUp send-keys -X page-up
bind -T copy-mode-vi WheelUpPane select-pane \; send-keys -X -N 2 scroll-up
bind -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 2 scroll-down
# Do not copy selection and cancel copy mode on drag end event
# More iTerm style selection: select, then need to mouse click to copy to buffer
unbind -T copy-mode-vi MouseDragEnd1Pane
bind -T copy-mode-vi MouseDown1Pane select-pane \; send-keys -X copy-selection
# wrap default shell in reattach-to-user-namespace if available
# there is some hack with `exec & reattach`, credits to "https://github.com/gpakosz/.tmux"
# don't really understand how it works, but at least window are not renamed to "reattach-to-user-namespace"
if -b "command -v reattach-to-user-namespace > /dev/null 2>&1" \
"run 'tmux set -g default-command \"exec $(tmux show -gv default-shell) 2>/dev/null & reattach-to-user-namespace -l $(tmux show -gv default-shell)\"'"
yank="~/.tmux/yank.sh"
# Remap keys which perform copy to pipe copied text to OS clipboard
bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "$yank"
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "$yank"
bind -T copy-mode-vi Y send-keys -X copy-pipe-and-cancel "$yank; tmux paste-buffer"
bind -T copy-mode-vi C-j send-keys -X copy-pipe-and-cancel "$yank"
bind-key -T copy-mode-vi D send-keys -X copy-end-of-line \;\
run "tmux save-buffer - | $yank"
bind-key -T copy-mode-vi A send-keys -X append-selection-and-cancel \;\
run "tmux save-buffer - | $yank"
# Do not copy selection and cancel copy mode on drag end event
# Prefer iTerm style selection: select, then mouse click to copy to buffer
unbind -T copy-mode-vi MouseDragEnd1Pane
bind -T copy-mode-vi MouseDown1Pane select-pane \;\
send-keys -X copy-pipe-and-cancel "$yank"
# iTerm2 works with clipboard out of the box, set-clipboard already set to "external"
# tmux show-options -g -s set-clipboard
# set-clipboard on|external
# TODO: open new window/pane and retain pwd
# bind '"' split-window -c "#{pane_current_path}"
# bind % split-window -h -c "#{pane_current_path}"
# bind c new-window -c "#{pane_current_path}"
# =====================================