diff options
Diffstat (limited to 'lib/clipboard.zsh')
-rw-r--r-- | lib/clipboard.zsh | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/lib/clipboard.zsh b/lib/clipboard.zsh new file mode 100644 index 000000000..24b7380f7 --- /dev/null +++ b/lib/clipboard.zsh @@ -0,0 +1,67 @@ +# System clipboard integration +# +# This file has support for doing system clipboard copy and paste operations +# from the command line in a generic cross-platform fashion. +# +# On OS X and Windows, the main system clipboard or "pasteboard" is used. On other +# Unix-like OSes, this considers the X Windows CLIPBOARD selection to be the +# "system clipboard", and the X Windows `xclip` command must be installed. + +# clipcopy - Copy data to clipboard +# +# Usage: +# +# <command> | clipcopy - copies stdin to clipboard +# +# clipcopy <file> - copies a file's contents to clipboard +# +function clipcopy() { + emulate -L zsh + local file=$1 + if [[ $OSTYPE == darwin* ]]; then + if [[ -z $file ]]; then + pbcopy + else + cat $file | pbcopy + fi + elif [[ $OSTYPE == cygwin* ]]; then + if [[ -z $file ]]; then + cat > /dev/clipboard + else + cat $file > /dev/clipboard + fi + else + which xclip &>/dev/null + if [[ $? != 0 ]]; then + print "clipcopy: Platform $OSTYPE not supported or xclip not installed" >&2 + return 1 + fi + if [[ -z $file ]]; then + xclip -in -selection clipboard + else + xclip -in -selection clipboard $file + fi + fi +} + +# clippaste - "Paste" data from clipboard to stdout +# +# Usage: +# +# clippaste - writes clipboard's contents to stdout +# +function clippaste() { + emulate -L zsh + if [[ $OSTYPE == darwin* ]]; then + pbpaste + elif [[ $OSTYPE == cygwin* ]]; then + cat /dev/clipboard + else + which xclip &>/dev/null + if [[ $? != 0 ]]; then + print "clipcopy: Platform $OSTYPE not supported or xclip not installed" >&2 + return 1 + fi + xclip -out -selection clipboard + fi +}
\ No newline at end of file |