ユーザーがLinux(debianベース)ウィンドウでテキストを選択した後、ポップアップメニューを表示するアプリケーションを作成したいと思います。 Macユーザーは「PopClip」(https://pilotmoon.com/popclip/)そしてLinuxでは同様のものが見つからなかったので、Linux用に直接書き始めました。
しかし、私はX11プログラミングに初めてアクセスし、ユーザーが任意のウィンドウでテキストを選択したときにacプログラムから通知を受け取る方法を知りたいです。
マウスイベントのように通知するいくつかの例を見つけました。
window = DefaultRootWindow(display);
XMapWindow(display, window);
XAllowEvents(display, AsyncBoth, CurrentTime);
XGrabPointer(display, window, True,
PointerMotionMask | ButtonPressMask | ButtonReleaseMask , GrabModeAsync, GrabModeAsync, None, None, CurrentTime);
while(1) {
XNextEvent(display, &xevent);
switch (xevent.type) {
...
また、他人に知らせることが可能であることがわかりましたが、SelectionNotify
実際には私の要件を満たしていませんでした。
既知のケースがありますか?
答え1
いつものように、入れるテキストを選択してください。基本的な選ぶ(クリップボードではありません。)
持つclipnotify
ただし、メインまたはクリップボードを所有すると実行されますが、クリップボード部分を削除すると簡単に作成できますprimarynotify.c
。
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xfixes.h>
#include <stdlib.h>
int main(void) {
Display *disp;
Window root;
XEvent evt;
disp = XOpenDisplay(NULL);
if (!disp)
exit(1);
root = DefaultRootWindow(disp);
XFixesSelectSelectionInput(disp, root, XA_PRIMARY, XFixesSetSelectionOwnerNotifyMask);
XNextEvent(disp, &evt);
XCloseDisplay(disp);
}
次にコンパイルします(によって異なります)。XRepair):
cc -lX11 -lXfixes -o primarynotify primarynotify.c
シェルループで実行し、
while primarynotify; do
echo "Primary owned: A selection has just been made."
done
primarynotify
ディレクトリを入力することを忘れないでください。$PATH
それ以外の場合は、フルパスを提供する必要があります。