#include //#include #include #include #include //#include #include #include void error(char *format, ...) { va_list ap; va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); exit(1); } void warning(char *format, ...) { va_list ap; va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); } void show_keysym_for_event(Display *display, XEvent event) { KeySym keysym; switch (event.type) { case KeyPress: keysym = XkbKeycodeToKeysym(display, event.xkey.keycode, 0, event.xkey.state & ShiftMask ? 1 : 0); printf("%d %d %s\n", event.xkey.keycode, event.xkey.state, XKeysymToString(keysym)); break; default: warning("unhandled event, type: 0x%04x\n", event.type); break; } } int main(int argc, char **argv) { Window root, window; Display *display; int screen_number; long black, white; if ((display = XOpenDisplay(NULL)) == NULL) error("cannot open display\n"); screen_number = DefaultScreen(display); white = WhitePixel(display, screen_number); black = BlackPixel(display, screen_number); root = DefaultRootWindow(display); window = XCreateSimpleWindow( display, root, 0, 0, 10, 10, 0, white, black); XSelectInput(display, window, KeyPressMask); XMapWindow(display, window); while (1) { XEvent event; XNextEvent(display, &event); show_keysym_for_event(display, event); } XUnmapWindow(display, window); XDestroyWindow(display, window); XCloseDisplay(display); exit(0); }