CygwinでGNU screenを使ってターミナルの内容をクリップボードにコピー

どうやらCygwinではカーソルを使って範囲を選択してコピーできないようで、今まではマウスでドラッグして選択して他のファイルに貼り付けたりしていた。効率が悪いと思ったので、どうにかキーボードだけでできないか調べた。gnu screenでコピーした内容をうまくクリップボードにもコピーされるようにすることでCygwinのターミナルの文字列をキーボードだけでコピーできるようだ。
また、この方法によりCygwinに限らずLinux上のターミナル(端末)上の内容もクリップボードに共有できる模様。
参考:
  • http://qiita.com/k_ui/items/d0ae1e7b4d553830ccb9
  • https://gist.github.com/yoshikaw/862031
  • http://d.hatena.ne.jp/sugyan/20100706/1278357368
  • http://rcmdnk.github.io/blog/2013/03/24/screen-bash/
日本語の文字化け対策:
  • http://futurismo.biz/archives/1364
  • http://d.hatena.ne.jp/edvakf/20101017/1287285851
基本的には以下のサイトのコードをコピペした。
http://qiita.com/k_ui/items/d0ae1e7b4d553830ccb9
ただ、このままだと日本語は文字化けするので、nkfを間にはさみ-sでShift-JISに変換して対処した。
以下の内容を~/.zshrcか~/.bashrcなどに記述。

## share gnu screen clopboard
if which xsel > /dev/null 2>&1
then
# X Window System 環境でのコピー (xsel をインストールする必要あり)
copy_cmd="xsel -i -b < /tmp/screen-exchange;\
xsel -i -p < /tmp/screen-exchange"
elif which pbcopy > /dev/null 2>&1
then
# Mac OS X 環境でのコピー (要動作テスト)
copy_cmd="pbcopy < /tmp/screen-exchange"
elif which putclip > /dev/null 2>&1
then
# Cygwin 環境でのコピー(要動作テスト)
# copy_cmd='putclip < /tmp/screen-exchange'
# copy_cmd='nkf -s < /tmp/screen-exchange | putclip'
#    copy_cmd='iconv -t SJIS < /tmp/screen-exchange | putclip' # iconvは高頻度で標準で入っている。
    copy_cmd='iconv -s -t SJIS < /tmp/screen-exchange | putclip' # エスケープ文字があると、コピーは成功してもエラーメッセージが出るのでメッセージを表示しない。[20140118]
 
fi
#[ $STY ] && [ $copy_cmd ] &&\
[ $STY ] && [ "$copy_cmd" ] && {
screen -X bindkey -m ' ' eval "stuff ' '" writebuf "exec sh -c '$copy_cmd'"
screen -X bindkey -m 'Y' eval "stuff 'Y'" writebuf "exec sh -c '$copy_cmd'"
screen -X bindkey -m 'W' eval "stuff 'W'" writebuf "exec sh -c '$copy_cmd'"}
これによりgnu screenでコピーする際にクリップボードにもコピーされる。これでcygwinのターミナルの内容をキー操作だけでクリップボードにコピーして他のソフトでも使えるようになった。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です