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