키 바인딩으로 xdotool을 실행할 때 예기치 않은 동작

키 바인딩으로 xdotool을 실행할 때 예기치 않은 동작

누르면 xdotool이 실행되는 키를 작성했습니다. 그러나 알 수 없는 이유로 xdotool은 바인딩된 키를 놓을 때만 키 입력을 보냅니다. 단, 비활성 창에 대한 키 입력을 보내는 데 --window를 사용하지 않는 한, 이 경우(활성 창에 대해 원하는 대로) )는 다음과 같은 경우에 키 입력을 보냅니다. 바운드 키가 눌려지고, 누르고 있으면 반복적으로 발생합니다.

문제가 있는 샘플 코드:

#include <stdio.h>
#include <stdlib.h>
#include <xcb/xcb.h>

int main() {
    xcb_connection_t *connection = xcb_connect(NULL, NULL);

    xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(connection)).data;

    xcb_grab_key(connection, 1, screen->root, XCB_NONE, 65, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC);  // 65=space (on mine at least)

    xcb_flush(connection);

    xcb_generic_event_t *event;
    while ( (event = xcb_wait_for_event(connection)) ) {
        switch (event->response_type & ~0x80) {
            case XCB_KEY_PRESS: {

                // UNCOMMENT ONE OF THE LINES BELOW
                // system("xdotool key q");  // only on release :(
                // system("xdotool getactivewindow key --window %1 q");  // only on release :(
                // system("xdotool key --window 18874376 q");  // (replace 18874376 with one of your window's id, could use 'xdotool getactivewindow') works perfectly for me but only if the specified window is not active :(

                break;
            }
        }
        free(event);
    }
}

위의 내용은 Num Lock을 포함한 수정자에는 적용되지 않습니다.

컴파일:

gcc c.c -lxcb

당신도 같은 경험을 해본 적이 있나요? 내가 원하는 것을 어떻게 얻을 수 있나요?

관련 정보