113 lines
2.4 KiB
C
113 lines
2.4 KiB
C
/*
|
|
* Released into the public domain
|
|
* by Aki Goto <tyatsumi@gmail.com>
|
|
*/
|
|
|
|
#include <X11/keysym.h>
|
|
#include "keymap.h"
|
|
|
|
#define UP ButtonId_UP
|
|
#define DOWN ButtonId_DOWN
|
|
#define LEFT ButtonId_LEFT
|
|
#define RIGHT ButtonId_RIGHT
|
|
#define A ButtonId_A
|
|
#define B ButtonId_B
|
|
#define X ButtonId_X
|
|
#define Y ButtonId_Y
|
|
|
|
static void set(struct Keymap *this, int first, int second, int keysym) {
|
|
int index;
|
|
|
|
index = first * 8 + second;
|
|
this->keysym[index] = keysym;
|
|
}
|
|
|
|
void Keymap_initialize(struct Keymap *this)
|
|
{
|
|
set(this, UP, UP, XK_Escape);
|
|
set(this, UP, DOWN, XK_grave);
|
|
set(this, UP, LEFT, 0);
|
|
set(this, UP, RIGHT, 0);
|
|
|
|
set(this, DOWN, UP, 0);
|
|
set(this, DOWN, DOWN, XK_space);
|
|
set(this, DOWN, LEFT, 0);
|
|
set(this, DOWN, RIGHT, 0);
|
|
|
|
set(this, LEFT, UP, 0);
|
|
set(this, LEFT, DOWN, 0);
|
|
set(this, LEFT, LEFT, XK_Tab);
|
|
set(this, LEFT, RIGHT, 0);
|
|
|
|
set(this, B, A, XK_minus);
|
|
set(this, B, B, XK_BackSpace);
|
|
set(this, B, X, XK_equal);
|
|
set(this, B, Y, XK_apostrophe);
|
|
|
|
set(this, X, A, 0);
|
|
set(this, X, B, 0);
|
|
set(this, X, X, XK_space);
|
|
set(this, X, Y, 0);
|
|
|
|
set(this, Y, A, XK_backslash);
|
|
set(this, Y, B, XK_bracketleft);
|
|
set(this, Y, X, XK_bracketright);
|
|
set(this, Y, Y, XK_Return);
|
|
|
|
set(this, LEFT, Y, XK_1);
|
|
set(this, DOWN, Y, XK_2);
|
|
set(this, UP, Y, XK_3);
|
|
set(this, RIGHT, Y, XK_4);
|
|
set(this, RIGHT, LEFT, XK_5);
|
|
|
|
set(this, A, Y, XK_6);
|
|
set(this, A, LEFT, XK_7);
|
|
set(this, B, LEFT, XK_8);
|
|
set(this, X, LEFT, XK_9);
|
|
set(this, Y, LEFT, XK_0);
|
|
|
|
set(this, LEFT, B, XK_q);
|
|
set(this, DOWN, B, XK_w);
|
|
set(this, UP, B, XK_e);
|
|
set(this, RIGHT, B, XK_r);
|
|
set(this, RIGHT, UP, XK_t);
|
|
|
|
set(this, A, B, XK_y);
|
|
set(this, A, UP, XK_u);
|
|
set(this, B, UP, XK_i);
|
|
set(this, X, UP, XK_o);
|
|
set(this, Y, UP, XK_p);
|
|
|
|
set(this, LEFT, A, XK_a);
|
|
set(this, DOWN, A, XK_s);
|
|
set(this, UP, A, XK_d);
|
|
set(this, RIGHT, A, XK_f);
|
|
set(this, RIGHT, RIGHT, XK_g);
|
|
|
|
set(this, A, A, XK_h);
|
|
set(this, A, RIGHT, XK_j);
|
|
set(this, B, RIGHT, XK_k);
|
|
set(this, X, RIGHT, XK_l);
|
|
set(this, Y, RIGHT, XK_semicolon);
|
|
|
|
set(this, LEFT, X, XK_z);
|
|
set(this, DOWN, X, XK_x);
|
|
set(this, UP, X, XK_c);
|
|
set(this, RIGHT, X, XK_v);
|
|
set(this, RIGHT, DOWN, XK_b);
|
|
|
|
set(this, A, X, XK_n);
|
|
set(this, A, DOWN, XK_m);
|
|
set(this, B, DOWN, XK_comma);
|
|
set(this, X, DOWN, XK_period);
|
|
set(this, Y, DOWN, XK_slash);
|
|
}
|
|
|
|
int Keymap_get(struct Keymap *this, struct Code *code)
|
|
{
|
|
int index;
|
|
|
|
index = code->first * 8 + code->second;
|
|
return this->keysym[index];
|
|
}
|