There are two command-line tools (in two different packages) to access the X clipboard:
I would love to know the difference between those two and hear a recommendation which one to use in which cases.
xsel can store text into 3 different selections (by default it is primary selection). From experience I know that primary selection is basically what you high-light and released with the middle mouse click (which corresponds to pressing both right and left touchpad key on a laptop). The clipboard is the traditional CtrlV.
By examining the
man pages for both, however, I've discovered that
xclip wins in one aspect - reading from an input file:
xieerqi: $ cat testfile.txt HELLOWORLD xieerqi: $ xclip -selection clipboard testfile.txt xieerqi: $ HELLOWORLD mksh: HELLOWORLD: not found xieerqi: $ xsel testfile.txt Usage: xsel [options] Manipulate the X sele . . . (usage page goes on)
Of course you could use shell redirection with
xsel to get around that
xieerqi: $ xsel --clipboard < testfile.txt xieerqi: $ HELLOWORLD mksh: HELLOWORLD: not found
xclip also wins in the fact that you can output the contents of clipboard to file (which is perhaps useful when you want to redirect PRIMARY selection , i.e. highlights).
xsel offers only output to stdout
unlike xsel it [xclip] works better on printing raw bitstream that doesn't fit the current locale. Nevertheless, it is neater to use xsel instead of xclip, because xclip does not close STDOUT after it has read from tmux's buffer. As such, tmux doesn't know that the copy task has completed, and continues to wait for xclip's termination, thereby rendering tmux unresponsive. A workaround is to redirect STDOUT of xclip to /dev/null
Something else to keep in mind,
xsel has fewer dependencies than
# apt-cache depends xsel xsel Depends: libc6 Depends: libx11-6 Conflicts: xsel:i386 # apt-cache depends xclip xclip Depends: libc6 Depends: libx11-6 Depends: libxmu6 Conflicts: xclip:i386
xsel can not extract binary data from clipboard, such as screenshost. For example, save screenshot to clipboard:
$ maim -s | xclip -selection clipboard -t image/png
Then save to file and compare output:
$ xclip -o -selection clipboard > 1xclip $ xsel -o --clipboard > 1xsel $ ls -go 1* -rw-rw-r-- 1 11948 Sep 26 20:13 1xclip -rw-rw-r-- 1 0 Sep 26 20:13 1xsel