screen から簡単操作で X のクリップボードにコピー

screen から文字列を X のクリップボードへコピー (http://d.hatena.ne.jp/emacsjjj/20050629/p1) の続き。

前回の方法では通常操作で screen のペーストバッファにコピーした後、C-a y を叩いて X 側に渡してやる必要があった。この余分なストロークがどうにも無駄でなんとかしたかったのだが、でかいのさんのページ Let's use SCREEN! の下のほうにある screen-history.tar.gz に解決法を発見!!

bindkey -m

とやってやればコピーモードのキー割り当ても変更できるようだ。っつーか man にもちゃんと書いてあるし。読めと > 俺

これを使って screen 自体のコピー処理の後に X に渡す処理をくっつけたコマンドを割り当ててやればもう余分なストロークは不要になる。

bindkey -m ' ' eval 'msgwait 0' 'stuff \040' writebuf 'exec !!! xclip /tmp/screen-exchange' 'msgwait 2'
bindkey -m Y eval 'msgwait 0' 'stuff Y' writebuf 'exec !!! xclip /tmp/screen-exchange' 'msgwait 2'
bindkey -m y eval 'msgwait 0' 'stuff y' writebuf 'exec !!! xclip /tmp/screen-exchange' 'msgwait 2'
bindkey -m W eval 'msgwait 0' 'stuff W' writebuf 'exec !!! xclip /tmp/screen-exchange' 'msgwait 2'

最初と最後の msgwait はお好みで。それと前回端折っちゃったけど screen から writebuf するファイルは他のユーザと共有する必要がなければデフォルトの /tmp には置かないほうがいいと思います。bufferfile コマンドで ${HOME} 以下などに変更しておきましょう。

[追記:2005-12-28]

bindkey -m ^M eval 'msgwait 0' 'stuff \015' writebuf 'exec !!! xclip /tmp/screen-exchange' 'msgwait 2'

これやってると ^A:screen ls^M とかやったときに screen が固まりますね… orz 自分は screen でのコピーには普段 SPC しか使わないのでこの行は削除。

これでなんら意識することなく通常の screen のコピー操作だけで X のクリップボードにも透過的にコピーすることができる。多い日も安心だ。


いやーそれにしても screen 奥が深過ぎ。そしてありがとうギレン総帥。