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

📄 rxvtlib_main.c

📁 具有IDE功能的编辑器
💻 C
📖 第 1 页 / 共 3 页
字号:
    if (init && o->rs[Rs_boldFont] != NULL)	boldFont = XLoadQueryFont (o->Xdisplay, o->rs[Rs_boldFont]);#endif#ifdef MULTICHAR_SET    if (o->TermWin.mfont) {	XFreeFont (o->Xdisplay, o->TermWin.mfont);	o->TermWin.mfont = 0;    }/* load font or substitute */    xfont = XLoadQueryFont (o->Xdisplay, o->rs[Rs_mfont + idx]);    if (!xfont) {	print_error (msg, o->rs[Rs_mfont + idx]);#ifdef ZHCN	o->rs[Rs_mfont + idx] = "-*-16-*-gb2312*-*";#else	o->rs[Rs_mfont + idx] = "k14";#endif	xfont = XLoadQueryFont (o->Xdisplay, o->rs[Rs_mfont + idx]);	if (!xfont) {	    print_error (msg, o->rs[Rs_mfont + idx]);	    goto Abort;	}    }    o->TermWin.mfont = xfont;#endif				/* MULTICHAR_SET *//* alter existing GC */    if (!init) {	XSetFont (o->Xdisplay, o->TermWin.gc, o->TermWin.font->fid);	rxvtlib_menubar_expose (o);    }/* set the sizes */    {	int             fh, fw = 0;	fw = rxvt_get_fontwidest(o, o->TermWin.font);	fh = o->TermWin.font->ascent + o->TermWin.font->descent;	if (fw == o->TermWin.font->min_bounds.width)	    o->TermWin.fprop = 0;	/* Mono-spaced (fixed width) font */	else	    o->TermWin.fprop = 1;	/* Proportional font */	recheckfonts = !(fw == o->TermWin.fwidth && fh == o->TermWin.fheight);	o->TermWin.fwidth = fw;	o->TermWin.fheight = fh;    }/* check that size of boldFont is okay */#ifndef NO_BOLDFONT    if (recheckfonts) {	o->TermWin.boldFont = NULL;	if (boldFont != NULL) {	    int             fh, fw;	    fw = rxvt_get_fontwidest(o, boldFont);	    fh = boldFont->ascent + boldFont->descent;	    if (fw <= o->TermWin.fwidth && fh <= o->TermWin.fheight)		o->TermWin.boldFont = boldFont;	    o->TermWin.bprop = !(fw == o->TermWin.fwidth /* && fh == TermWin.fheight */ );	}    }#endif				/* NO_BOLDFONT */#ifdef MULTICHAR_SET    if (recheckfonts)    /* TODO: XXX: This could be much better? */	if (o->TermWin.mfont != NULL) {	    int             fh, fw;	    fw = get_fontwidest(o->TermWin.mfont);	    fh = o->TermWin.mfont->ascent + o->TermWin.mfont->descent;	    if (fw <= o->TermWin.fwidth && fh <= o->TermWin.fheight)		/* WHAT TO DO!! */ ;	    o->TermWin.mprop = !(fw == o->TermWin.fwidth /* && fh == TermWin.fheight */ );	}#endif    rxvtlib_set_colorfgbg (o);    o->TermWin.width = o->TermWin.ncol * o->TermWin.fwidth;    o->TermWin.height = o->TermWin.nrow * o->TermWin.fheight;    if (!init) {	rxvtlib_resize_all_windows (o);	rxvtlib_scr_touch (o);    }    return;  Abort:    print_error ("aborting");	/* fatal problem */    o->killed = EXIT_FAILURE | DO_EXIT;    /* NOTREACHED */}int rxvt_get_fontwidest (rxvtlib *o, XFontStruct * f){    int i, cw, fw = 0;    if (f->min_bounds.width == f->max_bounds.width)	return f->min_bounds.width;    if (f->per_char == NULL)	return 0;    for (i = f->max_char_or_byte2 - f->min_char_or_byte2; --i >= 0;) {	cw = f->per_char[i].width;	MAX_IT (fw, cw);    }    return fw;}/* ------------------------------------------------------------------------- *//* INTPROTO */void            rxvtlib_init_vars (rxvtlib *o){    o->Options = Opt_scrollBar | Opt_scrollTtyOutput;    o->sb_shadow = 0;    o->TermWin.ncol = 80;    o->TermWin.nrow = 24;    o->TermWin.mapped = 0;    o->want_refresh = 1;    o->scrollBar.win = 0;#if (MENUBAR_MAX)    o->menuBar.win = 0;#endif#if defined (HOTKEY_CTRL) || defined (HOTKEY_META)/* recognized when combined with HOTKEY */    o->ks_bigfont = XK_greater;    o->ks_smallfont = XK_less;#endif#ifndef NO_BRIGHTCOLOR    o->colorfgbg = DEFAULT_RSTYLE;#endif#ifndef NO_NEW_SELECTION    o->selection_style = NEW_SELECT;#else    o->selection_style = OLD_SELECT;#endif}extern Display *CDisplay;/* ------------------------------------------------------------------------- *//* INTPROTO */const char    **rxvtlib_init_resources (rxvtlib *o, int argc, const char *const *argv){    int             i, r_argc;    char           *val;    const char     *tmp;    const char    **cmd_argv, **r_argv;/* * 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 **)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 **)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 */    for (i = 0; i < TOTAL_RS; i++)	o->rs[i] = NULL;    o->rs[Rs_name] = my_basename (argv[0]);    if (cmd_argv != NULL && cmd_argv[0] != NULL)	o->rs[Rs_iconName] = o->rs[Rs_title] = my_basename (cmd_argv[0]);/* * Open display, get options/resources and create the window */    if ((o->rs[Rs_display_name] = getenv ("DISPLAY")) == NULL)	o->rs[Rs_display_name] = ":0";#ifdef LOCAL_X_IS_UNIX    if (strncmp (o->rs[Rs_display_name], ":0", 2) == 0)	o->rs[Rs_display_name] = "unix:0";#endif    rxvtlib_get_options (o, r_argc, r_argv);    if (o->killed)	return 0;    FREE (r_argv);#ifdef STANDALONE    if ((o->Xdisplay = XOpenDisplay (o->rs[Rs_display_name])) == NULL) {	print_error ("can't open display %s", o->rs[Rs_display_name]);	o->killed = EXIT_FAILURE | DO_EXIT;	return 0;    }#else    o->Xdisplay = CDisplay;		/* FIXME: not generic */#endif#ifdef INEXPENSIVE_LOCAL_X_CALLS    /* it's hard to determine further if we're on a local display or not */    o->display_is_local = o->rs[Rs_display_name][0] == ':' ? 1 : 0;#endif    rxvtlib_extract_resources (o, o->Xdisplay, o->rs[Rs_name]);#if ! defined(XTERM_SCROLLBAR) && ! defined(NEXT_SCROLLBAR)    if (!(o->Options & Opt_scrollBar_floating))	o->sb_shadow = SHADOW;#endif/* * set any defaults not already set */    if (!o->rs[Rs_title])	o->rs[Rs_title] = o->rs[Rs_name];    if (!o->rs[Rs_iconName])	o->rs[Rs_iconName] = o->rs[Rs_title];    if (!o->rs[Rs_saveLines] || (o->TermWin.saveLines = atoi (o->rs[Rs_saveLines])) < 0)	o->TermWin.saveLines = SAVELINES;/* no point having a scrollbar without having any scrollback! */    if (!o->TermWin.saveLines)	o->Options &= ~Opt_scrollBar;#ifdef PRINTPIPE    if (!o->rs[Rs_print_pipe])	o->rs[Rs_print_pipe] = PRINTPIPE;#endif    if (!o->rs[Rs_cutchars])	o->rs[Rs_cutchars] = CUTCHARS;#ifndef NO_BACKSPACE_KEY    if (!o->rs[Rs_backspace_key])# ifdef DEFAULT_BACKSPACE	o->key_backspace = DEFAULT_BACKSPACE;# else    o->key_backspace = "DEC";	/* can toggle between \033 or \177 */# endif    else {	val = (char *) strdup (o->rs[Rs_backspace_key]);	(void)Str_escaped (val);	o->key_backspace = val;    }#endif#ifndef NO_DELETE_KEY    if (!o->rs[Rs_delete_key])# ifdef DEFAULT_DELETE	o->key_delete = DEFAULT_DELETE;# else    o->key_delete = "\033[3~";# endif    else {	val = (char *) strdup (o->rs[Rs_delete_key]);	(void)Str_escaped (val);	o->key_delete = val;    }#endif    if (o->rs[Rs_selectstyle]) {	if (strncasecmp (o->rs[Rs_selectstyle], "oldword", 7) == 0)	    o->selection_style = OLD_WORD_SELECT;#ifndef NO_OLD_SELECTION	else if (strncasecmp (o->rs[Rs_selectstyle], "old", 3) == 0)	    o->selection_style = OLD_SELECT;#endif    }#ifndef NO_BOLDFONT    if (o->rs[Rs_font] == NULL && o->rs[Rs_boldFont] != NULL) {	o->rs[Rs_font] = o->rs[Rs_boldFont];	o->rs[Rs_boldFont] = NULL;    }#endif    for (i = 0; i < NFONTS; i++) {	if (!o->rs[Rs_font + i])	    o->rs[Rs_font + i] = o->def_fontName[i];#ifdef MULTICHAR_SET	if (!o->rs[Rs_mfont + i])	    o->rs[Rs_mfont + i] = o->def_mfontName[i];#endif    }    o->TermWin.fontset = NULL;#ifdef XTERM_REVERSE_VIDEO/* this is how xterm implements reverseVideo */    if (o->Options & Opt_reverseVideo) {	if (!o->rs[Rs_color + Color_fg])	    o->rs[Rs_color + Color_fg] = o->def_colorName[Color_bg];	if (!o->rs[Rs_color + Color_bg])	    o->rs[Rs_color + Color_bg] = o->def_colorName[Color_fg];    }#endif    for (i = 0; i < NRS_COLORS; i++)	if (!o->rs[Rs_color + i])	    o->rs[Rs_color + i] = o->def_colorName[i];#ifndef XTERM_REVERSE_VIDEO/* this is how we implement reverseVideo */    if (o->Options & Opt_reverseVideo)	SWAP_IT (o->rs[Rs_color + Color_fg], o->rs[Rs_color + Color_bg], tmp);#endif/* convenient aliases for setting fg/bg to colors */    rxvtlib_color_aliases (o, Color_fg);    rxvtlib_color_aliases (o, Color_bg);#ifndef NO_CURSORCOLOR    rxvtlib_color_aliases (o, Color_cursor);    rxvtlib_color_aliases (o, Color_cursor2);#endif				/* NO_CURSORCOLOR */    rxvtlib_color_aliases (o, Color_pointer);    rxvtlib_color_aliases (o, Color_border);#ifndef NO_BOLDUNDERLINE    rxvtlib_color_aliases (o, Color_BD);    rxvtlib_color_aliases (o, Color_UL);#endif				/* NO_BOLDUNDERLINE */    return cmd_argv;}/* ------------------------------------------------------------------------- *//* INTPROTO */void            rxvtlib_init_env (rxvtlib *o){    char           *val;/* these don't need to be static but do so to placate some mem checkers */    static char    env_display[100], env_windowid[40], env_term[40];#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 * 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 */    o->rs[Rs_display_name] = (const char *)val =	network_display (o->rs[Rs_display_name]);    if (val == NULL)#endif				/* DISPLAY_IS_IP */	val = XDisplayString (o->Xdisplay);    if (o->rs[Rs_display_name] == NULL)	o->rs[Rs_display_name] = val;	/* use broken `:0' value */    sprintf (env_display, "DISPLAY=%.90s", val);    sprintf (env_windowid, "WINDOWID=%u", (unsigned int)o->TermWin.parent[0]);/* 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 */    putenv (env_display);    putenv (env_windowid);#ifdef RXVT_TERMINFO    putenv ("TERMINFO=" RXVT_TERMINFO);#endif    if (o->Xdepth <= 2)	putenv ("COLORTERM=" COLORTERMENV "-mono");    else	putenv ("COLORTERM=" COLORTERMENVFULL);    if (o->rs[Rs_term_name] != NULL) {	sprintf (env_term, "TERM=%.40s", o->rs[Rs_term_name]);	putenv (env_term);    } else {	putenv ("TERM=" TERMENV);    }}/* ------------------------------------------------------------------------- *//* main() *//* INTPROTO */int rxvtlib_main (rxvtlib * o, int argc, const char *const *argv, int do_sleep){    const char **cmd_argv;/* * Save and then give up any super-user privileges * If we need privileges in any area then we must specifically request it. * We should only need to be root in these cases: *  1.  write utmp entries on some systems *  2.  chown tty on some systems */    privileges (SAVE);    privileges (IGNORE);    rxvtlib_init_vars (o);    cmd_argv = rxvtlib_init_resources (o, argc, (const char *const *) argv);    if (o->killed)	return EXIT_FAILURE;#if (MENUBAR_MAX)    rxvtlib_menubar_read (o, o->rs[Rs_menu]);#endif    rxvtlib_scrollbar_mapping (o, o->Options & Opt_scrollBar);    rxvtlib_Create_Windows (o, argc, (const char *const *) argv);    if (o->killed)	return EXIT_FAILURE;    rxvtlib_init_xlocale (o);    rxvtlib_scr_reset (o);		/* initialize screen */    rxvtlib_Gr_reset (o);		/* reset graphics */#ifdef STANDALONE#ifdef DEBUG_X    XSynchronize (o->Xdisplay, True);    XSetErrorHandler ((XErrorHandler) abort);#else    XSetErrorHandler ((XErrorHandler) xerror_handler);#endif#endif    if (scrollbar_visible ())	XMapWindow (o->Xdisplay, o->scrollBar.win);#if (MENUBAR_MAX)    if (menubar_visible ())	XMapWindow (o->Xdisplay, o->menuBar.win);#endif#ifdef TRANSPARENT    if (o->Options & Opt_transparent) {	XSetWindowBackgroundPixmap (o->Xdisplay, o->TermWin.parent[0],				    ParentRelative);	XSetWindowBackgroundPixmap (o->Xdisplay, o->TermWin.vt, ParentRelative);	XSelectInput (o->Xdisplay, Xroot, PropertyChangeMask);    }#endif    XMapWindow (o->Xdisplay, o->TermWin.vt);    XMapWindow (o->Xdisplay, o->TermWin.parent[0]);    rxvtlib_init_env (o);    rxvtlib_init_command (o, cmd_argv, do_sleep);    if (o->killed)	return EXIT_FAILURE;#ifdef STANDALONE    rxvtlib_main_loop (o);		/* main processing loop */#endif    if (cmd_argv)	free (cmd_argv);    return EXIT_SUCCESS;}/*----------------------- end-of-file (C source) -----------------------*/

⌨️ 快捷键说明

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