diff options
Diffstat (limited to 'core/tmux.conf')
| -rw-r--r-- | core/tmux.conf | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/core/tmux.conf b/core/tmux.conf index b9a6cb1..0304e94 100644 --- a/core/tmux.conf +++ b/core/tmux.conf | |||
| @@ -40,23 +40,20 @@ set -g status-right "#{?pane_in_mode,line #{e|+:#{scroll_position},#{e|-:#{e|-:# | |||
| 40 | # (replaces the default prefix + / "describe key"); capture goes via a named buffer so it targets this pane | 40 | # (replaces the default prefix + / "describe key"); capture goes via a named buffer so it targets this pane |
| 41 | bind-key / capture-pane -J -S - -b scrollback \; display-popup -E -w 99% -h 99% "f=\$(mktemp); tmux save-buffer -b scrollback \$f; tmux delete-buffer -b scrollback; vim -M -c 'set number' + \$f; rm -f \$f" | 41 | bind-key / capture-pane -J -S - -b scrollback \; display-popup -E -w 99% -h 99% "f=\$(mktemp); tmux save-buffer -b scrollback \$f; tmux delete-buffer -b scrollback; vim -M -c 'set number' + \$f; rm -f \$f" |
| 42 | 42 | ||
| 43 | # ===== Shared clipboard: RAM file /dev/shm/clip/buf on CLIP_HOST ===== | 43 | # ===== Clipboard: every yank goes to both places, neither blocks; prefix ] tries remote, then local ===== |
| 44 | # local: pbcopy on Mac, OSC 52 (set-clipboard on) everywhere; remote: RAM file /dev/shm/clip/buf on CLIP_HOST; copy-pipe runs as a background job | ||
| 44 | %hidden CLIP_HOST="root@p.noml.ch" | 45 | %hidden CLIP_HOST="root@p.noml.ch" |
| 45 | # One persistent ssh link (opens on first use, one key touch). | ||
| 46 | # Close it: ssh -O exit -o ControlPath=~/.ssh/cm-%C <CLIP_HOST> | ||
| 47 | %hidden CLIP="ssh -o ControlMaster=auto -o ControlPersist=yes -o ControlPath=~/.ssh/cm-%C -o ServerAliveInterval=30 -o ConnectTimeout=3 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR $CLIP_HOST" | 46 | %hidden CLIP="ssh -o ControlMaster=auto -o ControlPersist=yes -o ControlPath=~/.ssh/cm-%C -o ServerAliveInterval=30 -o ConnectTimeout=3 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR $CLIP_HOST" |
| 48 | # push (yank): copy mode v to select, then y / Enter / mouse drag | 47 | %hidden YANK="f=\$(mktemp); cat >\$f; pbcopy <\$f 2>/dev/null; $CLIP 'umask 077; mkdir -p /dev/shm/clip && cat >/dev/shm/clip/new && mv /dev/shm/clip/new /dev/shm/clip/buf' <\$f >/dev/null 2>&1; rm -f \$f" |
| 49 | %hidden YANK="$CLIP 'umask 077; mkdir -p /dev/shm/clip && cat >/dev/shm/clip/new && mv /dev/shm/clip/new /dev/shm/clip/buf'" | ||
| 50 | bind-key -T copy-mode-vi v send-keys -X begin-selection | 48 | bind-key -T copy-mode-vi v send-keys -X begin-selection |
| 51 | # y = yank selection; with no selection, y y = yank the whole line | 49 | # y = yank selection; with no selection, y y = yank the whole line |
| 52 | bind-key -T copy-mode-vi y if-shell -F '#{selection_present}' { send-keys -X copy-pipe-no-clear "$YANK" } { switch-client -T copy-yy } | 50 | bind-key -T copy-mode-vi y if-shell -F '#{selection_present}' { send-keys -X copy-pipe-no-clear "$YANK" } { switch-client -T copy-yy } |
| 53 | bind-key -T copy-yy y send-keys -X select-line \; send-keys -X copy-pipe-no-clear "$YANK" | 51 | bind-key -T copy-yy y send-keys -X select-line \; send-keys -X copy-pipe-no-clear "$YANK" |
| 54 | bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-no-clear "$YANK" | 52 | bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-no-clear "$YANK" |
| 55 | bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-no-clear "$YANK" | 53 | bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-no-clear "$YANK" |
| 56 | # pull (paste): prefix + ] fetches the buffer into tmux, then pastes it (-p: bracketed paste, so vim inserts it as-is even from normal mode); | 54 | # prefix + ] pastes remote buffer; any remote failure or >3 s = Mac clipboard (Linux: tmux buffer); -b keeps tmux responsive meanwhile |
| 57 | # no buffer on CLIP_HOST yet (exit 3, e.g. after its reboot) = paste tmux's own buffer | 55 | bind-key ] run-shell -b "f=\$(mktemp); perl -e 'alarm 3; exec @ARGV' $CLIP '[ -f /dev/shm/clip/buf ] || exit 3; cat /dev/shm/clip/buf' >\$f 2>/dev/null || pbpaste >\$f 2>/dev/null || tmux save-buffer \$f; tmux load-buffer \$f; rm -f \$f; tmux paste-buffer -p -t '#{pane_id}'" |
| 58 | bind-key ] run-shell "f=\$(mktemp); $CLIP '[ -f /dev/shm/clip/buf ] || exit 3; cat /dev/shm/clip/buf' >\$f; r=\$?; [ \$r -eq 0 ] && tmux load-buffer \$f; rm -f \$f; [ \$r -eq 0 ] || [ \$r -eq 3 ] && tmux paste-buffer -p" | 56 | # ===== end clipboard ===== |
| 59 | # ===== end shared clipboard ===== | ||
| 60 | # OSC 52: copy-mode yanks also go to the clipboard of the terminal you type in; "on" (not "external") | 57 | # OSC 52: copy-mode yanks also go to the clipboard of the terminal you type in; "on" (not "external") |
| 61 | # also forwards OSC 52 that vim writes inside a pane | 58 | # also forwards OSC 52 that vim writes inside a pane |
| 62 | set -g set-clipboard on | 59 | set -g set-clipboard on |
