键绑定运行 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

你有同样的经历吗?我怎样才能得到我想要的东西?

相关内容