
사용자가 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
그렇지 않으면 전체 경로를 제공해야 합니다.