Subscribed unsubscribe Subscribe Subscribe

コマンドラインからXのクリップボードを操作する

コンソール(ktermとか)でマウスのセンターボタンを押すと、
「コピー」した内容ではなく、現在選択している領域がペーストされますよね。
その理由がやっとわかった。


[X Window System] クリップボードの種類 - Life with IT http://l-w-i.net/t/x/clipboard_001.txt

X Windows Systemではクリップボードに3種類のバッファが用意されており、コピー方法によって使用するバッファが異なる。

PRIMARY
マウスでテキストを反転させてコピーした場合

SECONDARY
(未使用)

CLIPBOARD
マウスでテキストを反転させ、右クリックしてコピーを選択した場合


マウスでテキストを選択した段階でその内容がPRIMARYバッファに入る。
それを「コピー」することでCLIPBOARDバッファに入る。


つまり自分の使ってた端末エミュレータでは、
センタークリックではprimaryからペースト
右クリック→ペーストではclipboardからペーストしていた
ということになる。へー。


ところで
Xのクリップボードを操作するコマンドを最近知って、たまに便利なので紹介。

xclipってやつで
-iでクリップボードへコピー
-oでクリップボードからペースト
ができます。
また、使用するバッファを-selectionオプションで指定できます。
-selection指定しないときはprimaryが使われるみたい。

[toshi@desktop ~]$ echo 'hello' > test.txt
[toshi@desktop ~]$ cat test.txt | xclip -i
[toshi@desktop ~]$ xclip -o
hello
[toshi@desktop ~]$ xclip -o -selection primary
hello

-selection primary, -selection clipboard が長くてめんどくさいなーって思ったんですが、
試したかぎりでは-sel p, -sel cとかでもできました。

[toshi@desktop ~]$ xclip -o -sel p
hello

これでコマンドの出力結果をGUIアプリにぺっ、とはりつけるの楽ちんになりますね。



クリップボードの履歴ってたどれたりしないんですかね?
Emacsのキルリングみたいに。(注)
方法知ってる人いたら教えてくれたりしないかなあ。