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

📄 init.c

📁 Mrxvt是一个小巧
💻 C
📖 第 1 页 / 共 5 页
字号:
#endif			DEFAULT_DISPLAY_TAB_TXT;	if( rs[Rs_minVisibleTabs] )	{		register int	n = atoi( rs[Rs_minVisibleTabs] );		r->TermWin.minVisibleTabs = (n >= 2 && n <= MAX_PAGES) ?			n : DEFAULT_MIN_VISIBLE_TABS;	}	else r->TermWin.minVisibleTabs = DEFAULT_MIN_VISIBLE_TABS;#ifndef NO_FRILLS	if (rs[Rs_int_bwidth])	{		register int	tmp = atoi( rs[Rs_int_bwidth] );		r->TermWin.int_bwidth =( tmp >= 0 && tmp <= MAX_INTERNALBORDERWIDTH ) ?										tmp : DEFAULT_INTERNALBORDERWIDTH;	}	if (rs[Rs_ext_bwidth])	{		register int	tmp = atoi( rs[Rs_ext_bwidth] );		r->TermWin.ext_bwidth = (tmp >= 0 && tmp <= MAX_EXTERNALBORDERWIDTH) ?										tmp : DEFAULT_EXTERNALBORDERWIDTH;	}#endif#ifndef NO_LINESPACE	if (rs[Rs_lineSpace])	{		register int	tmp = atoi( rs[Rs_lineSpace] );		r->TermWin.lineSpace = (tmp >= 0 && tmp <= MAX_LINESPACE) ?										tmp : DEFAULT_LINESPACE;	}#endif#ifdef POINTER_BLANK	if (rs[Rs_pointerBlankDelay])	{		register int	tmp = atoi( rs[Rs_pointerBlankDelay] );		r->h->pointerBlankDelay = (tmp >= 0 && tmp <= MAX_BLANKDELAY) ?										tmp : DEFAULT_BLANKDELAY;	}#endif	/* Handle opacity of translucent window */	if (rs[Rs_opacity])		{		register int	tmp = atoi( rs[Rs_opacity] );		r->TermWin.opacity = (tmp >= 0 && tmp <= 100) ? 100 - tmp : 0;#ifdef TRANSPARENT		if (			  None != r->h->xa[XA_NET_WM_WINDOW_OPACITY]			  && r->Options & Opt_transparent		   )		{			/* Override pseudo-transparent */			r->Options &= ~Opt_transparent;		}#endif	}	if (rs[Rs_opacityDegree])		{		register int	tmp = atoi (rs[Rs_opacityDegree]);		r->TermWin.opacity_degree = (tmp > 0 && tmp <= 100) ? tmp : 1;	}#ifdef TINTING_SUPPORT	if (rs[Rs_shade])	{		register int	shade;		shade = atoi( rs[Rs_shade] );		if (shade < 0 || shade > 100)			shade = 100;		r->TermWin.shade = 100 - shade;	}#endif#ifdef TRANSPARENT	if (rs[Rs_bgRefreshInterval])	{		register unsigned long interval = atol( rs[Rs_bgRefreshInterval] );		if( interval > 1000 ) interval = 1000;		r->h->bgRefreshInterval = interval * 1000L; /* convert to micro-sec */	}#endif#ifdef OFF_FOCUS_FADING	if (rs[Rs_fade])	{		register int	fade;		fade = atoi (rs[Rs_fade]);		if (fade < 0 || fade > 100)			fade = 100;		r->TermWin.fade = 100 - fade;	}#endif#ifdef CURSOR_BLINK	if (rs[Rs_cursorBlinkInterval])	{		register long	tmp = atol( rs[Rs_cursorBlinkInterval] );		r->h->blinkInterval = (tmp >= MIN_BLINK_TIME && tmp <= MAX_BLINK_TIME) ? tmp : DEFAULT_BLINK_TIME;	}	/* convert msec to usec */	r->h->blinkInterval *= 1000;#endif#ifdef PRINTPIPE	if (!rs[Rs_print_pipe])		rs[Rs_print_pipe] = PRINTPIPE;#endif	if (!rs[Rs_cutchars])		rs[Rs_cutchars] = CUTCHARS;#ifdef ACS_ASCII	if( !rs[Rs_acs_chars] )		rs[Rs_acs_chars] = ACS_CHARS;	if( (i = STRLEN(rs[Rs_acs_chars])) < 0x20 )	{		val = rxvt_realloc( (void*) rs[Rs_acs_chars], 0x20 );		for( ; i < 0x20; )			val[i++] = ' ';		rs[Rs_acs_chars] = val;	}#endif#ifndef NO_BACKSPACE_KEY	if( !rs[Rs_backspace_key] )# ifdef DEFAULT_BACKSPACE		r->h->key_backspace = DEFAULT_BACKSPACE;# else		r->h->key_backspace = "DEC";	/* can toggle between \010 or \177 */# endif	else	{		char*	val = STRDUP(rs[Rs_backspace_key]);		rxvt_str_trim( val );		rxvt_str_escaped( val );		r->h->key_backspace = val;	}#endif#ifndef NO_DELETE_KEY	if( !rs[Rs_delete_key] )# ifdef DEFAULT_DELETE		r->h->key_delete = DEFAULT_DELETE;# else		r->h->key_delete = "\033[3~";# endif	else	{		char *val = STRDUP( rs[Rs_delete_key] );		rxvt_str_trim( val );		rxvt_str_escaped( val );		r->h->key_delete = val;	}#endif	if( rs[Rs_answerbackstring] )	{		rxvt_str_trim( (char*) rs[Rs_answerbackstring] );		rxvt_str_escaped( (char*) rs[Rs_answerbackstring] );	}	if( rs[Rs_selectstyle] )	{		if( STRNCASECMP( rs[Rs_selectstyle], "oldword", 7 ) == 0 )			r->selection_style = OLD_WORD_SELECT;#ifndef NO_OLD_SELECTION		else if( STRNCASECMP( rs[Rs_selectstyle], "old", 3 ) == 0 )			r->selection_style = OLD_SELECT;#endif	}	/* Set default X11 fonts */	rxvt_set_default_font_x11( r );#ifdef XFT_SUPPORT	if( rs[Rs_xftsz] )	{		int		sz = atoi( rs[Rs_xftsz] );		r->TermWin.xftsize = (sz >= MIN_XFT_FONT_SIZE) ? sz : MIN_XFT_FONT_SIZE;	}	else /* default xft font size */		r->TermWin.xftsize = DEFAULT_XFT_FONT_SIZE;	if (rs[Rs_xftpsz])	{		int		sz = atoi (rs[Rs_xftpsz]);		r->TermWin.xftpsize  =  (sz >= MIN_XFT_FONT_SIZE) ?										sz : MIN_XFT_FONT_SIZE;	}	else /* default xft Pfont size */		r->TermWin.xftpsize = DEFAULT_XFT_PFONT_SIZE;# ifdef MULTICHAR_SET	if (rs[Rs_xftmsz])	{		int		sz = (int) atof (rs[Rs_xftmsz]);		r->TermWin.xftmsize = (sz >= MIN_XFT_FONT_SIZE) ?										sz : MIN_XFT_FONT_SIZE;	}	else /* default xft font size */		r->TermWin.xftmsize = DEFAULT_XFT_FONT_SIZE;# endif	/* MULTICHAR_SET */	/* Set default Freetype fonts */	rxvt_set_default_font_xft (r);#endif	/* XFT_SUPPORT */#ifdef TEXT_SHADOW	rxvt_init_shadow_mode (r, rs[Rs_textShadowMode]);#endif#ifdef XTERM_REVERSE_VIDEO	/* this is how xterm implements reverseVideo */	if (r->Options & Opt_reverseVideo)	{		if (!rs[Rs_color + Color_fg])			rs[Rs_color + Color_fg] = def_colorName[Color_bg];		if (!rs[Rs_color + Color_bg])			rs[Rs_color + Color_bg] = def_colorName[Color_fg];		for (i = 0; i < MAX_PROFILES; i++)		{			int		vtfg = Rs_foreground + i;			int		vtbg = Rs_background + i;			char*	fg = (char*) rs[vtfg];			char*	bg = (char*) rs[vtbg];			/* foreground color of i terminal */			if (ISSET_VTFG(r, i))				rs[vtfg] = ISSET_VTBG(r, i) ? bg :								def_colorName[Color_bg];			/* background color of i terminal */			if (ISSET_VTBG(r, i))				rs[vtbg] = ISSET_VTFG(r, i) ? fg :							def_colorName[Color_fg];		}	}#endif	for (i = 0; i < NRS_COLORS; i++)		if (!rs[Rs_color + i])			rs[Rs_color + i] = def_colorName[i];#ifndef XTERM_REVERSE_VIDEO	/* this is how we implement reverseVideo */	if (r->Options & Opt_reverseVideo)	{		SWAP_IT(rs[Rs_color + Color_fg], rs[Rs_color + Color_bg], const char *);		for (i = 0; i < MAX_PROFILES; i++)		{			int		vtfg = Rs_foreground + i;			int		vtbg = Rs_background + i;			SWAP_IT(rs[vtfg], rs[vtbg], const char*);		}	}#endif	/* convenient aliases for setting fg/bg to colors */	rxvt_color_aliases(r, Color_fg);	rxvt_color_aliases(r, Color_bg);#ifndef NO_CURSORCOLOR	rxvt_color_aliases(r, Color_cursor);	rxvt_color_aliases(r, Color_cursor2);#endif				/* NO_CURSORCOLOR */	rxvt_color_aliases(r, Color_pointer);	rxvt_color_aliases(r, Color_border);#ifndef NO_BOLD_UNDERLINE_REVERSE	rxvt_color_aliases(r, Color_BD);	rxvt_color_aliases(r, Color_UL);	rxvt_color_aliases(r, Color_RV);#endif				/* ! NO_BOLD_UNDERLINE_REVERSE */	/*	 * On startup, use autohideTabbar to override hideTabbar. Thus on startup,	 * using autohideTabbar will only display the tabbar if there are multiple	 * tabs. The user can hide / show the tabbar using a macro at will.	 */	if( r->Options2 & Opt2_autohideTabbar )		r->Options2 |= Opt2_hideTabbar;	/* Cleanup the macro list */	rxvt_cleanup_macros( r );	/*	 * Profile settings.	 */	for( i=0; i < MAX_PROFILES; i++ )	{		/* Set saveLines */		if( r->h->rs[Rs_saveLines + i] )		{			int tmp = atoi( r->h->rs[Rs_saveLines + i] );			r->profile[i].saveLines = ( tmp >= 0 && tmp <= MAX_SAVELINES ) ?					tmp : DEFAULT_SAVELINES;		}		else			r->profile[i].saveLines = ( i > 0 ) ? r->profile[0].saveLines :															DEFAULT_SAVELINES;	}#ifdef OS_LINUX	if( !r->h->rs[Rs_cwd] )		r->h->rs[Rs_cwd] = ".";#endif	return cmd_argv;}/*----------------------------------------------------------------------*//* EXTPROTO */voidrxvt_init_env(rxvt_t *r){	int				i;	unsigned int	u;	char*			val;#ifdef DISPLAY_IS_IP	/* Fixup display_name for export over pty to any interested	** terminal clients via "ESC[7n" (e.g. shells).  Note we use	** the pure IP number (for the first non-loopback interface)	** that we get from rxvt_network_display(). This is more	** "name-resolution-portable", if you will, and probably allows	** for faster x-client startup if your name server is beyond	** a slow link or overloaded at client startup. Of course that	** only helps the shell's child processes, not us.	**	** Giving out the display_name also affords a potential	** security hole	*/	val = rxvt_network_display(r->h->rs[Rs_display_name]);	r->h->rs[Rs_display_name] = (const char *)val;	if (val == NULL)#endif				/* DISPLAY_IS_IP */	val = XDisplayString(r->Xdisplay);	if (r->h->rs[Rs_display_name] == NULL)		r->h->rs[Rs_display_name] = val;	/* use broken `:0' value */	i = STRLEN(val) + 9;	if (i <= 0 || i > 1024)	/* possible integer overflow */		i = 1024;	r->h->env_display = rxvt_malloc(i * sizeof(char));	STRCPY (r->h->env_display, "DISPLAY=");	STRNCAT (r->h->env_display, val, i-9);	r->h->env_display[i-1] = (char) 0;	/* avoiding the math library:	 * i = (int)(ceil(log10((unsigned int)r->TermWin.parent))) */	for (i = 0, u = (unsigned int)r->TermWin.parent; u; u /= 10, i++)		;	MAX_IT(i, 1);	r->h->env_windowid = rxvt_malloc((i + 10) * sizeof(char));	sprintf(r->h->env_windowid, "WINDOWID=%u",		(unsigned int)r->TermWin.parent);	/*	** add entries to the environment:	** @ DISPLAY:   in case we started with -display	** @ WINDOWID:  X window id number of the window	** @ COLORTERM: terminal sub-name and also indicates its color	** @ TERM:		terminal name	** @ TERMINFO:	path to terminfo directory	*/#ifdef HAVE_PUTENV	putenv(r->h->env_display);	putenv(r->h->env_windowid);# ifdef RXVT_TERMINFO	putenv("TERMINFO=" RXVT_TERMINFO);# endif	if (XDEPTH <= 2)		putenv("COLORTERM=" COLORTERMENV "-mono");	else		putenv("COLORTERM=" COLORTERMENVFULL);	if (r->h->rs[Rs_term_name] != NULL)	{		int		l = 6 + STRLEN(r->h->rs[Rs_term_name]);		if (l <= 0 || l > 1024)	/* possible integer overflow */			l = 1024;		r->h->env_term = rxvt_malloc(l * sizeof(char));		STRCPY (r->h->env_term, "TERM=");		STRNCAT (r->h->env_term, r->h->rs[Rs_term_name], l-6);		r->h->env_term[l-1] = (char) 0;		putenv(r->h->env_term);	}	else		putenv("TERM=" TERMENV);#endif	/* HAVE_PUTENV */#ifdef HAVE_UNSETENV	/* avoid passing old settings and confusing term size */	unsetenv("LINES");	unsetenv("COLUMNS");	unsetenv("TERMCAP");	/* terminfo should be okay */#endif				/* HAVE_UNSETENV */	/*	** allocate environment variable for MRXVT_TABTITLE, we will	** use it in rxvt_create_termwin later for each tab terminal	*/	r->h->env_tabtitle = rxvt_malloc(sizeof(TABTITLEENV) + MAX_TAB_TXT + 1);}/*----------------------------------------------------------------------*//* * This is more or less stolen straight from XFree86 xterm. * This should support all European type languages. *//* EXTPROTO */voidrxvt_init_xlocale(rxvt_t *r){#ifdef USE_XIM	if (r->h->locale == NULL)		rxvt_print_error("Setting locale failed.");	else	{		XChangeProperty(r->Xdisplay, r->TermWin.parent,			r->h->xa[XA_WM_LOCALE_NAME], XA_STRING, 8, PropModeReplace,			(unsigned char *)r->h->locale, STRLEN(r->h->locale));		if (XSupportsLocale() != True)		{			rxvt_print_error("The locale is not supported by Xlib");			return;		}		rxvt_IM_set_fontset (r, 0);		/* see if we can connect yet */		rxvt_IM_init_callback (r->Xdisplay, NULL, NULL);		/* To avoid Segmentation Fault in C locale: Solaris only? */		if (STRCMP(r->h->locale, "C"))			XRegisterIMInstantiateCallback(r->Xdisplay, NULL, NULL,				NULL, rxvt_IM_init_callback, NULL);	}#endif}/*----------------------------------------------------------------------*//* EXTPROTO */voidrxvt_init_command(rxvt_t* r, const char *const *argv){	/*	 * Initialize the command connection. This should be called after the X	 * server connection is established.	 */	struct sigaction	act;	/*	 * Enable delete window protocol so that if the top-level window of the	 * terminal is destroyed by the Session Manager, we can receive a	 * ClientMessage event and do something gracefully.	 */	XSetWMProtocols (r->Xdisplay, r->TermWin.parent,			&(r->h->xa[XA_WMDELETEWINDOW]), 1);#ifdef META8_OPTION	r->h->meta_char = (r->Options & Opt_meta8 ? 0x80 : C0_ESC);#endif	rxvt_get_ourmods(r);#ifdef GREEK_SUPPORT	greek_init();#endif	r->Xfd = XConnectionNumber(r->Xdisplay);#ifdef CURSOR_BLINK	if (r->Options & Opt_cursorBlink)		(void)gettimeofday(&r->h->lastcursorchange, NULL);#endif	/*	 * Gracefully exit on term signals.	 */	act.sa_handler	= rxvt_Exit_signal;	act.sa_flags	= 0;	sigemptyset (&act.sa_mask);#ifndef OS_SVR4	sigaction( SIGINT , &act, NULL);#endif	sigaction( SIGQUIT, &act, NULL);	sigaction( SIGTERM, &act, NULL);	/*	 * 2006-04-28 gi1242: Ignore HUP signals. We sometimes receive this if bash	 * is killed. Chances are that we don't have to exit ...	 */	act.sa_handler	= SIG_IGN;	sigaction( SIGHUP, &act, NULL);#ifdef PRINTPIPE	/*	 * 2006-04-28 gi1242: If there is an error opening the printer command, then	 * we'll get SIGPIPE. If not handled, mrxvt will exit.	 * 	 * There's nothing we really need to do on broken pipes, so just ignore	 * SIGPIPE for now.	 */	sigaction( SIGPIPE, &act, NULL);#endif	act.sa_handler	= rxvt_Child_signal;	sigaction (SIGCHLD, &act, NULL);}#ifdef OFF_FOCUS_FADING/* EXTPROTO */unsigned longrxvt_fade_color (rxvt_t* r, unsigned long pixel){	if (r->h->rs[Rs_fade])	{		XColor	faded_xcol;		faded_xcol.pixel = pixel;		XQueryColor (r->Xdisplay, XCMAP, &faded_xcol);		faded_xcol.red   = (faded_xcol.red / 100) * r->TermWin.fade;		faded_xcol.green = (faded_xcol.green / 100) * r->TermWin.fade;		faded_xcol.blue  = (faded_xcol.blue / 100) * r->TermWin.fade;		rxvt_alloc_color (r, &faded_xcol, "Faded");		return faded_xcol.pixel;	}	return pixel;}#endif/* * rxvt_restore_ufbg_color should always be called before * rxvt_restore_pix_color. */

⌨️ 快捷键说明

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