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

📄 init.c

📁 multi-tabed terminal based on rxvt
💻 C
📖 第 1 页 / 共 5 页
字号:
    "rgbi:1/1/1",# endif	/* XTERM_COLORS */    "rgb:08/08/08", /* xterm, rxvt, mrxvt use the same greyscale ramp */    "rgb:12/12/12",    "rgb:1c/1c/1c",    "rgb:26/26/26",    "rgb:30/30/30",    "rgb:3a/3a/3a",    "rgb:44/44/44",    "rgb:4e/4e/4e",    "rgb:58/58/58",    "rgb:62/62/62",    "rgb:6c/6c/6c",    "rgb:76/76/76",    "rgb:80/80/80",    "rgb:8a/8a/8a",    "rgb:94/94/94",    "rgb:9e/9e/9e",    "rgb:a8/a8/a8",    "rgb:b2/b2/b2",    "rgb:bc/bc/bc",    "rgb:c6/c6/c6",    "rgb:d0/d0/d0",    "rgb:da/da/da",    "rgb:e4/e4/e4",    "rgb:ee/ee/ee",#endif	/* TTY_256COLOR */#ifndef NO_CURSORCOLOR    COLOR_CURSOR_BACKGROUND,    COLOR_CURSOR_FOREGROUND,#endif		    /* ! NO_CURSORCOLOR */    NULL,	    /* Color_pointer		    */    NULL,	    /* Color_border		    */    NULL,	    /* Color_ufbg		    */#ifndef NO_BOLD_UNDERLINE_REVERSE    NULL,	    /* Color_BD			    */    NULL,	    /* Color_UL			    */    NULL,	    /* Color_RV			    */#endif		    /* ! NO_BOLD_UNDERLINE_REVERSE  */#ifdef OPTION_HC    NULL,	    /* Color_HL			    */#endif#ifdef KEEP_SCROLLCOLOR    COLOR_SCROLLBAR,    COLOR_SCROLLTROUGH,#endif		    /* KEEP_SCROLLCOLOR */#ifdef TINTING_SUPPORT# ifdef HAVE_LIBXRENDER    "rgb:00/00/00",# else    "rgb:ff/ff/ff",# endif#endif};/*** MUST sync with rxvt.h:enum XA_XXXX*/const char *const xa_names[NUM_XA] = {    "COMPOUND_TEXT",    "UTF8_STRING",    "TEXT",    "MULTIPLE",	    "TARGETS",	    "TIMESTAMP",    "VT_SELECTION",    "INCR",    "WM_DELETE_WINDOW",    "_NET_WM_DESKTOP",    "_WIN_WORKSPACE",    "_NET_WM_NAME",    "_NET_WM_ICON_NAME",    "WM_CLIENT_LEADER",    "_NET_WM_WINDOW_OPACITY",#ifndef NO_FRILLS    "_NET_WM_PID",#endif#ifdef HAVE_X11_SM_SMLIB_H    "SM_CLIENT_ID",#endif#ifdef USE_XIM    "WM_LOCALE_NAME",#endif#ifdef TRANSPARENT    "_XROOTPMAP_ID",    "_XSETROOT_ID",#endif#ifdef OFFIX_DND    "DndProtocol",    "DndSelection",#endif    "CLIPBOARD"};/* substitute system functions */#if defined(OS_SVR4) && ! defined(_POSIX_VERSION)/* INTPROTO */intrxvt_getdtablesize(void){    struct rlimit   rlim;    getrlimit(RLIMIT_NOFILE, &rlim);    return rlim.rlim_cur;}#endif/* EXTPROTO */intrxvt_init_vars(rxvt_t *r){    register int	i;    struct rxvt_hidden*	h;    MEMSET(r, 0, sizeof(rxvt_t));    h = r->h = (struct rxvt_hidden *)rxvt_calloc(1, sizeof(struct rxvt_hidden));    for (i = 0; i < MAX_PAGES; i ++)    {	/* Initialize vts_idx for each term_t structure */	r->vterm[i].vts_idx = -1;	/* Initialize each vts pointer */	SET_NULL(r->vts[i]);    }    SET_NULL(r->Xdisplay);#ifdef USE_XIM    SET_NULL(r->TermWin.fontset);#endif    SET_NULL(r->TermWin.font);#ifdef MULTICHAR_SET    SET_NULL(r->TermWin.mfont);#endif#ifndef NO_BOLDFONT    SET_NULL(r->TermWin.bfont);#endif#ifdef XFT_SUPPORT    SET_NULL(r->TermWin.xftpattern);    SET_NULL(r->TermWin.xftfont);    SET_NULL(r->TermWin.xftpfont);    SET_NULL(r->TermWin.xftPfont);# ifndef NO_BOLDFONT    SET_NULL(r->TermWin.xftbfont);# endif	/* NO_BOLDFONT */# ifdef MULTICHAR_SET#  ifdef HAVE_ICONV_H    r->TermWin.xfticonv = (iconv_t) -1;#  endif    SET_NULL(r->TermWin.xftmpattern);    SET_NULL(r->TermWin.xftmfont);# endif	/* MULTICHAR_SET */#endif	/* XFT_SUPPORT */    UNSET_ATOM(h->xa[XA_COMPOUND_TEXT]);    UNSET_ATOM(h->xa[XA_MULTIPLE]);    UNSET_ATOM(h->xa[XA_TARGETS]);    UNSET_ATOM(h->xa[XA_TEXT]);    UNSET_ATOM(h->xa[XA_TIMESTAMP]);    UNSET_ATOM(h->xa[XA_VT_SELECTION]);    UNSET_ATOM(h->xa[XA_INCR]);    h->locale = NULL;# ifdef HAVE_MENUBAR    SET_NULL(h->BuildMenu);    SET_NULL(h->ActiveMenu);    SET_NULL(h->popupMenu[0]);    SET_NULL(h->popupMenu[1]);    SET_NULL(h->popupMenu[2]);    h->showingMenu = 0;    /* Set the current menubar to empty defaults */    SET_NULL(h->MenuBar.head);    SET_NULL(h->MenuBar.tail);    SET_NULL(h->MenuBar.title);# endif# ifdef USE_XIM    SET_NULL(h->Input_Context);# endif    /* SET_NULL(h->v_bufstr); */    SET_NULL(h->buffer);# ifdef TRANSPARENT    h->am_pixmap_trans = 0;    h->am_transparent  = 0;    UNSET_PIXMAP(h->rootPixmap);    h->bgRefreshInterval = DEFAULT_BG_REFRESH_INTERVAL;    h->lastCNotify.tv_sec = 0;	    /* No BG update pending */# endif    /* Initialize timeouts to 0 */    for( i=NUM_TIMEOUTS; i--;)        h->timeout[i].tv_sec = 0;    /* Back to undocumented code :) */    h->MEvent.time = CurrentTime;    h->MEvent.button = AnyButton;    r->Options[0] = DEFAULT_OPTIONS;    r->Options[1] = DEFAULT_OPTIONS2;    r->Options[2] = DEFAULT_OPTIONS3;    r->Options[3] = DEFAULT_OPTIONS4;    h->want_clip_refresh = 0;    /*     * We only want to set want_resize when we call XResizeWindow. In that     * case if XResizeWindow fails, we know that we called it, and can run     * our internal resize routines anyway (e.g. put the tabbar in place)     */    h->want_resize = 0;    h->ttygid = -1;    r->Xfd = -1;#ifdef USE_FIFO    r->fifo_fd = -1;#endif    r->ndead_childs = 0;    r->nAsyncChilds = 0;    /* default values */#ifdef NO_FRILLS    r->TermWin.int_bwidth = DEFAULT_INTERNALBORDERWIDTH;    r->TermWin.ext_bwidth = DEFAULT_EXTERNALBORDERWIDTH;#else    r->TermWin.int_bwidth = (INTERNALBORDERWIDTH >= 0 && INTERNALBORDERWIDTH <= MAX_INTERNALBORDERWIDTH) ? INTERNALBORDERWIDTH : DEFAULT_INTERNALBORDERWIDTH;    r->TermWin.ext_bwidth = (EXTERNALBORDERWIDTH >= 0 && EXTERNALBORDERWIDTH <= MAX_EXTERNALBORDERWIDTH) ? EXTERNALBORDERWIDTH : DEFAULT_EXTERNALBORDERWIDTH;#endif#ifndef NO_LINESPACE    r->TermWin.lineSpace = (LINESPACE >= 0 && LINESPACE <= MAX_LINESPACE) ? LINESPACE : DEFAULT_LINESPACE;#endif#ifdef CURSOR_BLINK    r->h->blinkInterval = DEFAULT_BLINK_TIME;#endif#ifdef POINTER_BLANK    r->h->pointerBlankDelay = DEFAULT_BLANKDELAY;#endif    /* Initialize selection data */#ifndef NO_NEW_SELECTION    r->selection_style = NEW_SELECT;#else    r->selection_style = OLD_SELECT;#endif    r->selection.vt = -1;    r->selection.op = SELECTION_CLEAR;    r->selection.screen = PRIMARY;    r->selection.clicks = 0;    SET_NULL(r->selection.text);    r->selection.len = 0;    r->selection.beg.row = 0;    r->selection.beg.col = 0;    r->selection.end.row = 0;    r->selection.end.col = 0;#ifndef NO_BRIGHTCOLOR    h->colorfgbg = DEFAULT_RSTYLE;#endif#ifdef GREEK_SUPPORT    h->ks_greekmodeswith = GREEK_KEYBOARD_MODESWITCH;#endif    h->refresh_type = SLOW_REFRESH;    UNSET_REGION(h->refreshRegion);	    /* Will be created when needed */    h->prev_nrow = h->prev_ncol = 0;    r->encoding_method = ENC_NOENC;    h->multichar_decode = rxvt_decode_dummy;    h->oldcursor.row = h->oldcursor.col = -1;    h->last_bot = h->last_state = -1;#ifdef HAVE_X11_SM_SMLIB_H    SET_NULL(r->TermWin.sm_conn);    SET_NULL(r->TermWin.ice_conn);    r->TermWin.ice_fd = -1;    SET_NULL(r->TermWin.sm_client_id);#endif#ifdef USE_FIFO    {	char fifo_name[FILENAME_MAX];	sprintf( fifo_name, "/tmp/.mrxvt-%d", getpid() );	r->fbuf_ptr = r->fifo_buf;	r->fifo_name = STRDUP( fifo_name );    }#endif/*USE_FIFO*/    r->tabClicked = -1; /* No tab has been clicked by user */    h->allowedxerror = 0;    h->xerror_return = Success;    return 0;}/* EXTPROTO */voidrxvt_init_secondary(rxvt_t *r){    int		i, num_fds;#ifdef TTY_GID_SUPPORT    struct group   *gr = getgrnam("tty");    if (gr)	    /* change group ownership of tty to "tty" */    {	r->h->ttygid = gr->gr_gid;    }    else#endif		    /* TTY_GID_SUPPORT */    {	r->h->ttygid = getgid();    }    rxvt_set_default_locale (r);    /* get number of available file descriptors */#if defined(_POSIX_VERSION) || ! defined(OS_SVR4)    num_fds = (int)sysconf(_SC_OPEN_MAX);#else    num_fds = rxvt_getdtablesize();#endif    /*    ** Close all unused file descriptors    ** We don't want them, we don't need them.    */    if ((i = open("/dev/null", O_RDONLY)) < 0)    {	/* TODO: BOO HISS */	dup2(STDERR_FILENO, STDIN_FILENO);    }    else if (i > STDIN_FILENO)    {	dup2(i, STDIN_FILENO);	close(i);    }    dup2(STDERR_FILENO, STDOUT_FILENO);    for (i = STDERR_FILENO + 1; i < num_fds; i++)    {    /* #ifdef __sgi */#ifdef OS_IRIX	/* Alex Coventry says we need 4 & 7 too */	if (i == 4 || i == 7)	    continue;#endif	close(i);    }    /* Now set the correct num_fds */    r->num_fds = STDERR_FILENO + 1;#ifdef OS_IRIX    r->num_fds = 7 + 1;#endif}/* INTPROTO */intrxvt_xerror_handler(const Display *display __attribute__((unused)), const XErrorEvent *event){    rxvt_t*	r = rxvt_get_r();    char    error_msg[1024];    XGetErrorText (r->Xdisplay, event->error_code, error_msg, 1023);    r->h->xerror_return = event->error_code;    if( !r->h->allowedxerror )    {	rxvt_msg (DBG_ERROR, DBG_INIT, "%s", error_msg);#ifdef DEBUG_X	abort();#endif    }    return 0;	    /* ignored anyway */}#ifdef TEXT_SHADOW/* INTPROTO */voidrxvt_init_shadow_mode (rxvt_t* r, const char* shadow_mode){    if (	  !shadow_mode || !STRCASECMP ("botright", shadow_mode)	  || !STRCASECMP ("default", shadow_mode))    {	r->TermWin.shadow_mode = SHADOW_BOTRIGHT;    }    else if (!STRCASECMP ("botleft", shadow_mode))    {	r->TermWin.shadow_mode = SHADOW_BOTLEFT;    }    else if (!STRCASECMP ("topright", shadow_mode))    {	r->TermWin.shadow_mode = SHADOW_TOPRIGHT;    }    else if (!STRCASECMP ("topleft", shadow_mode))    {	r->TermWin.shadow_mode = SHADOW_TOPLEFT;    }    else if (!STRCASECMP ("top", shadow_mode))    {	r->TermWin.shadow_mode = SHADOW_TOP;    }    else if (!STRCASECMP ("bottom", shadow_mode))    {	r->TermWin.shadow_mode = SHADOW_BOTTOM;    }    else if (!STRCASECMP ("left", shadow_mode))    {	r->TermWin.shadow_mode = SHADOW_LEFT;    }    else if (!STRCASECMP ("right", shadow_mode))    {	r->TermWin.shadow_mode = SHADOW_RIGHT;    }    else if (!STRCASECMP ("none", shadow_mode))    {	r->TermWin.shadow_mode = SHADOW_NONE;    }    else	/* no match == default */    {	r->TermWin.shadow_mode = SHADOW_NONE;    }}#endif/*----------------------------------------------------------------------*//* EXTPROTO */voidrxvt_set_jumpscroll( rxvt_t *r ){    if( r->h->rs[Rs_refreshLimit] )    {	r->h->refresh_limit = atol( r->h->rs[Rs_refreshLimit] );	if( r->h->refresh_limit < 0 )	    r->h->refresh_limit = 0;    }    else	r->h->refresh_limit = DEFAULT_REFRESH_LIMIT;    if( r->h->rs[Rs_skipPages] )    {	r->h->skip_pages = atol( r->h->rs[Rs_skipPages] );	if( r->h->skip_pages <= 0 )	    r->h->skip_pages = 1;    }    else	r->h->skip_pages = DEFAULT_SKIP_PAGES;}/* EXTPROTO */const char**rxvt_init_resources(rxvt_t* r, int argc, const char *const *argv){    register int    i, r_argc;    const char**    cmd_argv;    const char**    r_argv;    const char**    rs;    /*     * Look for -exec option.  Find => split and make cmd_argv[] of command args     */    for( r_argc = 0; r_argc < argc; r_argc++ )	if( !STRCMP(argv[r_argc], "-e") || !STRCMP(argv[r_argc], "-exec") )	    break;    r_argv = (const char**) rxvt_malloc( sizeof(char*) * (r_argc + 1) );    for( i = 0; i < r_argc; i++ )	r_argv[i] = (const char*) argv[i];    SET_NULL(r_argv[i]);    if (r_argc == argc)	SET_NULL(cmd_argv);    else    {	cmd_argv = (const char **)rxvt_malloc(sizeof(char*) * (argc - r_argc));	for (i = 0; i < argc - r_argc - 1; i++)	    cmd_argv[i] = (const char *)argv[i + r_argc + 1];	SET_NULL(cmd_argv[i]);    }    /* clear all resources */    rs = r->h->rs;    for (i = 0; i < NUM_RESOURCES;)	SET_NULL(rs[i++]);    rs[Rs_name] = rxvt_r_basename( argv[0] );    /*     * Open display, get options/resources and create the window     */    rxvt_get_options( r, r_argc, r_argv );    rxvt_free( r_argv ); /* XXX memory leak? */#ifdef LOCAL_X_IS_UNIX    /*     * 2008-04-29 gi1242: Force UNIX sockets for security (Gentoo Bug #219750)     */    if( IS_NULL( rs[Rs_display_name] ) )	rs[Rs_display_name] = getenv( "DISPLAY" );    if( rs[Rs_display_name] && rs[Rs_display_name][0] == ':' )    {	char *val;	int l = 5 + STRLEN(rs[Rs_display_name]);	if (l <= 0 || l > 1024) /* possible integer overflow */	    l = 1024;	val = rxvt_malloc(l);	STRCPY( val, "unix");	STRNCAT( val, rs[Rs_display_name], l-5);	rs[Rs_display_name] = val;

⌨️ 快捷键说明

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