読者です 読者をやめる 読者になる 読者になる

標準入力をクリップボードにコピーするAppleScript

うーむ…ありそうでなかった。もしかしたら再発明してしまったかも?
※と思ったらやっぱり ^_^;) Mac OS Xの標準で「pbcopy」というコマンドが入っていました。↓でもせっかく書いたので残しておきます。

#!/bin/sh
pass=""

while [ $# -gt 0 ]; do
	case $1 in
	-p)
		pass=yes
		;;
	*)
		echo "usage: `basename $0` [-p]"
		exit 1
		;;
	esac
	shift
done


temp=`mktemp /tmp/clip.XXXXXXXX`

if [ -n "$pass" ]; then
	tee $temp
else
	cat > $temp
fi

echo "
on run argv
	set posixPath to item 1 of argv
	set macPath to POSIX file posixPath
	set tempFile to open for access macPath without write permission
	set fileBody to read tempFile
	close access tempFile
	set the clipboard to fileBody
end run
" | osascript - $temp

rm -f $temp

↑こういう風に貼り付けたいときに便利です。

[frsyuki@viver]$ cat ~/self/local/bin/clip | clip


クリップボードの内容を標準出力に出力するスクリプト。

#!/bin/sh

while [ $# -gt 0 ]; do
	case $1 in
	*)
		echo "usage: `basename $0`"
		exit 1
		;;
	esac
	shift
done

temp=`mktemp /tmp/clip.XXXXXXXX`

echo "
on run argv
	set posixPath to item 1 of argv
	set macPath to POSIX file posixPath
	set tempFile to open for access macPath with write permission
	set fileBody to the clipboard
	write fileBody to tempFile
	close access tempFile
end run
" | osascript - $temp

cat $temp

rm -f $temp


vimな方は、↓こんなmapを~/.vimrcに書いておくと、Ctrl-Kでvisualモードで選択した行をクリップボードにコピーできます。

vmap <C-K> !clip -p<CR>

ただこのmapだと、「選択した範囲」ではなくて、「選択された文字を含む行全体」をコピーしてしまいます。行の途中までをコピーできない。なにかいい方法ありませんか?