changeset 480:4c5814d3cfd8

afcopy: some enhancements from Bryan's dotfiles This makes `afcopy` able to drop things in the clipboard over ssh. Wild stuff. See https://bitbucket.org/bcmills/dotfiles/src/101956eeb90160f1d225ae23c8e6566c9df91c5c/bin/clip?at=default&fileviewer=file-view-default for some details.
author Augie Fackler <raf@durin42.com>
date Thu, 14 Mar 2019 10:38:49 -0400
parents 601884c45f8a
children b2a3bee0d975
files unixSoft/bin/afcopy
diffstat 1 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/unixSoft/bin/afcopy
+++ b/unixSoft/bin/afcopy
@@ -2,5 +2,22 @@
 if [ `uname` = Darwin ] ; then
   pbcopy
 else
-  xclip -selection clipboard
+    if [ -z "${TMUX:-}" ]; then
+        DATA="$(cat)"
+        # Copy the data to the terminal clipboard using OSC 52 escape codes.
+        # See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html, “Ps = 5 2”.
+        echo -en '\e]52;c;'
+        echo -n "$DATA" | base64 -w0
+        echo -en '\a'
+    else
+        tmux set-buffer -- "$DATA"
+        # Use a double-escape to send escape codes directly to the terminal.
+        # See https://github.com/tmux/tmux/commit/79e30daeae1d49a1cf1dc4618edf1ec82804a80c.
+        echo -en '\ePtmux;\e\e]52;c;'
+        echo -n "$DATA" | base64 -w0
+        echo -en '\a\e\\'
+    fi
+    if [ -n "${DISPLAY:-}" ] ; then
+        xclip -selection clipboard
+    fi
 fi