Finding key codes on Linux
2012-07-04 (121) by , tagged as
It often happens that I get into a situation
where I need to know key codes of pressed
keys. On my Mac that's simple. Just use the
Key Codes
by Many Tricks.
But on Linux I constantly was trying to find out which key produced what.
So I ended up writing a program for that. I started of in the shell, but that ended up being rather tricky and unnecessary complicated. So I redid the whole thing in C.
This is the result
/* * Program : code.c * Author : Ton Kersten */ #include <stdio.h> #include <curses.h> #define DONE 'q' #define ESC 0x1b #define SPC 0x20 char ch; main() { printf("Press '%c' to quit!\n\n", DONE); /* * Put the terminal in raw mode, with no echo */ system("stty raw -echo"); /* * Print the header */ printf("%4s\t%4s\t%4s\t%4s\r\n", "Char", " Hex", " Oct", " Dec"); printf("%4s\t%4s\t%4s\t%4s\r\n", "----", "----", "----", "----"); /* * Set the initial loop value to something odd */ ch = DONE-1; while ( ch != DONE ) { ch = getchar(); /* * Character read. Display it. Look out for < 0x20 */ if ( ch < SPC ) { if ( ch == ESC ) { /* * Esc. Just say 'Esc' */ printf("%-4s\t0x%02x\t%04o\t%04d\r\n", "Esc", ch, ch, ch); } else { /* * < ' '. Print Control character */ printf("^%-c\t0x%02x\t%04o\t%04d\r\n", ch-1+'A', ch, ch, ch); } } else { /* * Normal character. Display it normally */ printf("%-4c\t0x%02x\t%04o\t%04d\r\n", ch, ch, ch, ch); } } /* * Put the terminal back to something usefull */ system("stty sane echo"); }
And this is an example of the output
Press 'q' to quit! Char Hex Oct Dec ---- ---- ---- ---- Esc 0x1b 0033 0027 O 0x4f 0117 0079 P 0x50 0120 0080 Esc 0x1b 0033 0027 [ 0x5b 0133 0091 2 0x32 0062 0050 4 0x34 0064 0052 ~ 0x7e 0176 0126 q 0x71 0161 0113