📄 init.c
字号:
/*--------------------------------*-C-*---------------------------------* * File: init.c *----------------------------------------------------------------------* * $Id: init.c,v 1.103 2002/12/04 05:21:29 gcw Exp $ * * All portions of code are copyright by their respective author/s. * Copyright (c) 1992 John Bovey, University of Kent at Canterbury <jdb@ukc.ac.uk> * - original version * Copyright (c) 1994 Robert Nation <nation@rocket.sanders.lockheed.com> * - extensive modifications * Copyright (c) 1998-2001 Geoff Wing <gcw@pobox.com> * - extensive modifications * Copyright (c) 1999 D J Hawkey Jr <hawkeyd@visi.com> * - QNX support * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *---------------------------------------------------------------------*//* * Initialisation routines. */#include "../config.h" /* NECESSARY */#include "rxvt.h" /* NECESSARY */#include "init.h"#include <signal.h>const char *const def_colorName[] = { COLOR_FOREGROUND, COLOR_BACKGROUND,/* low-intensity colors */ "Black", /* 0: black (#000000) */#ifndef NO_BRIGHTCOLOR "Red3", /* 1: red (#CD0000) */ "Green3", /* 2: green (#00CD00) */ "Yellow3", /* 3: yellow (#CDCD00) */ "Blue3", /* 4: blue (#0000CD) */ "Magenta3", /* 5: magenta (#CD00CD) */ "Cyan3", /* 6: cyan (#00CDCD) */# ifdef XTERM_COLORS "Grey90", /* 7: white (#E5E5E5) */# else "AntiqueWhite", /* 7: white (#FAEBD7) */# endif/* high-intensity colors */# ifdef XTERM_COLORS "Grey30", /* 8: bright black (#4D4D4D) */# else "Grey25", /* 8: bright black (#404040) */# endif#endif /* NO_BRIGHTCOLOR */ "Red", /* 1/9: bright red (#FF0000) */ "Green", /* 2/10: bright green (#00FF00) */ "Yellow", /* 3/11: bright yellow (#FFFF00) */ "Blue", /* 4/12: bright blue (#0000FF) */ "Magenta", /* 5/13: bright magenta (#FF00FF) */ "Cyan", /* 6/14: bright cyan (#00FFFF) */ "White", /* 7/15: bright white (#FFFFFF) */#ifdef TTY_256COLOR "rgb:00/00/00", /* default 16-255 color table */ "rgb:00/00/2a", "rgb:00/00/55", "rgb:00/00/7f", "rgb:00/00/aa", "rgb:00/00/d4", "rgb:00/2a/00", "rgb:00/2a/2a", "rgb:00/2a/55", "rgb:00/2a/7f", "rgb:00/2a/aa", "rgb:00/2a/d4", "rgb:00/55/00", "rgb:00/55/2a", "rgb:00/55/55", "rgb:00/55/7f", "rgb:00/55/aa", "rgb:00/55/d4", "rgb:00/7f/00", "rgb:00/7f/2a", "rgb:00/7f/55", "rgb:00/7f/7f", "rgb:00/7f/aa", "rgb:00/7f/d4", "rgb:00/aa/00", "rgb:00/aa/2a", "rgb:00/aa/55", "rgb:00/aa/7f", "rgb:00/aa/aa", "rgb:00/aa/d4", "rgb:00/d4/00", "rgb:00/d4/2a", "rgb:00/d4/55", "rgb:00/d4/7f", "rgb:00/d4/aa", "rgb:00/d4/d4", "rgb:2a/00/00", "rgb:2a/00/2a", "rgb:2a/00/55", "rgb:2a/00/7f", "rgb:2a/00/aa", "rgb:2a/00/d4", "rgb:2a/2a/00", "rgb:2a/2a/2a", "rgb:2a/2a/55", "rgb:2a/2a/7f", "rgb:2a/2a/aa", "rgb:2a/2a/d4", "rgb:2a/55/00", "rgb:2a/55/2a", "rgb:2a/55/55", "rgb:2a/55/7f", "rgb:2a/55/aa", "rgb:2a/55/d4", "rgb:2a/7f/00", "rgb:2a/7f/2a", "rgb:2a/7f/55", "rgb:2a/7f/7f", "rgb:2a/7f/aa", "rgb:2a/7f/d4", "rgb:2a/aa/00", "rgb:2a/aa/2a", "rgb:2a/aa/55", "rgb:2a/aa/7f", "rgb:2a/aa/aa", "rgb:2a/aa/d4", "rgb:2a/d4/00", "rgb:2a/d4/2a", "rgb:2a/d4/55", "rgb:2a/d4/7f", "rgb:2a/d4/aa", "rgb:2a/d4/d4", "rgb:55/00/00", "rgb:55/00/2a", "rgb:55/00/55", "rgb:55/00/7f", "rgb:55/00/aa", "rgb:55/00/d4", "rgb:55/2a/00", "rgb:55/2a/2a", "rgb:55/2a/55", "rgb:55/2a/7f", "rgb:55/2a/aa", "rgb:55/2a/d4", "rgb:55/55/00", "rgb:55/55/2a", "rgb:55/55/55", "rgb:55/55/7f", "rgb:55/55/aa", "rgb:55/55/d4", "rgb:55/7f/00", "rgb:55/7f/2a", "rgb:55/7f/55", "rgb:55/7f/7f", "rgb:55/7f/aa", "rgb:55/7f/d4", "rgb:55/aa/00", "rgb:55/aa/2a", "rgb:55/aa/55", "rgb:55/aa/7f", "rgb:55/aa/aa", "rgb:55/aa/d4", "rgb:55/d4/00", "rgb:55/d4/2a", "rgb:55/d4/55", "rgb:55/d4/7f", "rgb:55/d4/aa", "rgb:55/d4/d4", "rgb:7f/00/00", "rgb:7f/00/2a", "rgb:7f/00/55", "rgb:7f/00/7f", "rgb:7f/00/aa", "rgb:7f/00/d4", "rgb:7f/2a/00", "rgb:7f/2a/2a", "rgb:7f/2a/55", "rgb:7f/2a/7f", "rgb:7f/2a/aa", "rgb:7f/2a/d4", "rgb:7f/55/00", "rgb:7f/55/2a", "rgb:7f/55/55", "rgb:7f/55/7f", "rgb:7f/55/aa", "rgb:7f/55/d4", "rgb:7f/7f/00", "rgb:7f/7f/2a", "rgb:7f/7f/55", "rgb:7f/7f/7f", "rgb:7f/7f/aa", "rgb:7f/7f/d4", "rgb:7f/aa/00", "rgb:7f/aa/2a", "rgb:7f/aa/55", "rgb:7f/aa/7f", "rgb:7f/aa/aa", "rgb:7f/aa/d4", "rgb:7f/d4/00", "rgb:7f/d4/2a", "rgb:7f/d4/55", "rgb:7f/d4/7f", "rgb:7f/d4/aa", "rgb:7f/d4/d4", "rgb:aa/00/00", "rgb:aa/00/2a", "rgb:aa/00/55", "rgb:aa/00/7f", "rgb:aa/00/aa", "rgb:aa/00/d4", "rgb:aa/2a/00", "rgb:aa/2a/2a", "rgb:aa/2a/55", "rgb:aa/2a/7f", "rgb:aa/2a/aa", "rgb:aa/2a/d4", "rgb:aa/55/00", "rgb:aa/55/2a", "rgb:aa/55/55", "rgb:aa/55/7f", "rgb:aa/55/aa", "rgb:aa/55/d4", "rgb:aa/7f/00", "rgb:aa/7f/2a", "rgb:aa/7f/55", "rgb:aa/7f/7f", "rgb:aa/7f/aa", "rgb:aa/7f/d4", "rgb:aa/aa/00", "rgb:aa/aa/2a", "rgb:aa/aa/55", "rgb:aa/aa/7f", "rgb:aa/aa/aa", "rgb:aa/aa/d4", "rgb:aa/d4/00", "rgb:aa/d4/2a", "rgb:aa/d4/55", "rgb:aa/d4/7f", "rgb:aa/d4/aa", "rgb:aa/d4/d4", "rgb:d4/00/00", "rgb:d4/00/2a", "rgb:d4/00/55", "rgb:d4/00/7f", "rgb:d4/00/aa", "rgb:d4/00/d4", "rgb:d4/2a/00", "rgb:d4/2a/2a", "rgb:d4/2a/55", "rgb:d4/2a/7f", "rgb:d4/2a/aa", "rgb:d4/2a/d4", "rgb:d4/55/00", "rgb:d4/55/2a", "rgb:d4/55/55", "rgb:d4/55/7f", "rgb:d4/55/aa", "rgb:d4/55/d4", "rgb:d4/7f/00", "rgb:d4/7f/2a", "rgb:d4/7f/55", "rgb:d4/7f/7f", "rgb:d4/7f/aa", "rgb:d4/7f/d4", "rgb:d4/aa/00", "rgb:d4/aa/2a", "rgb:d4/aa/55", "rgb:d4/aa/7f", "rgb:d4/aa/aa", "rgb:d4/aa/d4", "rgb:d4/d4/00", "rgb:d4/d4/2a", "rgb:d4/d4/55", "rgb:d4/d4/7f", "rgb:d4/d4/aa", "rgb:d4/d4/d4", "rgb:08/08/08", "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#ifndef NO_CURSORCOLOR COLOR_CURSOR_BACKGROUND, COLOR_CURSOR_FOREGROUND,#endif /* ! NO_CURSORCOLOR */ NULL, /* Color_pointer */ NULL, /* Color_border */#ifndef NO_BOLD_UNDERLINE_REVERSE NULL, /* Color_BD */ NULL, /* Color_UL */ NULL, /* Color_RV */#endif /* ! NO_BOLD_UNDERLINE_REVERSE */#ifdef OPTION_HC NULL,#endif#ifdef KEEP_SCROLLCOLOR COLOR_SCROLLBAR, COLOR_SCROLLTROUGH,#endif /* KEEP_SCROLLCOLOR */};const char *const xa_names[NUM_XA] = { "COMPOUND_TEXT", "MULTIPLE", "TARGETS", "TEXT", "TIMESTAMP", "VT_SELECTION", "INCR", "WM_DELETE_WINDOW",#ifdef TRANSPARENT "_XROOTPMAP_ID",#endif#ifdef OFFIX_DND "DndProtocol", "DndSelection",#endif "CLIPBOARD"};/*----------------------------------------------------------------------*//* substitute system functions */#if defined(__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){ struct rxvt_hidden *h;#ifndef NULLS_ARE_NOT_ZEROS MEMSET(r, 0, sizeof(rxvt_t));#endif h = r->h = (struct rxvt_hidden *)rxvt_calloc(1, sizeof(struct rxvt_hidden)); r->PixColors = (Pixel *)rxvt_malloc(sizeof(Pixel) * TOTAL_COLORS); if (r->h == NULL || r->PixColors == NULL) return -1;#ifdef NULLS_ARE_NOT_ZEROS r->Xdisplay = NULL; r->TermWin.fontset = NULL;#ifndef NO_BOLDFONT r->TermWin.boldFont_loaded = NULL;#endif r->h->ttydev = NULL; 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] = NULL; h->locale = NULL;# ifdef MENUBAR h->menubarGC = None; h->BuildMenu = NULL; /* the menu currently being built */# if (MENUBAR_MAX > 1) h->CurrentBar = NULL;# endif /* (MENUBAR_MAX > 1) */# endif# ifdef USE_XIM h->Input_Context = NULL;# endif h->v_bufstr = NULL;# ifdef RXVT_GRAPHICS h->gr_root = NULL; h->gr_last_id = None;# endif h->buffer = NULL; h->compose.compose_ptr = NULL;#endif /* NULLS_ARE_NOT_ZEROS */#if defined(XPM_BACKGROUND) || defined(TRANSPARENT) r->TermWin.pixmap = None;#endif#ifdef UTMP_SUPPORT h->next_utmp_action = SAVE;#endif#ifndef NO_SETOWNER_TTYDEV h->next_tty_action = SAVE;#endif h->MEvent.time = CurrentTime; h->MEvent.button = AnyButton; r->Options = DEFAULT_OPTIONS; h->want_refresh = 1; h->cmd_pid = -1; r->cmd_fd = r->tty_fd = r->Xfd = -1; h->PrivateModes = h->SavedModes = PrivMode_Default; r->TermWin.focus = 1; r->TermWin.ncol = 80; r->TermWin.nrow = 24; r->TermWin.int_bwidth = INTERNALBORDERWIDTH; r->TermWin.ext_bwidth = EXTERNALBORDERWIDTH; r->TermWin.lineSpace = LINESPACE; r->TermWin.saveLines = SAVELINES; r->numPixColors = TOTAL_COLORS;#ifndef NO_NEW_SELECTION r->selection_style = NEW_SELECT;#else r->selection_style = OLD_SELECT;#endif#ifndef NO_BRIGHTCOLOR h->colorfgbg = DEFAULT_RSTYLE;#endif#if defined (HOTKEY_CTRL) || defined (HOTKEY_META) h->ks_bigfont = XK_greater; h->ks_smallfont = XK_less;#endif#ifdef GREEK_SUPPORT h->ks_greekmodeswith = GREEK_KEYBOARD_MODESWITCH;#endif h->refresh_limit = 1; h->refresh_type = SLOW_REFRESH; h->prev_nrow = h->prev_ncol = 0;#ifdef MULTICHAR_SET# ifdef MULTICHAR_ENCODING r->encoding_method = MULTICHAR_ENCODING;# endif h->multichar_decode = rxvt_euc2jis;#endif h->oldcursor.row = h->oldcursor.col = -1;#ifdef XPM_BACKGROUND/* h->bgPixmap.w = h->bgPixmap.h = 0; */ h->bgPixmap.x = h->bgPixmap.y = 50; h->bgPixmap.pixmap = None;#endif h->last_bot = h->last_state = -1;#ifdef MENUBAR h->menu_readonly = 1;# if !(MENUBAR_MAX > 1) h->CurrentBar = &(h->BarList);# endif /* (MENUBAR_MAX > 1) */#endif return 0;}/* EXTPROTO */voidrxvt_init_secondary(rxvt_t *r){#ifdef TTY_GID_SUPPORT struct group *gr = getgrnam("tty"); if (gr) { /* change group ownership of tty to "tty" */ r->h->ttymode = S_IRUSR | S_IWUSR | S_IWGRP; r->h->ttygid = gr->gr_gid; } else#endif /* TTY_GID_SUPPORT */ { r->h->ttymode = S_IRUSR | S_IWUSR | S_IWGRP | S_IWOTH; r->h->ttygid = getgid(); }#if defined(HAVE_XSETLOCALE) || defined(HAVE_SETLOCALE) r->h->locale = setlocale(LC_CTYPE, "");#endif}/*----------------------------------------------------------------------*//* EXTPROTO */const char **rxvt_init_resources(rxvt_t *r, int argc, const char *const *argv){ int i, r_argc; char *val; const char **cmd_argv, **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);#ifdef LOCAL_X_IS_UNIX if (rs[Rs_display_name][0] == ':') { val = rxvt_malloc(5 + STRLEN(rs[Rs_display_name])); STRCPY(val, "unix"); STRCAT(val, rs[Rs_display_name]); r->Xdisplay = XOpenDisplay(val); free(val); }#endif if (r->Xdisplay == NULL && (r->Xdisplay = XOpenDisplay(rs[Rs_display_name])) == NULL) { rxvt_print_error("can't open display %s", rs[Rs_display_name]); exit(EXIT_FAILURE); } rxvt_extract_resources(r, r->Xdisplay, rs[Rs_name]);/* * set any defaults not already set */ if (cmd_argv && cmd_argv[0]) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -