適当に翻訳する。
xsel --delete は効かないことが多いけれども、効くこともある。xedit のセレクション、及び xsel 自身が作り出したセレクションに対して「xsel --delete」を使ってみると、同コマンドの機能がよくわかる。
先ず、セレクション所有者のウィンドウ ID を表示するプログラムを用意しておく(owner.c)。「xsel --delete」「xsel --clear」がどのような効果を持つのか観察する。
(1)xsel 自身が生み出したセレクションを削除する。「--delete」と「-d」は同じ。「--clear」と「-c」も同じ。
$ ./owner
PRIMARY : No Owner
SECONDARY : No Owner
CLIPBOARD : No Owner
$ echo AAA | xsel -i
$ xsel
AAA
$ ./owner
PRIMARY:WindowID : 0x3800001
SECONDARY : No Owner
CLIPBOARD : No Owner
$ echo BBB | xsel -is
$ xsel -s && ./owner
BBB
PRIMARY:WindowID : 0x3800001
SECONDARY:WindowID : 0x3c00001
CLIPBOARD : No Owner
$ xsel -d
$ xsel
$ ./owner
PRIMARY : No Owner
SECONDARY:WindowID : 0x3c00001
CLIPBOARD : No Owner
$ xsel -ds
$ xsel -s
$ ./owner
PRIMARY : No Owner
SECONDARY : No Owner
CLIPBOARD : No Owner
$ echo AAA | xsel -i && echo BBB | xsel -is
$ xsel && xsel -s && ./owner
AAA
BBB
PRIMARY:WindowID : 0x3800001
SECONDARY:WindowID : 0x3c00001
CLIPBOARD : No Owner
$ xsel -c && xsel -cs
$ xsel && xsel -s
$ ./owner
PRIMARY : No Owner
SECONDARY : No Owner
CLIPBOARD : No Owner
この例では、「xsel --delete」も「xsel --clear」も同じ働きをしている。
(2)xedit のセレクションを削除する。
$ ./owner
PRIMARY : No Owner
SECONDARY : No Owner
CLIPBOARD : No Owner
xedit内の文章を一部選択反転させる。
$ xsel && ./owner
PLEsample
MNmnMNPRIMARY:WindowID : 0x1800052
SECONDARY : No Owner
CLIPBOARD : No Owner
$ xsel -c
$ ./owner
PRIMARY : No Owner
SECONDARY : No Owner
CLIPBOARD : No Owner
「xsel -c」の直後の画像。
また新たに選択反転を行って、
$ xsel && ./owner
mnMNmnMNmn
a
iPRIMARY:WindowID : 0x1800052
SECONDARY : No Owner
CLIPBOARD : No Owner
$ xsel -d
$ ./owner
PRIMARY : No Owner
SECONDARY:WindowID : 0x1800052
CLIPBOARD : No Owner
$ xsel -s
mnMNmnMNmn
a
i$
「xsel -d」直後の画像。
i$ xsel -ds
$ ./owner
PRIMARY : No Owner
SECONDARY:WindowID : 0x1800052
CLIPBOARD : No Owner
$ xsel -cs
$ ./owner
PRIMARY : No Owner
SECONDARY : No Owner
CLIPBOARD : No Owner
「--clear」の方は単に PRIMARY セレクションの所有権を放棄するだけ。「--delete」の方は、xedit 内の選択反転していた文章を消した上で、PRIMARYセレクションの所有権を放棄し、SECONDARY セレクションを作成して、もともと PRIMARY セレクションに入っていた内容をそこへ移す。xedit では、「xsel --delete --secondary」が効いてない。xedit に PRIMARY、SECONDARY の両セレクションが存在する時、「xsel -d」を実行すると、PRIMARY セレクションの中身で SECONDARY セレクションが上書きされ、PRIMARY セレクションは消える。
以下は、セレクションの所有者のウィンドウ ID を表示するプログラム(owner.c)。
// owner.c // gcc -o owner owner.c -lX11 #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xatom.h> int main(){ Window primary_owner; Window secondary_owner; Window clipboard_owner; char * clipboard_name = "CLIPBOARD"; Display *my_disp; my_disp = XOpenDisplay(""); Atom clipboard_atom = XInternAtom(my_disp, clipboard_name, False); primary_owner = XGetSelectionOwner(my_disp, XA_PRIMARY); secondary_owner = XGetSelectionOwner(my_disp, XA_SECONDARY); clipboard_owner = XGetSelectionOwner(my_disp, clipboard_atom); if(primary_owner == None){ printf("PRIMARY : No Owner\n"); }else{ printf("PRIMARY:WindowID : 0x%x\n", primary_owner); } if(secondary_owner == None){ printf("SECONDARY : No Owner\n"); }else{ printf("SECONDARY:WindowID : 0x%x\n", secondary_owner); } if(clipboard_owner == None){ printf("CLIPBOARD : No Owner\n"); }else{ printf("CLIPBOARD:WindowID : 0x%x\n", clipboard_owner); } XCloseDisplay(my_disp); return 0; }
カレンダー
カテゴリー
最新コメント
最新記事
ブログ内検索
広告