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

📄 command.c

📁 rxvt经典的linux下的终端.小巧实用
💻 C
📖 第 1 页 / 共 5 页
字号:
		case XK_F5:	/* "\033[15~" */		    FKEY(11, XK_F1);		    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(17, XK_F6);		    break;		case XK_F11:	/* "\033[23~" */		case XK_F12:	/* "\033[24~" */		case XK_F13:	/* "\033[25~" */		case XK_F14:	/* "\033[26~" */		    FKEY(23, XK_F11);		    break;		case XK_F15:	/* "\033[28~" */		case XK_F16:	/* "\033[29~" */		    FKEY(28, XK_F15);		    break;		case XK_Help:	/* "\033[28~" */		    FKEY(28, XK_Help);		    break;		case XK_Menu:	/* "\033[29~" */		    FKEY(29, XK_Menu);		    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(31, XK_F17);		    break;#undef FKEY		default:		    newlen = 0;		    break;		}		if (newlen)		    len = STRLEN(kbuf);	    }	/*	 * Pass meta for all function keys, if 'meta' option set	 */#ifdef META8_OPTION	    if (meta && (r->h->meta_char == 0x80) && len > 0)		kbuf[len - 1] |= 0x80;#endif	} else if (ctrl && keysym == XK_minus) {	    len = 1;	    kbuf[0] = '\037';	/* Ctrl-Minus generates ^_ (31) */	} else {#ifdef META8_OPTION	/* set 8-bit on */	    if (meta && (r->h->meta_char == 0x80)) {		unsigned char  *ch;		for (ch = kbuf; ch < kbuf + len; ch++)		    *ch |= 0x80;		meta = 0;	    }#endif#ifdef GREEK_SUPPORT	    if (r->h->greek_mode)		len = greek_xlat(kbuf, len);#endif	/* nil */ ;	}    }    if (len <= 0)	return;			/* not mapped */    if (r->Options & Opt_scrollTtyKeypress)	if (r->TermWin.view_start) {	    r->TermWin.view_start = 0;	    r->h->want_refresh = 1;	}/* * these modifications only affect the static keybuffer * pass Shift/Control indicators for function keys ending with `~' * * eg, *   Prior = "ESC[5~" *   Shift+Prior = "ESC[5$" *   Ctrl+Prior = "ESC[5^" *   Ctrl+Shift+Prior = "ESC[5@" * Meta adds an Escape prefix (with META8_OPTION, if meta == <escape>). */    if (kbuf[0] == C0_ESC && kbuf[1] == '[' && kbuf[len - 1] == '~')	kbuf[len - 1] = (shft ? (ctrl ? '@' : '$') : (ctrl ? '^' : '~'));/* escape prefix */    if (meta#ifdef META8_OPTION	&& (r->h->meta_char == C0_ESC)#endif	) {	const unsigned char ch = C0_ESC;	rxvt_tt_write(r, &ch, 1);    }#ifdef DEBUG_CMD    if (debug_key) {		/* Display keyboard buffer contents */	char           *p;	int             i;	fprintf(stderr, "key 0x%04X [%d]: `", (unsigned int)keysym, len);	for (i = 0, p = kbuf; i < len; i++, p++)	    fprintf(stderr, (*p >= ' ' && *p < '\177' ? "%c" : "\\%03o"), *p);	fprintf(stderr, "'\n");    }#endif				/* DEBUG_CMD */    rxvt_tt_write(r, kbuf, (unsigned int)len);}/*}}} */#if (MENUBAR_MAX)/*{{{ rxvt_cmd_write(), rxvt_cmd_getc() *//* attempt to `write' count to the input buffer *//* EXTPROTO */unsigned intrxvt_cmd_write(rxvt_t *r, const unsigned char *str, unsigned int count){    unsigned int    n, s;    unsigned char  *cmdbuf_base = r->h->cmdbuf_base,                   *cmdbuf_endp = r->h->cmdbuf_endp,                   *cmdbuf_ptr = r->h->cmdbuf_ptr;    n = cmdbuf_ptr - cmdbuf_base;    s = cmdbuf_base + BUFSIZ - 1 - cmdbuf_endp;    if (n > 0 && s < count) {	MEMMOVE(cmdbuf_base, cmdbuf_ptr,		(unsigned int)(cmdbuf_endp - cmdbuf_ptr));	cmdbuf_ptr = cmdbuf_base;	cmdbuf_endp -= n;	s += n;    }    if (count > s) {	rxvt_print_error("data loss: cmd_write too large");	count = s;    }    for (; count--;)	*cmdbuf_endp++ = *str++;    r->h->cmdbuf_ptr = cmdbuf_ptr;    r->h->cmdbuf_endp = cmdbuf_endp;    return 0;}#endif				/* MENUBAR_MAX *//* rxvt_cmd_getc() - Return next input character *//* * Return the next input character after first passing any keyboard input * to the command. *//* INTPROTO */unsigned charrxvt_cmd_getc(rxvt_t *r){#define TIMEOUT_USEC	5000    fd_set          readfds;    int             quick_timeout, select_res;    struct timeval  value;    struct rxvt_hidden *h = r->h;    if (h->cmdbuf_ptr < h->cmdbuf_endp)	/* characters already read in */        return *h->cmdbuf_ptr++;    for (;;) {    /* loop until we can return something */	if (h->v_bufstr < h->v_bufptr)	/* output any pending chars */	    rxvt_tt_write(r, NULL, 0);	while (XPending(r->Xdisplay)) {	/* process pending X events */	    XEvent          xev;	    XNextEvent(r->Xdisplay, &xev);#ifdef USE_XIM	    if (!XFilterEvent(&xev, xev.xany.window))		rxvt_process_x_event(r, &xev);	    h->event_type = xev.type;#else	    rxvt_process_x_event(r, &xev);#endif	/* in case button actions pushed chars to cmdbuf */	    if (h->cmdbuf_ptr < h->cmdbuf_endp)		return *h->cmdbuf_ptr++;	}/* * the command input buffer is empty and we have no pending X events */	quick_timeout = 0;#if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)	if (h->mouse_slip_wheel_speed) {	    quick_timeout = 1;	    if (!h->mouse_slip_wheel_delay--		&& rxvt_scr_page(r, h->mouse_slip_wheel_speed > 0 ? UP : DN,				 abs(h->mouse_slip_wheel_speed))) {		h->mouse_slip_wheel_delay = SCROLLBAR_CONTINUOUS_DELAY;		h->refresh_type |= SMOOTH_REFRESH;		h->want_refresh = 1;	    }	}#endif /* MOUSE_WHEEL && MOUSE_SLIP_WHEELING */#ifndef NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING	if (scrollbar_isUp() || scrollbar_isDn()) {	    quick_timeout = 1;	    if (!h->scroll_arrow_delay--		&& rxvt_scr_page(r, scrollbar_isUp() ? UP : DN, 1)) {		h->scroll_arrow_delay = SCROLLBAR_CONTINUOUS_DELAY;		h->refresh_type |= SMOOTH_REFRESH;		h->want_refresh = 1;	    }	}#endif				/* NO_SCROLLBAR_BUTTON_CONTINUAL_SCROLLING */	FD_ZERO(&readfds);	FD_SET(r->cmd_fd, &readfds);	FD_SET(r->Xfd, &readfds);	value.tv_usec = TIMEOUT_USEC;	value.tv_sec = 0;	if (!r->TermWin.mapped)	    quick_timeout = 0;	else {	    quick_timeout |= h->want_refresh;#ifdef TRANSPARENT	    quick_timeout |= h->want_full_refresh;#endif	}	if ((select_res = select(r->num_fds, &readfds, NULL, NULL,				 (quick_timeout ? &value : NULL))) == 0) {	/* select statement timed out - we're not hard and fast scrolling */	    h->refresh_limit = 1;	}    /* See if we can read new data from the application */	if (select_res > 0 && FD_ISSET(r->cmd_fd, &readfds)) {	    int             n;	    unsigned int    count;	    h->cmdbuf_ptr = h->cmdbuf_endp = h->cmdbuf_base;	    for (count = BUFSIZ; count; count -= n, h->cmdbuf_endp += n)		if ((n = read(r->cmd_fd, h->cmdbuf_endp, count)) > 0)		    continue;		else if (n == 0 || (n < 0 && errno == EAGAIN))		    break;		else {		    rxvt_clean_exit();		    exit(EXIT_FAILURE);	/* bad order of events? */		}	    if (count != BUFSIZ)	/* some characters read in */		return *h->cmdbuf_ptr++;	}#ifdef TRANSPARENT	if (h->want_full_refresh) {	    h->want_full_refresh = 0;	    rxvt_scr_clear(r);	    rxvt_scr_touch(r, False);	    h->want_refresh = 1;	}#endif	if (h->want_refresh) {	    rxvt_scr_refresh(r, h->refresh_type);	    rxvt_scrollbar_show(r, 1);#ifdef USE_XIM	    rxvt_IMSendSpot(r);#endif	}    }/* NOTREACHED */}/*}}} *//* INTPROTO */voidrxvt_mouse_report(rxvt_t *r, const XButtonEvent *ev){    int             button_number, key_state = 0;    int             x, y;    x = ev->x;    y = ev->y;    rxvt_pixel_position(r, &x, &y);    if (r->h->MEvent.button == AnyButton) {	button_number = 3;    } else {	button_number = r->h->MEvent.button - Button1;	/* add 0x3D for wheel events, like xterm does */	if (button_number >= 3)	    button_number += (64 - 3);    }    if (r->h->PrivateModes & PrivMode_MouseX10) {    /*     * do not report ButtonRelease     * no state info allowed     */	key_state = 0;	if (button_number == 3)	    return;    } else {    /* XTerm mouse reporting needs these values:     *   4 = Shift     *   8 = Meta     *  16 = Control     * plus will add in our own Double-Click reporting     *  32 = Double Click     */	key_state = ((r->h->MEvent.state & ShiftMask) ? 4 : 0)		     + ((r->h->MEvent.state & r->h->ModMetaMask) ? 8 : 0)		     + ((r->h->MEvent.state & ControlMask) ? 16 : 0);#ifdef MOUSE_REPORT_DOUBLECLICK	key_state += ((r->h->MEvent.clicks > 1) ? 32 : 0);#endif    }#ifdef DEBUG_MOUSEREPORT    fprintf(stderr, "Mouse [");    if (key_state & 16)	fputc('C', stderr);    if (key_state & 4)	fputc('S', stderr);    if (key_state & 8)	fputc('A', stderr);    if (key_state & 32)	fputc('2', stderr);    fprintf(stderr, "]: <%d>, %d/%d\n",	    button_number,	    x + 1,	    y + 1);#else    rxvt_tt_printf(r, "\033[M%c%c%c",	      (32 + button_number + key_state),	      (32 + x + 1),	      (32 + y + 1));#endif}#ifdef USING_W11LIB/* EXTPROTO */voidrxvt_W11_process_x_event(XEvent *ev){    rxvt_t         *r = rxvt_get_r();    rxvt_process_x_event(r, ev);}#endif/*{{{ process an X event *//* INTPROTO */voidrxvt_process_x_event(rxvt_t *r, XEvent *ev){    int             i, want_time = 0;    Window          unused_root, unused_child;    int             unused_root_x, unused_root_y;    unsigned int    unused_mask;    struct timeval  tp;    struct rxvt_hidden *h = r->h;#ifdef DEBUG_X    const char *const eventnames[] =    {				/* mason - this matches my system */	"",	"",	"KeyPress",	"KeyRelease",	"ButtonPress",	"ButtonRelease",	"MotionNotify",	"EnterNotify",	"LeaveNotify",	"FocusIn",	"FocusOut",	"KeymapNotify",	"Expose",	"GraphicsExpose",	"NoExpose",	"VisibilityNotify",	"CreateNotify",	"DestroyNotify",	"UnmapNotify",	"MapNotify",	"MapRequest",	"ReparentNotify",	"ConfigureNotify",	"ConfigureRequest",	"GravityNotify",	"ResizeRequest",	"CirculateNotify",	"CirculateRequest",	"PropertyNotify",	"SelectionClear",	"SelectionRequest",	"SelectionNotify",	"ColormapNotify",	"ClientMessage",	"MappingNotify"    };    struct tm      *ltt;#endif#ifdef DEBUG_X    want_time = 1;#else    /*     * check if we need to get the time for any timeouts     */    for (i = NUM_TIMEOUTS; i--; )	if (h->timeout[i].tv_sec) {	    want_time = 1;	    break;	}#endif    if (want_time)	(void)gettimeofday(&tp, NULL);#ifdef DEBUG_X    ltt = localtime(&(tp.tv_sec));    D_X((stderr, "Event: %-16s %-7s %08lx (%4d-%02d-%02d %02d:%02d:%02d.%.6ld) %s %lu", eventnames[ev->type], (ev->xany.window == r->TermWin.parent[0] ? "parent" : (ev->xany.window == r->TermWin.vt ? "vt" : (ev->xany.window == r->scrollBar.win ? "scroll" : (ev->xany.window == r->menuBar.win ? "menubar" : "UNKNOWN")))), (ev->xany.window == r->TermWin.parent[0] ? r->TermWin.parent[0] : (ev->xany.window == r->TermWin.vt ? r->TermWin.vt : (ev->xany.window == r->scrollBar.win ? r->scrollBar.win : (ev->xany.window == r->menuBar.win ? r->menuBar.win : 0)))), ltt->tm_year + 1900, ltt->tm_mon + 1, ltt->tm_mday, ltt->tm_hour, ltt->tm_min, ltt->tm_sec, tp.tv_usec, ev->xany.send_event ? "S" : " ", ev->xany.serial));#endif    /* X event timeouts */    if (want_time)	for (i = NUM_TIMEOUTS; i--; ) {	    if (h->timeout[i].tv_sec == 0)		continue;	    if ((tp.tv_sec < h->timeout[i].tv_sec)		|| (tp.tv_sec == h->timeout[i].tv_sec		    && tp.tv_usec < h->timeout[i].tv_usec))		continue;	    h->timeout[i].tv_sec = 0;	    switch(i) {	    case TIMEOUT_INCR:		rxvt_print_error("data loss: timeout on INCR selection paste");		h->selection_wait = Sel_none;		break;	    default:		break;	    }	}    switch (ev->type) {    case KeyPress:	rxvt_lookup_key(r, (XKeyEvent *)ev);	break;#if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)    case KeyRelease:	{	    if (!(ev->xkey.state & ControlMask))		h->mouse_slip_wheel_speed = 0;	    else {		KeySym          ks;				ks = XKeycodeToKeysym(r->Xdisplay, ev->xkey.keycode, 0);		if (ks == XK_Control_L || ks == XK_Control_R)		    h->mouse_slip_wheel_speed = 0;	    }	    break;	}#endif    case ButtonPress:	rxvt_button_press(r, (XButtonEvent *)ev);

⌨️ 快捷键说明

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