📄 init.c
字号:
"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 + -