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

📄 init.c

📁 Mrxvt是一个小巧
💻 C
📖 第 1 页 / 共 5 页
字号:
	"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 */		r->vts[i] = NULL;	}	r->PixColors = (unsigned long*) rxvt_malloc(		sizeof(unsigned long) * (TOTAL_COLORS));#ifdef OFF_FOCUS_FADING	r->PixColorsUnfocus = (unsigned long*) rxvt_malloc(		sizeof(unsigned long) * (TOTAL_COLORS));#endif#ifdef XFT_SUPPORT	r->XftColors = (XftColor*) rxvt_malloc (		sizeof (XftColor) * (TOTAL_COLORS));#endif	if(		 NULL == r->h || NULL == r->PixColors#ifdef OFF_FOCUS_FADING		 || NULL == r->PixColorsUnfocus#endif#ifdef XFT_SUPPORT		 || NULL == r->XftColors#endif	  )		return -1;	r->Xdisplay = NULL;#ifdef USE_XIM	r->TermWin.fontset = NULL;#endif	r->TermWin.font = NULL;#ifdef MULTICHAR_SET	r->TermWin.mfont = NULL;#endif#ifndef NO_BOLDFONT	r->TermWin.bfont = NULL;#endif#ifdef XFT_SUPPORT	r->TermWin.xftpattern	= NULL;	r->TermWin.xftfont		= NULL;	r->TermWin.xftpfont		= NULL;	r->TermWin.xftPfont		= NULL;# ifndef NO_BOLDFONT	r->TermWin.xftbpattern	= NULL;	r->TermWin.xftbfont		= NULL;	r->TermWin.bf_switched	= 0;# endif	/* NO_BOLDFONT */# ifdef MULTICHAR_SET#  ifdef HAVE_ICONV_H	r->TermWin.xfticonv = (iconv_t) -1;#  endif	r->TermWin.xftmpattern = NULL;	r->TermWin.xftmfont = NULL;# endif	/* MULTICHAR_SET */#endif	/* XFT_SUPPORT */#ifdef OFF_FOCUS_FADING	r->color_switched = 0;	/* color is not switched */#endif	h->xa[XA_COMPOUND_TEXT] =	h->xa[XA_MULTIPLE] =	h->xa[XA_TARGETS] =	h->xa[XA_TEXT] =	h->xa[XA_TIMESTAMP] =	h->xa[XA_VT_SELECTION] =	h->xa[XA_INCR] = None;	h->locale = NULL;# ifdef HAVE_MENUBAR	r->h->BuildMenu = r->h->ActiveMenu = NULL;	r->h->popupMenu[0] = r->h->popupMenu[1] = r->h->popupMenu[2] = NULL;	r->h->showingMenu = 0;	/* Set the current menubar to empty defaults */	h->MenuBar.head = h->MenuBar.tail = NULL;	h->MenuBar.title = NULL;# endif# ifdef USE_XIM	h->Input_Context = NULL;# endif	/* h->v_bufstr = NULL; */	h->buffer = NULL;#ifdef TRANSPARENT	h->am_pixmap_trans = 0;	h->am_transparent  = 0;	h->rootPixmap	   = None;	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 = DEFAULT_OPTIONS;	r->Options2 = DEFAULT_OPTIONS2;	h->want_refresh = 1;	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;	r->vt_died = 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	r->numPixColors = TOTAL_COLORS;	/* 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;	r->selection.text = NULL;	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_limit = 1;	h->refresh_type = SLOW_REFRESH;	h->refreshRegion = None;			/* 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	r->TermWin.sm_conn = NULL;	r->TermWin.ice_conn = NULL;	r->TermWin.ice_fd = -1;	r->TermWin.sm_client_id = NULL;#endif	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_print_error("%s", error_msg);	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 */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];	r_argv[i] = NULL;	if (r_argc == argc)		cmd_argv = NULL;	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];		cmd_argv[i] = NULL;	}	/* clear all resources */	rs = r->h->rs;	for (i = 0; i < NUM_RESOURCES;)		rs[i++] = NULL;	rs[Rs_name] = rxvt_r_basename( argv[0] );	/*	 * Open display, get options/resources and create the window	 */	if( ( rs[Rs_display_name] = getenv("DISPLAY") ) == NULL)		rs[Rs_display_name] = ":0";	rxvt_get_options( r, r_argc, r_argv );	free( r_argv ); /* XXX memory leak? */#ifdef LOCAL_X_IS_UNIX	if( rs[Rs_display_name][0] == ':' )	{		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);		val[l-1] = (char) 0;		DBG_MSG(1, (stderr, "Open X display %s\n", val));		r->Xdisplay = XOpenDisplay(val);		free(val);	}#endif	if( r->Xdisplay == NULL )	{		DBG_MSG( 1, ( stderr, "Open X display %s\n",					rs[Rs_display_name] ? rs[Rs_display_name] : "nil"));		r->Xdisplay = XOpenDisplay( rs[Rs_display_name] );		if( NULL == r->Xdisplay )		{			rxvt_print_error( "can't open display %s", rs[Rs_display_name] );			exit( EXIT_FAILURE );		}	}#ifdef DEBUG_X	XSynchronize( r->Xdisplay, True );	XSetErrorHandler( (XErrorHandler) abort );	/* XSetErrorHandler((XErrorHandler) rxvt_xerror_handler); */#else	XSetErrorHandler( (XErrorHandler) rxvt_xerror_handler );#endif	/* Initialize all atoms after establishing connection to X */	for (i = 0; i < NUM_XA; i++)		r->h->xa[i] = XInternAtom( r->Xdisplay, xa_names[i], False );	rxvt_extract_resources( r, r->Xdisplay, rs[Rs_name] );	/*	 * set any defaults not already set	 */	if( cmd_argv && cmd_argv[0] )	{		if( !rs[Rs_title] )			rs[Rs_title] = rxvt_r_basename( cmd_argv[0] );		if( !rs[Rs_iconName] )			rs[Rs_iconName] = rs[Rs_title];	}	else	{		if( !rs[Rs_title] )			rs[Rs_title] = rs[Rs_name];		if( !rs[Rs_iconName] )			rs[Rs_iconName] = rs[Rs_name];	}	if( rs[Rs_maxTabWidth] )	{		register int	tmp = atoi( rs[ Rs_maxTabWidth]);		r->TermWin.maxTabWidth = ( tmp >=1 && tmp <= MAX_DISPLAY_TAB_TXT ) ?										tmp : MAX_DISPLAY_TAB_TXT;	}	else		/*		 * If we're using Xft, then we will probably also use a PFont. So we		 * should set this to the maximum possible.		 */		r->TermWin.maxTabWidth =#ifdef XFT_SUPPORT			(r->Options & Opt_xft) ? MAX_DISPLAY_TAB_TXT :

⌨️ 快捷键说明

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