LINUX.ORG.RU

Копайся в исходниках showkey . Правда это для не-иксов.

Kroz ★★★★★
()

Для иксов см. исходники xev.

Eddy_Em ☆☆☆☆☆
()

В ondown засекаешь, в onrelease смотришь разницу. См. любой helloworld для xlib.

sambist ★★
()

Вот из xev:

    XEvent event;

    XNextEvent (dpy, &event);

    switch (event.type) {
      case KeyPress:
        prologue (&event, "KeyPress");
        do_KeyPress (&event);
        break;
      case KeyRelease:
        prologue (&event, "KeyRelease");
        do_KeyRelease (&event);
        break;
Т.е. мониторишь постоянно события. Как только получаешь KeyPress, запоминаешь время нажатия и перестаешь регистрировать эти события (т.к. через какое-то время включится автоповтор и KeyPress будут сыпать). Как только получаешь KeyRelease, вычисляешь время нажатия и опять начинаешь KeyPress анализировать.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Забываешь про буферизацию. Читал консольный ввод из Ruby. Там внутренный буфер неочищаемый, пришлось наугад подбирать таймауты :)

Нетривиальная задача. Нащёлкивать код Морзе пробелом крайне трудно :)

lochness
() автор топика
Ответ на: комментарий от lochness

Дык, отключай буферизацию, ясен пень!

А xev вообще-то не для консоли, а для иксов. Там с буферизацией нет проблем.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.