Original from Rudolf Polzer in dcou.x11.

Added timestamps, flushing of stdout,
and usleep to reduce CPU usage.
This commit is contained in:
hjp 2005-12-18 10:08:52 +00:00
parent 6899d0d971
commit 1d4e979fba
2 changed files with 55 additions and 0 deletions

8
xkeylog/GNUmakefile Normal file
View File

@ -0,0 +1,8 @@
all: xkeylog
xkeylog: xkeylog.c
gcc -O xkeylog.c -L/usr/X11R6/lib -lX11 -o xkeylog
install: /usr/local/bin/xkeylog
/usr/local/bin/xkeylog: xkeylog
cp $^ $@

47
xkeylog/xkeylog.c Normal file
View File

@ -0,0 +1,47 @@
#include <X11/Xlib.h>
#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>
typedef char Keymap[32];
void CompareKeymaps(Display *dpy, const Keymap k1, const Keymap k2)
{
int i, j;
struct timeval tv;
gettimeofday(&tv, NULL);
for(i = 0; i != 32; ++i)
{
char d = k1[i] &~ k2[i];
char p = k2[i] &~ k1[i];
int k;
for(j = 0, k = 1; j != 8; ++j, k <<= 1)
{
if (p & k) {
printf("%d.%06d:p:%d\n", tv.tv_sec, tv.tv_usec, 8*i+j);
}
if (d & k) {
printf("%d.%06d:r:%d\n", tv.tv_sec, tv.tv_usec, 8*i+j);
}
}
}
fflush(stdout);
}
int main()
{
Keymap k1 = {0};
Keymap k2 = {0};
Display *dpy = XOpenDisplay(0);
if(!dpy)
err(1, "don't have a display, cu\n");
for(;;)
{
usleep(1000);
XQueryKeymap(dpy, k1);
CompareKeymaps(dpy, k2, k1);
usleep(1000);
XQueryKeymap(dpy, k2);
CompareKeymaps(dpy, k1, k2);
}
}