⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strkeysym.c

📁 Nxlib,一个模拟xlib的程序。使用microwindows的库来运行需要xlib支持的程序。
💻 C
字号:
#include "nxlib.h"#include <string.h>#include <X11/keysym.h>#include <X11/Xutil.h>#include "keysymstr.h"/* Standard keymapings for kernel values *//* (from microwin/src/drivers/keymap_standard.h)*//* this table should be retrieved through Microwindows*/static MWKEY mwscan_to_mwkey[128] = {MWKEY_UNKNOWN, MWKEY_ESCAPE, '1', '2', '3',				/* 0*/'4', '5', '6', '7', '8',						/* 5*/'9', '0', '-', '=', MWKEY_BACKSPACE,					/* 10*/MWKEY_TAB, 'q', 'w', 'e', 'r',						/* 15*/'t', 'y', 'u', 'i', 'o',						/* 20*/'o', '[', ']', MWKEY_ENTER, MWKEY_LCTRL,				/* 25*/'a', 's', 'd', 'f', 'g',						/* 30*/'h', 'j', 'k', 'l', ';',						/* 35*/'\'', '`', MWKEY_LSHIFT, '\\', 'z',					/* 40*/'x', 'c', 'v', 'b', 'n',						/* 45*/'m', ',', '.', '/', MWKEY_RSHIFT,					/* 50*/MWKEY_KP_MULTIPLY, MWKEY_LALT, ' ', MWKEY_CAPSLOCK, MWKEY_F1, 		/* 55*/MWKEY_F2, MWKEY_F3, MWKEY_F4, MWKEY_F5, MWKEY_F6, 			/* 60*/MWKEY_F7, MWKEY_F8, MWKEY_F9, MWKEY_F10, MWKEY_NUMLOCK, 		/* 65*/MWKEY_SCROLLOCK, MWKEY_KP7, MWKEY_KP8, MWKEY_KP9, MWKEY_KP_MINUS,	/* 70*/MWKEY_KP4, MWKEY_KP5, MWKEY_KP6, MWKEY_KP_PLUS, MWKEY_KP1, 		/* 75*/MWKEY_KP2, MWKEY_KP3, MWKEY_KP0, MWKEY_KP_PERIOD, MWKEY_UNKNOWN, 	/* 80*/MWKEY_UNKNOWN, MWKEY_UNKNOWN, MWKEY_F11, MWKEY_F12, MWKEY_UNKNOWN,	/* 85*/MWKEY_UNKNOWN,MWKEY_UNKNOWN,MWKEY_UNKNOWN,MWKEY_UNKNOWN,MWKEY_UNKNOWN,	/* 90*/MWKEY_UNKNOWN, MWKEY_KP_ENTER, MWKEY_RCTRL, MWKEY_KP_DIVIDE,MWKEY_PRINT,/* 95*/MWKEY_RALT, MWKEY_BREAK, MWKEY_HOME, MWKEY_UP, MWKEY_PAGEUP,		/* 100*/MWKEY_LEFT, MWKEY_RIGHT, MWKEY_END, MWKEY_DOWN, MWKEY_PAGEDOWN,		/* 105*/MWKEY_INSERT, MWKEY_DELETE, MWKEY_UNKNOWN,MWKEY_UNKNOWN,MWKEY_UNKNOWN,	/* 110*/MWKEY_UNKNOWN,MWKEY_UNKNOWN,MWKEY_UNKNOWN,MWKEY_UNKNOWN,MWKEY_PAUSE,	/* 115*/MWKEY_UNKNOWN,MWKEY_UNKNOWN,MWKEY_UNKNOWN,MWKEY_UNKNOWN,MWKEY_UNKNOWN,	/* 120*/MWKEY_LMETA, MWKEY_RMETA, MWKEY_MENU					/* 125*/};static struct {	GR_KEY nxKey;	KeySym xKey;} mwkey_to_xkey[] = {	{MWKEY_RIGHT, XK_Right},	{MWKEY_LEFT, XK_Left},	{MWKEY_UP, XK_Up},	{MWKEY_DOWN, XK_Down},	{MWKEY_PAGEDOWN, XK_Page_Down},	{MWKEY_PAGEUP, XK_Page_Up},	{MWKEY_INSERT, XK_Insert},	{MWKEY_DELETE, XK_Delete},	{MWKEY_HOME, XK_Home},	{MWKEY_END, XK_End},	{MWKEY_TAB, XK_Tab},	{MWKEY_BACKSPACE, XK_BackSpace},	{MWKEY_ENTER, XK_Return},	{MWKEY_ESCAPE, XK_Escape},	{MWKEY_LCTRL, XK_Control_L},	{MWKEY_RCTRL, XK_Control_R},	{MWKEY_LSHIFT, XK_Shift_L},	{MWKEY_RSHIFT, XK_Shift_R},	{MWKEY_LALT, XK_Alt_L},	{MWKEY_RALT, XK_Alt_R},	{MWKEY_LMETA, XK_Meta_L},	{MWKEY_RMETA, XK_Meta_R},	{MWKEY_PAUSE, XK_Pause},	{MWKEY_PRINT, XK_Print},	{MWKEY_SYSREQ, XK_Sys_Req},	{MWKEY_BREAK, XK_Break},	{MWKEY_NUMLOCK, XK_Num_Lock},	{MWKEY_CAPSLOCK, XK_Caps_Lock},	{MWKEY_SCROLLOCK, XK_Scroll_Lock},	{MWKEY_F1, XK_F1},	{MWKEY_F2, XK_F2},	{MWKEY_F3, XK_F3},	{MWKEY_F4, XK_F4},	{MWKEY_F5, XK_F5},	{MWKEY_F6, XK_F6},	{MWKEY_F7, XK_F7},	{MWKEY_F8, XK_F8},	{MWKEY_F9, XK_F9},	{MWKEY_F10, XK_F10},	{MWKEY_F11, XK_F11},	{MWKEY_F12, XK_F12},	{MWKEY_KP1, XK_KP_End},	{MWKEY_KP2, XK_KP_Down},	{MWKEY_KP3, XK_KP_Page_Down},	{MWKEY_KP4, XK_KP_Left},	{MWKEY_KP5, XK_KP_Home},	{MWKEY_KP6, XK_KP_Right},	{MWKEY_KP7, XK_KP_Home},	{MWKEY_KP8, XK_KP_Up},	{MWKEY_KP9, XK_KP_Page_Up},	{MWKEY_KP0, XK_KP_Insert},	{MWKEY_KP_PERIOD, XK_KP_Delete},	{MWKEY_KP_ENTER, XK_KP_Enter},	{MWKEY_KP_DIVIDE, XK_KP_Divide},	{MWKEY_KP_MULTIPLY, XK_KP_Multiply},	{MWKEY_KP_MINUS, XK_KP_Subtract},	{MWKEY_KP_PLUS, XK_KP_Add},	{MWKEY_MENU, XK_Menu},	{0xffff, 0xffff}};/* translate keycode to KeySym, no control/shift processing*/KeySymXKeycodeToKeysym(Display *dpy, unsigned int kc, int index){	int	i;	MWKEY	mwkey;	if (kc > 127)		return NoSymbol;	/* first convert scancode to mwkey*/	mwkey = mwscan_to_mwkey[kc];	/* then possibly convert mwkey to X KeySym*/	for (i=0; mwkey_to_xkey[i].nxKey != 0xffff; i++) {		if (mwkey == mwkey_to_xkey[i].nxKey)			return mwkey_to_xkey[i].xKey;	}	/* assume X KeySym is same as MWKEY value*/	return mwkey;}/* translate event->keycode into KeySym, no control/shift processing*/KeySymXLookupKeysym(XKeyEvent *event, int index){	return XKeycodeToKeysym(event->display, event->keycode, index);}/* translate event->keycode into *keysym, control/shift processing*/intXLookupString(XKeyEvent *event, char *buffer, int nbytes, KeySym *keysym,	XComposeStatus *status){	KeySym k;	k = XLookupKeysym(event, 0);	/* translate Control/Shift*/	if ((event->state & ControlMask) && k < 256)		k &= 0x1f;	else if (event->state & ShiftMask) {		if (k >= 'a' && k <= 'z')			k = k-'a'+'A';		else switch (k) {		case '`': k = '~'; break;		case '1': k = '!'; break;		case '2': k = '@'; break;		case '3': k = '#'; break;		case '4': k = '$'; break;		case '5': k = '%'; break;		case '6': k = '^'; break;		case '7': k = '&'; break;		case '8': k = '*'; break;		case '9': k = '('; break;		case '0': k = ')'; break;		case '-': k = '_'; break;		case '=': k = '+'; break;		case '\\': k = '|'; break;		case '[': k = '{'; break;		case ']': k = '}'; break;		case ';': k = ':'; break;		case '\'': k = '"'; break;		case ',': k = '<'; break;		case '.': k = '>'; break;		case '/': k = '?'; break;		}	}	*keysym = k;	if (nbytes > 0)		buffer[0] = '\0';	return 0;}/* Freeking ugly! */KeySymXStringToKeysym(_Xconst char *string){	int i;	for (i=0; i < NX_KEYSYMSTR_COUNT; i++)		if (strcmp(nxKeyStrings[i].str, string) == 0)			return nxKeyStrings[i].keysym;	return NoSymbol;}/* translate KeySym to KeyCode*/KeyCodeXKeysymToKeycode(Display *dpy, KeySym ks){	int i;	for (i=0; i<128; ++i)		if (mwscan_to_mwkey[i] == ks)			return i;	return NoSymbol;}#if 0000/* * Microwindows ttyscan.c compatible scancode conversion * table.  Note this is NOT the same as the Linux kernel * table due to the HACK XXX in ttyscan.c after getting * the kernel scancode.  FIXME */#define UNKNOWN	0static MWKEY mwscan_to_mwkey[128] = {	UNKNOWN,	/*  0*/	UNKNOWN,	/*  1*/	UNKNOWN,	/*  2*/	UNKNOWN,	/*  3*/	UNKNOWN,	/*  4*/	UNKNOWN,	/*  5*/	UNKNOWN,	/*  6*/	UNKNOWN,	/*  7*/	UNKNOWN,	/*  8*/	MWKEY_ESCAPE,	/*  9*/	'1',		/* 10*/	'2',		/* 11*/	'3',		/* 12*/	'4',		/* 13*/	'5',		/* 14*/	'6',		/* 15*/	'7',		/* 16*/	'8',		/* 17*/	'9',		/* 18*/	'0',		/* 19*/	'-',		/* 20*/	UNKNOWN,	/* 21*/	MWKEY_BACKSPACE,/* 22*/	MWKEY_TAB,	/* 23*/	'q',		/* 24*/	'w',		/* 25*/	'e',		/* 26*/	'r',		/* 27*/	't',		/* 28*/	'y',		/* 29*/	'u',		/* 30*/	'i',		/* 31*/	'o',		/* 32*/	'p',		/* 33*/	'[',		/* 34*/	']',		/* 35*/	MWKEY_ENTER,	/* 36*/	MWKEY_LCTRL,	/* 37*/	'a',		/* 38*/	's',		/* 39*/	'd',		/* 40*/	'f',		/* 41*/	'g',		/* 42*/	'h',		/* 43*/	'j',		/* 44*/	'k',		/* 45*/	'l',		/* 46*/	';',		/* 47*/	'\'',		/* 48*/	'`',		/* 49*/	MWKEY_LSHIFT,	/* 50*/	'\\',		/* 51*/	'z',		/* 52*/	'x',		/* 53*/	'c',		/* 54*/	'v',		/* 55*/	'b',		/* 56*/	'n',		/* 57*/	'm',		/* 58*/	',',		/* 59*/	'.',		/* 60*/	'/',		/* 61*/	MWKEY_RSHIFT,	/* 62*/	MWKEY_KP_MULTIPLY,/* 63*/	MWKEY_LALT,	/* 64*/	' ',		/* 65*/	UNKNOWN,	/* 66*/	MWKEY_F1,	/* 67*/	MWKEY_F2,	/* 68*/	MWKEY_F3,	/* 69*/	MWKEY_F4,	/* 70*/	MWKEY_F5,	/* 71*/	MWKEY_F6,	/* 72*/	MWKEY_F7,	/* 73*/	MWKEY_F8,	/* 74*/	MWKEY_F9,	/* 75*/	MWKEY_F10,	/* 76*/	UNKNOWN,	/* 77*/	UNKNOWN,	/* 78*/	MWKEY_KP7,	/* 79*/	MWKEY_KP8,	/* 80*/	MWKEY_KP9,	/* 81*/	MWKEY_KP_MINUS,	/* 82*/	MWKEY_KP4,	/* 83*/	MWKEY_KP5,	/* 84*/	MWKEY_KP6,	/* 85*/	MWKEY_KP_PLUS,	/* 86*/	MWKEY_KP1,	/* 87*/	MWKEY_KP2,	/* 88*/	MWKEY_KP3,	/* 89*/	MWKEY_KP0,	/* 90*/	MWKEY_KP_PERIOD,/* 91*/	UNKNOWN,	/* 92*/	UNKNOWN,	/* 93*/	UNKNOWN,	/* 94*/	MWKEY_F11,	/* 95*/	MWKEY_F12,	/* 96*/	MWKEY_HOME,	/* 97*/	MWKEY_UP,	/* 98*/	MWKEY_PAGEUP,	/* 99*/	MWKEY_LEFT,	/*100*/	UNKNOWN,	/*101*/	MWKEY_RIGHT,	/*102*/	MWKEY_END,	/*103*/	MWKEY_DOWN,	/*104*/	MWKEY_PAGEDOWN,	/*105*/	MWKEY_INSERT,	/*106*/	MWKEY_DELETE,	/*107*/	MWKEY_KP_ENTER,	/*108*/	MWKEY_RCTRL,	/*109*/	UNKNOWN,	/*110*/	MWKEY_PRINT,	/*111*/	MWKEY_KP_DIVIDE, /*112*/	MWKEY_RALT,	/*113*/	UNKNOWN,	/*114*/	UNKNOWN,	/*115*/	UNKNOWN,	/*116*/	UNKNOWN,	/*117*/	UNKNOWN,	/*118*/	UNKNOWN,	/*119*/	UNKNOWN,	/*120*/	UNKNOWN,	/*121*/	UNKNOWN,	/*122*/	UNKNOWN,	/*123*/	UNKNOWN,	/*124*/	UNKNOWN,	/*125*/	UNKNOWN,	/*126*/	UNKNOWN		/*127*/};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -