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

📄 command.c

📁 Mrxvt是一个小巧
💻 C
📖 第 1 页 / 共 5 页
字号:
			if( r->numlock_state ) shft = 0;			if (AVTS(r)->PrivateModes & PrivMode_aplKP)			{				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c",						'y', ctrl, meta, shft );				break;			}			/* FALLTHROUGH */# endif	/* XK_KP_Prior */		case XK_Prior:			SET_TILDE_KEY_SEQ( kbuf, "\033[5");			break;# ifdef XK_KP_Next		case XK_KP_Next:		/* \033Os */			if( r->numlock_state ) shft = 0;			if (AVTS(r)->PrivateModes & PrivMode_aplKP)			{				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c",						's', ctrl, meta, shft );				break;			}			/* FALLTHROUGH */# endif	/* XK_KP_Next */		case XK_Next:			SET_TILDE_KEY_SEQ(kbuf, "\033[6");			break;		case XK_KP_Enter:	/* \033OM */			if (					(AVTS(r)->PrivateModes & PrivMode_aplKP)					&& ( !r->numlock_state || ctrl || meta || shft )			   )			{#ifdef NUMLOCK_ALWAYS_IGNORES_SHIFT				if( r->numlock_state ) shft = 0;#endif				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c", 'M',						ctrl, meta, shft );			}			else			{				kbuf[0] = '\r';				kbuf[1] = '\0';			}			break;#ifdef XK_KP_Begin		case XK_KP_Begin:	/* \033Ou (This is keypad 5) */			if( r->numlock_state ) shft = 0;			if (AVTS(r)->PrivateModes & PrivMode_aplKP)			{				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c", 'u',						ctrl, meta, shft );			}			else			{				kbuf[0] = '5';				kbuf[1] = '\0';			}			break;#endif	/* XK_KP_Begin */#ifdef XK_KP_Insert		case XK_KP_Insert:	/* \033Op */			if( r->numlock_state ) shft = 0;			if (AVTS(r)->PrivateModes & PrivMode_aplKP)			{				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c", 'p',						ctrl, meta, shft );				break;			}			/* FALLTHROUGH */#endif /* XK_KP_Insert */		case XK_Insert:			SET_TILDE_KEY_SEQ( kbuf, "\033[2" );			break;#ifdef XK_KP_Delete		case XK_KP_Delete:	/* \033On */			if( r->numlock_state ) shft = 0;			if (AVTS(r)->PrivateModes & PrivMode_aplKP)			{				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c", 'n',						ctrl, meta, shft );				break;			}			/* FALLTHROUGH */#endif		case XK_Delete:#ifndef NO_DELETE_KEY			STRCPY( kbuf, r->h->key_delete);#else			SET_TILDE_KEY_SEQ( kbuf, "\033[3" );#endif#ifdef MULTICHAR_SET			if (r->Options & Opt_mc_hack)			{				int			 col, row;				newlen = STRLEN(kbuf);				col = AVTS(r)->screen.cur.col;				row = AVTS(r)->screen.cur.row + AVTS(r)->saveLines;				if (IS_MULTI1(AVTS(r)->screen.rend[row][col]))					MEMMOVE(kbuf + newlen, kbuf, newlen + 1);			}#endif	/* MULTICHAR_SET */			break;		case XK_KP_Multiply:	/* "\033Oj" : "*" */		case XK_KP_Add:			/* "\033Ok" : "+" */		case XK_KP_Separator:	/* "\033Ol" : "," */		case XK_KP_Subtract:	/* "\033Om" : "-" */		case XK_KP_Divide:		/* "\033Oo" : "/" */		case XK_KP_Decimal:		/* "\033On" : "." */		case XK_KP_0:			/* "\033Op" : "0" */		case XK_KP_1:			/* "\033Oq" : "1" */		case XK_KP_2:			/* "\033Or" : "2" */		case XK_KP_3:			/* "\033Os" : "3" */		case XK_KP_4:			/* "\033Ot" : "4" */		case XK_KP_5:			/* "\033Ou" : "5" */		case XK_KP_6:			/* "\033Ov" : "6" */		case XK_KP_7:			/* "\033Ow" : "7" */		case XK_KP_8:			/* "\033Ox" : "8" */		case XK_KP_9:			/* "\033Oy" : "9" */			/*			 * If numlock is on, and no modifiers are presed, then we should			 * send the actual number key. If modifiers are pressed, send the			 * DEC sequence (after canceling shift ofcourse).			 *			 * If numlock is off, then send the DEC terminal sequence.			 */			if (					(AVTS(r)->PrivateModes & PrivMode_aplKP)					&& ( !r->numlock_state || ctrl || meta || shft )			   )			{				if(						r->numlock_state#ifndef NUMLOCK_ALWAYS_IGNORES_SHIFT						&& keysym >= XK_KP_Decimal && keysym <= XK_KP_9#endif				  )					/*					 * Cancel shift if numlock is pressed, but only cancel it					 * for keys where shift has some meaning: 0-9 and Decimal.					 * If NUMLOCK_ALWAYS_IGNORES_SHIFT is defined, then shift is					 * always cancelled when numlock is on.					 */					shft = 0;				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c",						'j' + (keysym - XK_KP_Multiply), ctrl, meta, shft );			}			else			{				kbuf[0] = ('*' + (keysym - XK_KP_Multiply));				kbuf[1] = '\0';			}			break;		case XK_Find:			SET_TILDE_KEY_SEQ(kbuf, "\033[1");			break;#ifdef DXK_Remove		/* support for DEC remove like key */		case DXK_Remove:			/* FALLTHROUGH */#endif	/* DXK_Remove */		case XK_Execute:			SET_TILDE_KEY_SEQ(kbuf, "\033[3");			break;		case XK_Select:			SET_TILDE_KEY_SEQ(kbuf, "\033[4");			break;#ifdef XK_KP_End		case XK_KP_End:	/* \033Oq */			if( r->numlock_state ) shft = 0;			if (AVTS(r)->PrivateModes & PrivMode_aplKP)			{				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c", 'q',						ctrl, meta, shft );				break;			}			/* FALLTHROUGH */#endif	/* XK_KP_End */		case XK_End:			if (r->Options2 & Opt2_linuxHomeEndKey)				SET_TILDE_KEY_SEQ( kbuf, KS_END_LINUX);			else				SET_TILDE_KEY_SEQ( kbuf, KS_END);			break;#ifdef XK_KP_Home		case XK_KP_Home: /* \033Ow */			if( r->numlock_state ) shft = 0;			if (AVTS(r)->PrivateModes & PrivMode_aplKP)			{				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c", 'w',						ctrl, meta, shft );				break;			}			/* FALLTHROUGH */#endif	/* XK_KP_Home */		case XK_Home:			if (r->Options2 & Opt2_linuxHomeEndKey)				SET_TILDE_KEY_SEQ( kbuf, KS_HOME_LINUX);			else				SET_TILDE_KEY_SEQ( kbuf, KS_HOME);			break;#define FKEY_SEQ_START( n, fkey)	\		sprintf( (char*) kbuf, "\033[%2d", (n) + (int) (keysym - (fkey)) );		case XK_KP_F1:	/* "\033OP" */		case XK_KP_F2:	/* "\033OQ" */		case XK_KP_F3:	/* "\033OR" */		case XK_KP_F4:	/* "\033OS" */			/* XXX 2006-04-08 gi1242: Should we cancel shift here? */			if ( AVTS(r)->PrivateModes & PrivMode_aplKP )			{				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c",						'P' + (keysym - XK_KP_F1), ctrl, meta, shft);				break;			}			else				keysym = XK_F1 + (keysym - XK_KP_F1);			/* FALLTHROUGH */		case XK_F1:	/* "\033[11~" */		case XK_F2:	/* "\033[12~" */		case XK_F3:	/* "\033[13~" */		case XK_F4:	/* "\033[14~" */			if (TERMENV_XTERM == AVTS(r)->termenv)			{				/* Xterm sends \eOP, \eOQ, \eOR, \eOS for f1 -- f4 */				set_xterm_key_seq( kbuf, "\033O", "\033O%d%c",						'P' + (keysym - XK_F1), ctrl, meta, shft);				break;			}			/* else FALL THROUGH */		case XK_F5:	/* "\033[15~" */			FKEY_SEQ_START( 11, XK_F1);			SET_TILDE_KEY_SEQ( kbuf + 4, "" );			break;		case XK_F6:		/* "\033[17~" */		case XK_F7:		/* "\033[18~" */		case XK_F8:		/* "\033[19~" */		case XK_F9:		/* "\033[20~" */		case XK_F10:	/* "\033[21~" */			FKEY_SEQ_START(17, XK_F6);			SET_TILDE_KEY_SEQ( kbuf + 4, "" );			break;		case XK_F11:	/* "\033[23~" */		case XK_F12:	/* "\033[24~" */		case XK_F13:	/* "\033[25~" */		case XK_F14:	/* "\033[26~" */			FKEY_SEQ_START(23, XK_F11);			SET_TILDE_KEY_SEQ( kbuf + 4, "" );			break;		case XK_F15:	/* "\033[28~" */		case XK_F16:	/* "\033[29~" */			FKEY_SEQ_START(28, XK_F15);			SET_TILDE_KEY_SEQ( kbuf + 4, "" );			break;		case XK_Help:	/* "\033[28~" */			FKEY_SEQ_START(28, XK_Help);			SET_TILDE_KEY_SEQ( kbuf + 4, "" );			break;		case XK_Menu:	/* "\033[29~" */			FKEY_SEQ_START(29, XK_Menu);			SET_TILDE_KEY_SEQ( kbuf + 4, "" );			break;		case XK_F17:	/* "\033[31~" */		case XK_F18:	/* "\033[32~" */		case XK_F19:	/* "\033[33~" */		case XK_F20:	/* "\033[34~" */		case XK_F21:	/* "\033[35~" */		case XK_F22:	/* "\033[36~" */		case XK_F23:	/* "\033[37~" */		case XK_F24:	/* "\033[38~" */		case XK_F25:	/* "\033[39~" */		case XK_F26:	/* "\033[40~" */		case XK_F27:	/* "\033[41~" */		case XK_F28:	/* "\033[42~" */		case XK_F29:	/* "\033[43~" */		case XK_F30:	/* "\033[44~" */		case XK_F31:	/* "\033[45~" */		case XK_F32:	/* "\033[46~" */		case XK_F33:	/* "\033[47~" */		case XK_F34:	/* "\033[48~" */		case XK_F35:	/* "\033[49~" */			FKEY_SEQ_START(31, XK_F17);			SET_TILDE_KEY_SEQ( kbuf + 4, "" );			break;#undef FKEY_SEQ_START		default:			newlen = 0;			break;	}	/* switch (keysym) */	DBG_MSG( 5, ( stderr, "Returning %d\n", newlen ? STRLEN(kbuf) : -1 ));	return newlen ? STRLEN(kbuf) : -1;	/*	 * B: end of a {} body	 */}/* }}} *//*{{{ Convert the keypress event into a string *//* INTPROTO */voidrxvt_process_keypress (rxvt_t* r, XKeyEvent *ev){	int				ctrl, meta, shft, len;	KeySym			keysym;#ifdef USE_DEADKEY	static KeySym	accent = 0;#endif	/* USE_DEADKEY */#ifdef DEBUG_CMD	static int		debug_key = 1;	/* accessible by a debugger only */#endif	/* DEBUG_CMD */#ifdef USE_XIM	int				valid_keysym = 0;#endif	/* USE_XIM */    /*    ** kbuf should be static in order to avoid performance penalty    ** on allocation in the stack. And we only define it inside this    ** function to avoid potential abuse of this buffer at somewhere    ** else.    */	static unsigned char kbuf[KBUFSZ];	/* was r->h->kbuf */	DBG_MSG(2, (stderr, "KeyPress event\n"));	shft = (ev->state & ShiftMask);	ctrl = (ev->state & ControlMask);	meta = (ev->state & r->h->ModMetaMask);#if 0 /* {{{ Old numlock handling (conflicts with Xterm) */	/*	 * use Num_Lock to toggle Keypad on/off.  If Num_Lock is off,	 * allow an escape sequence to toggle the Keypad. Always permit	 * `shift' to override the current setting	 */	if (r->numlock_state || (ev->state & r->h->ModNumLockMask))	{		r->numlock_state = (ev->state & r->h->ModNumLockMask);		PrivMode((!r->numlock_state), PrivMode_aplKP, ATAB(r));	}#endif /*}}}*/	/*	 * 2006-04-07 gi1242: Don't toggle the Keypad on pressing num lock. Only	 * store the numlock state so that we can cancel shift if numlock is	 * pressed, and we get an un-shifted keypad key.	 */	r->numlock_state = ( ev->state & r->h->ModNumLockMask );#ifdef USE_XIM	if (r->h->Input_Context != NULL)	{		Status		  status_return;		kbuf[0] = '\0';		len = XmbLookupString(r->h->Input_Context, ev, (char *)kbuf,				  KBUFSZ, &keysym, &status_return);		valid_keysym = ((status_return == XLookupKeySym) ||						(status_return == XLookupBoth));	}	else	{		valid_keysym = 1;#endif	/* USE_XIM */		/*		******************************************************		** Begin of part that is used when XIM is disabled		*/		len = XLookupString(ev, (char *)kbuf, KBUFSZ, &keysym, NULL);		/*		** map unmapped Latin[2-4]/Katakana/Arabic/Cyrillic/Greek		** entries -> Latin1. good for installations with correct		** fonts, but without XLOCALE		*/		if (!len)		{			if ((keysym >= 0x0100) && (keysym < 0x0800))			{				kbuf[0] = (keysym & 0xFF);				kbuf[1] = '\0';				len = 1;			}			else				kbuf[0] = '\0';		}		/*		** End of part that is used when XIM is disabled		******************************************************		*/#ifdef USE_XIM	}#endif	/* USE_XIM */#ifdef USE_DEADKEY	if (0 != accent)	{		if (				!ctrl && !meta /* NO ctrl or meta */				&& (					XK_A == keysym || XK_a == keysym					|| XK_C == keysym || XK_c == keysym					|| XK_E == keysym || XK_e == keysym					|| XK_I == keysym || XK_i == keysym					|| XK_N == keysym || XK_n == keysym					|| XK_O == keysym || XK_o == keysym					|| XK_U == keysym || XK_u == keysym					|| XK_Y == keysym || XK_y == keysym				   )		   )		{			register int	idx;			KeySym	dk;			/* dead key + space -> dead key itself */			switch (accent)			{				case XK_dead_grave:			/* ` */					dk = XK_grave;					break;				case XK_dead_acute:			/* ' */					dk = XK_acute;					break;				case XK_dead_circumflex:	/* ^ */					dk = XK_asciicircum;					break;				case XK_dead_diaeresis:		/* " */					dk = XK_quotedbl;					break;				case XK_dead_tilde:			/* ~ */					dk = XK_asciitilde;					break;			}	/* switch(accent) */			for (idx = 0; idx < DEADKEY_CHAR_NUMBER; idx++)			{				if (keysym == dkc_tab[idx].ks && dk == dkc_tab[idx].dk)				{					kbuf[0] = (unsigned char) dkc_tab[idx].ach;					break;				}			}			assert (0 != kbuf[0]);	/* impossible */			len = 1;			accent = 0;	/* clear accent anyway */		}	/* if */		else if (					!ctrl && !meta			/* NO ctrl or meta */					&& (XK_space == keysym || accent == keysym)				)

⌨️ 快捷键说明

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