--- rxvt-unicode/src/init.C 2004/02/22 08:09:38 1.31 +++ rxvt-unicode/src/init.C 2004/08/13 03:47:09 1.70 @@ -1,5 +1,5 @@ /*--------------------------------*-C-*---------------------------------* - * File: init.c + * File: init.C *----------------------------------------------------------------------* * * All portions of code are copyright by their respective author/s. @@ -70,222 +70,222 @@ "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", + "rgbi:0/0/0", /* default 16-255 color table */ + "rgbi:0/0/.2", /* consists of 6 6x6 colour cubes */ + "rgbi:0/0/.4", /* and a 24 greyscale ramp w/o */ + "rgbi:0/0/.6", /* black or white */ + "rgbi:0/0/.8", + "rgbi:0/0/1", + "rgbi:0/.2/0", + "rgbi:0/.2/.2", + "rgbi:0/.2/.4", + "rgbi:0/.2/.6", + "rgbi:0/.2/.8", + "rgbi:0/.2/1", + "rgbi:0/.4/0", + "rgbi:0/.4/.2", + "rgbi:0/.4/.4", + "rgbi:0/.4/.6", + "rgbi:0/.4/.8", + "rgbi:0/.4/1", + "rgbi:0/.6/0", + "rgbi:0/.6/.2", + "rgbi:0/.6/.4", + "rgbi:0/.6/.6", + "rgbi:0/.6/.8", + "rgbi:0/.6/1", + "rgbi:0/.8/0", + "rgbi:0/.8/.2", + "rgbi:0/.8/.4", + "rgbi:0/.8/.6", + "rgbi:0/.8/.8", + "rgbi:0/.8/1", + "rgbi:0/1/0", + "rgbi:0/1/.2", + "rgbi:0/1/.4", + "rgbi:0/1/.6", + "rgbi:0/1/.8", + "rgbi:0/1/1", + "rgbi:.2/0/0", + "rgbi:.2/0/.2", + "rgbi:.2/0/.4", + "rgbi:.2/0/.6", + "rgbi:.2/0/.8", + "rgbi:.2/0/1", + "rgbi:.2/.2/0", + "rgbi:.2/.2/.2", + "rgbi:.2/.2/.4", + "rgbi:.2/.2/.6", + "rgbi:.2/.2/.8", + "rgbi:.2/.2/1", + "rgbi:.2/.4/0", + "rgbi:.2/.4/.2", + "rgbi:.2/.4/.4", + "rgbi:.2/.4/.6", + "rgbi:.2/.4/.8", + "rgbi:.2/.4/1", + "rgbi:.2/.6/0", + "rgbi:.2/.6/.2", + "rgbi:.2/.6/.4", + "rgbi:.2/.6/.6", + "rgbi:.2/.6/.8", + "rgbi:.2/.6/1", + "rgbi:.2/.8/0", + "rgbi:.2/.8/.2", + "rgbi:.2/.8/.4", + "rgbi:.2/.8/.6", + "rgbi:.2/.8/.8", + "rgbi:.2/.8/1", + "rgbi:.2/1/0", + "rgbi:.2/1/.2", + "rgbi:.2/1/.4", + "rgbi:.2/1/.6", + "rgbi:.2/1/.8", + "rgbi:.2/1/1", + "rgbi:.4/0/0", + "rgbi:.4/0/.2", + "rgbi:.4/0/.4", + "rgbi:.4/0/.6", + "rgbi:.4/0/.8", + "rgbi:.4/0/1", + "rgbi:.4/.2/0", + "rgbi:.4/.2/.2", + "rgbi:.4/.2/.4", + "rgbi:.4/.2/.6", + "rgbi:.4/.2/.8", + "rgbi:.4/.2/1", + "rgbi:.4/.4/0", + "rgbi:.4/.4/.2", + "rgbi:.4/.4/.4", + "rgbi:.4/.4/.6", + "rgbi:.4/.4/.8", + "rgbi:.4/.4/1", + "rgbi:.4/.6/0", + "rgbi:.4/.6/.2", + "rgbi:.4/.6/.4", + "rgbi:.4/.6/.6", + "rgbi:.4/.6/.8", + "rgbi:.4/.6/1", + "rgbi:.4/.8/0", + "rgbi:.4/.8/.2", + "rgbi:.4/.8/.4", + "rgbi:.4/.8/.6", + "rgbi:.4/.8/.8", + "rgbi:.4/.8/1", + "rgbi:.4/1/0", + "rgbi:.4/1/.2", + "rgbi:.4/1/.4", + "rgbi:.4/1/.6", + "rgbi:.4/1/.8", + "rgbi:.4/1/1", + "rgbi:.6/0/0", + "rgbi:.6/0/.2", + "rgbi:.6/0/.4", + "rgbi:.6/0/.6", + "rgbi:.6/0/.8", + "rgbi:.6/0/1", + "rgbi:.6/.2/0", + "rgbi:.6/.2/.2", + "rgbi:.6/.2/.4", + "rgbi:.6/.2/.6", + "rgbi:.6/.2/.8", + "rgbi:.6/.2/1", + "rgbi:.6/.4/0", + "rgbi:.6/.4/.2", + "rgbi:.6/.4/.4", + "rgbi:.6/.4/.6", + "rgbi:.6/.4/.8", + "rgbi:.6/.4/1", + "rgbi:.6/.6/0", + "rgbi:.6/.6/.2", + "rgbi:.6/.6/.4", + "rgbi:.6/.6/.6", + "rgbi:.6/.6/.8", + "rgbi:.6/.6/1", + "rgbi:.6/.8/0", + "rgbi:.6/.8/.2", + "rgbi:.6/.8/.4", + "rgbi:.6/.8/.6", + "rgbi:.6/.8/.8", + "rgbi:.6/.8/1", + "rgbi:.6/1/0", + "rgbi:.6/1/.2", + "rgbi:.6/1/.4", + "rgbi:.6/1/.6", + "rgbi:.6/1/.8", + "rgbi:.6/1/1", + "rgbi:.8/0/0", + "rgbi:.8/0/.2", + "rgbi:.8/0/.4", + "rgbi:.8/0/.6", + "rgbi:.8/0/.8", + "rgbi:.8/0/1", + "rgbi:.8/.2/0", + "rgbi:.8/.2/.2", + "rgbi:.8/.2/.4", + "rgbi:.8/.2/.6", + "rgbi:.8/.2/.8", + "rgbi:.8/.2/1", + "rgbi:.8/.4/0", + "rgbi:.8/.4/.2", + "rgbi:.8/.4/.4", + "rgbi:.8/.4/.6", + "rgbi:.8/.4/.8", + "rgbi:.8/.4/1", + "rgbi:.8/.6/0", + "rgbi:.8/.6/.2", + "rgbi:.8/.6/.4", + "rgbi:.8/.6/.6", + "rgbi:.8/.6/.8", + "rgbi:.8/.6/1", + "rgbi:.8/.8/0", + "rgbi:.8/.8/.2", + "rgbi:.8/.8/.4", + "rgbi:.8/.8/.6", + "rgbi:.8/.8/.8", + "rgbi:.8/.8/1", + "rgbi:.8/1/0", + "rgbi:.8/1/.2", + "rgbi:.8/1/.4", + "rgbi:.8/1/.6", + "rgbi:.8/1/.8", + "rgbi:.8/1/1", + "rgbi:1/0/0", + "rgbi:1/0/.2", + "rgbi:1/0/.4", + "rgbi:1/0/.6", + "rgbi:1/0/.8", + "rgbi:1/0/1", + "rgbi:1/.2/0", + "rgbi:1/.2/.2", + "rgbi:1/.2/.4", + "rgbi:1/.2/.6", + "rgbi:1/.2/.8", + "rgbi:1/.2/1", + "rgbi:1/.4/0", + "rgbi:1/.4/.2", + "rgbi:1/.4/.4", + "rgbi:1/.4/.6", + "rgbi:1/.4/.8", + "rgbi:1/.4/1", + "rgbi:1/.6/0", + "rgbi:1/.6/.2", + "rgbi:1/.6/.4", + "rgbi:1/.6/.6", + "rgbi:1/.6/.8", + "rgbi:1/.6/1", + "rgbi:1/.8/0", + "rgbi:1/.8/.2", + "rgbi:1/.8/.4", + "rgbi:1/.8/.6", + "rgbi:1/.8/.8", + "rgbi:1/.8/1", + "rgbi:1/1/0", + "rgbi:1/1/.2", + "rgbi:1/1/.4", + "rgbi:1/1/.6", + "rgbi:1/1/.8", + "rgbi:1/1/1", "rgb:08/08/08", "rgb:12/12/12", "rgb:1c/1c/1c", @@ -315,7 +315,8 @@ COLOR_CURSOR_BACKGROUND, COLOR_CURSOR_FOREGROUND, #endif /* ! NO_CURSORCOLOR */ - NULL, /* Color_pointer */ + NULL, /* Color_pointer_fg */ + NULL, /* Color_pointer_bg */ NULL, /* Color_border */ #ifndef NO_BOLD_UNDERLINE_REVERSE NULL, /* Color_BD */ @@ -329,7 +330,9 @@ COLOR_SCROLLBAR, COLOR_SCROLLTROUGH, #endif /* KEEP_SCROLLCOLOR */ - +#if TINTING + NULL, +#endif }; const char *const xa_names[NUM_XA] = @@ -356,7 +359,12 @@ bool rxvt_term::init_vars () { - PixColors = new rxvt_color [TOTAL_COLORS]; + PixColorsFocused = new rxvt_color [TOTAL_COLORS]; +#ifdef OFF_FOCUS_FADING + PixColorsUnFocused = new rxvt_color [TOTAL_COLORS]; +#endif + PixColors = PixColorsFocused; + if (PixColors == NULL) return false; @@ -386,30 +394,13 @@ TermWin.saveLines = SAVELINES; numPixColors = TOTAL_COLORS; -#ifndef NO_NEW_SELECTION - selection_style = NEW_SELECT; -#else - selection_style = OLD_SELECT; -#endif - #ifndef NO_BRIGHTCOLOR colorfgbg = DEFAULT_RSTYLE; #endif -#if defined (HOTKEY_CTRL) || defined (HOTKEY_META) - ks_bigfont = XK_greater; - ks_smallfont = XK_less; -#endif - refresh_limit = 1; refresh_type = SLOW_REFRESH; prev_nrow = prev_ncol = 0; -#ifdef MULTICHAR_SET -# ifdef MULTICHAR_ENCODING - encoding_method = MULTICHAR_ENCODING; -# endif - multichar_decode = rxvt_euc2jis; -#endif oldcursor.row = oldcursor.col = -1; #ifdef XPM_BACKGROUND @@ -513,10 +504,6 @@ cmd_argv[i] = NULL; } - /* clear all resources */ - for (i = 0; i < NUM_RESOURCES;) - rs[i++] = NULL; - rs[Rs_name] = rxvt_r_basename (argv[0]); /* @@ -541,10 +528,7 @@ if (!display && ! (display = displays.get (rs[Rs_display_name]))) - { - rxvt_print_error ("can't open display %s", rs[Rs_display_name]); - exit (EXIT_FAILURE); - } + rxvt_fatal ("can't open display %s", rs[Rs_display_name]); extract_resources (display->display, rs[Rs_name]); @@ -600,18 +584,6 @@ 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 @@ -649,29 +621,11 @@ rxvt_Str_escaped ((char *)rs[Rs_answerbackstring]); } - if (rs[Rs_selectstyle]) - { - if (STRNCASECMP (rs[Rs_selectstyle], "oldword", 7) == 0) - selection_style = OLD_WORD_SELECT; -#ifndef NO_OLD_SELECTION - - else if (STRNCASECMP (rs[Rs_selectstyle], "old", 3) == 0) - selection_style = OLD_SELECT; -#endif - - } - #ifdef HAVE_SCROLLBARS setup_scrollbar (rs[Rs_scrollBar_align], rs[Rs_scrollstyle], rs[Rs_scrollBar_thickness]); #endif - TermWin.fontset = new rxvt_fontset (this); - TermWin.fontset->populate (rs[Rs_font]); - TermWin.fwidth = TermWin.fontset->base_font ()->width; - TermWin.fheight = TermWin.fontset->base_font ()->height; - TermWin.fbase = TermWin.fontset->base_font ()->ascent; - #ifdef XTERM_REVERSE_VIDEO /* this is how xterm implements reverseVideo */ if (Options & Opt_reverseVideo) @@ -700,7 +654,8 @@ color_aliases (Color_cursor); color_aliases (Color_cursor2); #endif /* NO_CURSORCOLOR */ - color_aliases (Color_pointer); + color_aliases (Color_pointer_fg); + color_aliases (Color_pointer_bg); color_aliases (Color_border); #ifndef NO_BOLD_UNDERLINE_REVERSE color_aliases (Color_BD); @@ -804,10 +759,20 @@ { #if HAVE_XSETLOCALE || HAVE_SETLOCALE free (this->locale); - this->locale = rxvt_strdup (setlocale (LC_CTYPE, "")); + this->locale = setlocale (LC_CTYPE, locale); + + if (!this->locale) + { + rxvt_warn ("unable to set locale \"%s\", using default locale instead.\n", locale); + setlocale (LC_CTYPE, ""); + this->locale = ""; + } + + this->locale = rxvt_strdup (this->locale); SET_LOCALE (this->locale); mbstate.reset (); #endif +#if 0 #if HAVE_NL_LANGINFO free (codeset); codeset = strdup (nl_langinfo (CODESET)); @@ -816,6 +781,7 @@ #else enc_utf8 = 1; #endif +#endif } void @@ -823,7 +789,7 @@ { #ifdef USE_XIM if (!locale) - rxvt_print_error ("Setting locale failed."); + rxvt_warn ("setting locale failed, working without locale support.\n"); else { Atom wmlocale; @@ -835,7 +801,7 @@ if (!XSupportsLocale ()) { - rxvt_print_error ("The locale is not supported by Xlib"); + rxvt_warn ("the locale is not supported by Xlib, working withotu locale support.\n"); return; } @@ -875,11 +841,11 @@ get_ourmods (); - if (! (Options & Opt_scrollTtyOutput)) + if (!(Options & Opt_scrollTtyOutput)) PrivateModes |= PrivMode_TtyOutputInh; if (Options & Opt_scrollTtyKeypress) PrivateModes |= PrivMode_Keypress; - if (! (Options & Opt_jumpScroll)) + if (!(Options & Opt_jumpScroll)) PrivateModes |= PrivMode_smoothScroll; #ifndef NO_BACKSPACE_KEY @@ -904,11 +870,7 @@ (void)gettimeofday (&lastcursorchange, NULL); #endif - if ((cmd_fd = run_command (argv)) < 0) - { - rxvt_print_error ("aborting"); - exit (EXIT_FAILURE); - } + run_command (argv); } /*----------------------------------------------------------------------*/ @@ -917,7 +879,11 @@ { int i; - for (i = 0; i < (XDEPTH <= 2 ? 2 : NRS_COLORS); i++) +#ifdef OFF_FOCUS_FADING + PixColors = PixColorsFocused; +#endif + + for (i = 0; i < (display->depth <= 2 ? 2 : NRS_COLORS); i++) { rxvt_color xcol; @@ -943,8 +909,7 @@ case Color_fg: case Color_bg: /* fatal: need bg/fg color */ - rxvt_print_error ("aborting"); - exit (EXIT_FAILURE); + rxvt_fatal ("unable to get foreground/background colour, aborting"); /* NOTREACHED */ break; #ifndef NO_CURSORCOLOR @@ -952,7 +917,7 @@ xcol = PixColors[Color_fg]; break; #endif /* ! NO_CURSORCOLOR */ - case Color_pointer: + case Color_pointer_fg: xcol = PixColors[Color_fg]; break; default: @@ -963,13 +928,19 @@ } PixColors[i] = xcol; +#ifdef OFF_FOCUS_FADING + if (rs[Rs_fade]) + PixColorsUnFocused[i] = xcol.fade (display, atoi (rs[Rs_fade])); +#endif SET_PIXCOLOR (i); } - if (XDEPTH <= 2 || !rs[Rs_color + Color_pointer]) - PixColors[Color_pointer] = PixColors[Color_fg]; - if (XDEPTH <= 2 || !rs[Rs_color + Color_border]) - PixColors[Color_border] = PixColors[Color_fg]; + if (display->depth <= 2) + { + if (!rs[Rs_color + Color_pointer_fg]) PixColors[Color_pointer_fg] = PixColors[Color_fg]; + if (!rs[Rs_color + Color_pointer_bg]) PixColors[Color_pointer_bg] = PixColors[Color_bg]; + if (!rs[Rs_color + Color_border] ) PixColors[Color_border] = PixColors[Color_fg]; + } /* * get scrollBar/menuBar shadow colors @@ -979,37 +950,28 @@ */ #ifdef KEEP_SCROLLCOLOR - if (XDEPTH <= 2) + if (display->depth <= 2) { /* Monochrome */ - PixColors[Color_scroll] = PixColors[Color_fg]; - PixColors[Color_topShadow] = PixColors[Color_bg]; + PixColors[Color_scroll] = PixColors[Color_fg]; + PixColors[Color_topShadow] = PixColors[Color_bg]; PixColors[Color_bottomShadow] = PixColors[Color_bg]; } else { - rxvt_color xcol[3]; + rxvt_color xcol[2]; /* xcol[0] == white * xcol[1] == top shadow * xcol[2] == bot shadow */ xcol[1] = PixColors[Color_scroll]; -# ifdef PREFER_24BIT xcol[0].set (display, 65535, 65535, 65535); - /* XFreeColors (display->display, XCMAP, & (xcol[0].pixel), 1, ~0); */ -# else - xcol[0].set (display, WhitePixel (display->display, display->screen)); -# endif unsigned short pr1, pg1, pb1, pr0, pg0, pb0; xcol[0].get (display, pr0, pg0, pb0); xcol[1].get (display, pr1, pg1, pb1); - /* bottomShadowColor */ - if (!xcol[2].set (display, pr1 / 2, pg1 / 2, pb1 / 2)) - xcol[2] = PixColors[Color_Black]; - - PixColors[Color_bottomShadow] = xcol[2]; + PixColors[Color_bottomShadow] = xcol[1].fade (display, 50); /* topShadowColor */ if (!xcol[1].set (display, @@ -1123,11 +1085,15 @@ void rxvt_term::create_windows (int argc, const char *const *argv) { - XClassHint classHint; - XWMHints wmHint; - XGCValues gcvalue; - long vt_emask; - + XClassHint classHint; + XWMHints wmHint; +#ifndef NO_FRILLS + Atom prop = None; + MWMHints mwmhints; +#endif + XGCValues gcvalue; + long vt_emask; + XSetWindowAttributes attributes; XWindowAttributes gattr; if (Options & Opt_transparent) @@ -1136,22 +1102,48 @@ display->depth = gattr.depth; // doh //TODO, per-term not per-display? } +#ifndef NO_FRILLS + if (Options & Opt_borderLess) + { + prop = XInternAtom(display->display, "_MOTIF_WM_INFO", True); + if (prop == None) + { + /* print_warning("Window Manager does not support MWM hints. Bypassing window manager control for borderless window.\n");*/ +#ifdef PREFER_24BIT + attributes.override_redirect = TRUE; +#endif + mwmhints.flags = 0; + } + else + { + mwmhints.flags = MWM_HINTS_DECORATIONS; + mwmhints.decorations = 0; + } + } + else + { + mwmhints.flags = 0; + } +#endif + /* grab colors before netscape does */ Get_Colours (); - change_font (1, NULL); + if (!change_font (rs[Rs_font])) + { + fprintf (stderr, "unable to load a base font, please provide one using -fn fontname\n"); + destroy (); + return; + } + window_calc (0, 0); old_width = szHint.width; old_height = szHint.height; - /* parent window - reverse video so we can see placement errors - * sub-window placement & size in rxvt_resize_subwindows () - */ + /* sub-window placement & size in rxvt_resize_subwindows () */ #ifdef PREFER_24BIT - XSetWindowAttributes attributes; - - attributes.background_pixel = PixColors[Color_fg]; + attributes.background_pixel = PixColors[Color_bg]; attributes.border_pixel = PixColors[Color_border]; attributes.colormap = display->cmap; TermWin.parent[0] = XCreateWindow (display->display, DefaultRootWindow (display->display), @@ -1160,41 +1152,55 @@ TermWin.ext_bwidth, display->depth, InputOutput, display->visual, - CWBackPixel | CWBorderPixel | CWColormap, &attributes); + CWColormap | CWBackPixel | CWBorderPixel, &attributes); #else TermWin.parent[0] = XCreateSimpleWindow (display->display, DefaultRootWindow (display->display), - szHint.x, szHint.y, - szHint.width, - szHint.height, - TermWin.ext_bwidth, - PixColors[Color_border], - PixColors[Color_fg]); + szHint.x, szHint.y, + szHint.width, szHint.height, + TermWin.ext_bwidth, + PixColors[Color_border], + PixColors[Color_bg]); #endif - xterm_seq (XTerm_title, rs[Rs_title], CHAR_ST); - xterm_seq (XTerm_iconName, rs[Rs_iconName], CHAR_ST); + process_xterm_seq (XTerm_title, rs[Rs_title], CHAR_ST); + process_xterm_seq (XTerm_iconName, rs[Rs_iconName], CHAR_ST); classHint.res_name = (char *)rs[Rs_name]; - classHint.res_class = (char *)APL_CLASS; + classHint.res_class = (char *)RESCLASS; - wmHint.flags = (InputHint | StateHint | WindowGroupHint); + wmHint.flags = InputHint | StateHint | WindowGroupHint; wmHint.input = True; - wmHint.initial_state = (Options & Opt_iconic ? IconicState - : NormalState); + wmHint.initial_state = Options & Opt_iconic ? IconicState : NormalState; wmHint.window_group = TermWin.parent[0]; XSetWMProperties (display->display, TermWin.parent[0], NULL, NULL, - (char **)argv, argc, &szHint, &wmHint, &classHint); + (char **)argv, argc, &szHint, &wmHint, &classHint); + +#ifndef NO_FRILLS + long pid = getpid (); + XChangeProperty (display->display, TermWin.parent[0], + display->atom ("_NET_WM_PID"), XA_CARDINAL, 32, + PropModeReplace, (unsigned char *)&pid, 1); +#endif XSelectInput (display->display, TermWin.parent[0], - KeyPressMask + KeyPressMask #if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING) - | KeyReleaseMask + | KeyReleaseMask #endif - | FocusChangeMask | VisibilityChangeMask - | StructureNotifyMask); + | FocusChangeMask | VisibilityChangeMask + | ExposureMask + | StructureNotifyMask); termwin_ev.start (display, TermWin.parent[0]); +#ifndef NO_FRILLS + if (mwmhints.flags) + { + prop = XInternAtom(display->display, "_MOTIF_WM_HINTS", False); + XChangeProperty(display->display, TermWin.parent[0], prop, prop, 32, PropModeReplace, (unsigned char *) &mwmhints, PROP_MWM_HINTS_ELEMENTS); + } +#endif + /* vt cursor: Black-on-White is standard, but this is more popular */ TermWin_cursor = XCreateFontCursor (display->display, XC_xterm); @@ -1218,28 +1224,30 @@ /* the vt window */ TermWin.vt = XCreateSimpleWindow (display->display, TermWin.parent[0], - window_vt_x, window_vt_y, + window_vt_x, + window_vt_y, TermWin_TotalWidth (), TermWin_TotalHeight (), 0, PixColors[Color_fg], PixColors[Color_bg]); - #ifdef DEBUG_X XStoreName (display->display, TermWin.vt, "vt window"); #endif - vt_emask = (ExposureMask | ButtonPressMask | ButtonReleaseMask - | PropertyChangeMask); + attributes.bit_gravity = NorthWestGravity; + XChangeWindowAttributes (display->display, TermWin.vt, CWBitGravity, &attributes); + + vt_emask = ExposureMask | ButtonPressMask | ButtonReleaseMask | PropertyChangeMask; -#ifdef POINTER_BLANK pointer_unblank (); - if ((Options & Opt_pointerBlank)) +#ifdef POINTER_BLANK + if (Options & Opt_pointerBlank) vt_emask |= PointerMotionMask; else #endif - vt_emask |= (Button1MotionMask | Button3MotionMask); + vt_emask |= Button1MotionMask | Button3MotionMask; XSelectInput (display->display, TermWin.vt, vt_emask); vt_ev.start (display, TermWin.vt); @@ -1248,17 +1256,21 @@ if (menuBar_height ()) { menuBar.win = XCreateSimpleWindow (display->display, TermWin.parent[0], - window_vt_x, 0, - TermWin_TotalWidth (), - menuBar_TotalHeight (), - 0, - PixColors[Color_fg], - PixColors[Color_scroll]); + window_vt_x, 0, + TermWin_TotalWidth (), + menuBar_TotalHeight (), + 0, + PixColors[Color_fg], + PixColors[Color_scroll]); + #ifdef DEBUG_X XStoreName (display->display, menuBar.win, "menubar"); #endif - XDefineCursor (display->display, menuBar.win, pointer_leftptr); + menuBar.drawable = new rxvt_drawable (display, menuBar.win); + + XDefineCursor (display->display, menuBar.win, + XCreateFontCursor (display->display, XC_left_ptr)); XSelectInput (display->display, menuBar.win, (ExposureMask | ButtonPressMask | ButtonReleaseMask @@ -1271,7 +1283,7 @@ if (rs[Rs_backgroundPixmap] != NULL && ! (Options & Opt_transparent)) { - const char *p = rs[Rs_backgroundPixmap]; + const char *p = rs[Rs_backgroundPixmap]; if ((p = STRCHR (p, ';')) != NULL) { @@ -1288,20 +1300,24 @@ gcvalue.background = PixColors[Color_bg]; gcvalue.graphics_exposures = 1; TermWin.gc = XCreateGC (display->display, TermWin.vt, - GCForeground | GCBackground - | GCGraphicsExposures, &gcvalue); + GCForeground | GCBackground | GCGraphicsExposures, + &gcvalue); + + TermWin.drawable = new rxvt_drawable (display, TermWin.vt); #if defined(MENUBAR) || defined(RXVT_SCROLLBAR) gcvalue.foreground = PixColors[Color_topShadow]; - topShadowGC = XCreateGC (display->display, TermWin.vt, - GCForeground, &gcvalue); + topShadowGC = XCreateGC (display->display, TermWin.vt, GCForeground, &gcvalue); gcvalue.foreground = PixColors[Color_bottomShadow]; - botShadowGC = XCreateGC (display->display, TermWin.vt, - GCForeground, &gcvalue); - gcvalue.foreground = PixColors[ (XDEPTH <= 2 ? Color_fg - : Color_scroll)]; - scrollbarGC = XCreateGC (display->display, TermWin.vt, - GCForeground, &gcvalue); + botShadowGC = XCreateGC (display->display, TermWin.vt, GCForeground, &gcvalue); + gcvalue.foreground = PixColors[ (display->depth <= 2 ? Color_fg : Color_scroll)]; + scrollbarGC = XCreateGC (display->display, TermWin.vt, GCForeground, &gcvalue); +#endif + +#ifdef OFF_FOCUS_FADING + // initially we are in unfocused state + if (rs[Rs_fade]) + PixColors = PixColorsUnFocused; #endif } @@ -1311,19 +1327,16 @@ * master end of the pseudo-teletype pair with the command talking to * the slave. */ -int +void rxvt_term::run_command (const char *const *argv) { - int cfd, er; + int er; /* get master (pty) */ - if ((cfd = rxvt_get_pty (& (tty_fd), & (ttydev))) < 0) - { - rxvt_print_error ("can't open pseudo-tty"); - return -1; - } + if ((cmd_fd = rxvt_get_pty (&tty_fd, &ttydev)) < 0) + rxvt_fatal ("can't open pseudo-tty"); - fcntl (cfd, F_SETFL, O_NONBLOCK); + fcntl (cmd_fd, F_SETFL, O_NONBLOCK); /* get slave (tty) */ if (tty_fd < 0) @@ -1334,11 +1347,12 @@ if ((tty_fd = rxvt_get_tty (ttydev)) < 0) { - close (cfd); - rxvt_print_error ("can't open slave tty %s", ttydev); - return -1; + close (cmd_fd); + cmd_fd = -1; + rxvt_fatal ("can't open slave tty %s", ttydev); } } + #ifndef NO_BACKSPACE_KEY if (key_backspace[0] && !key_backspace[1]) er = key_backspace[0]; @@ -1346,25 +1360,21 @@ er = '\177'; /* the initial state anyway */ else #endif - er = -1; - rxvt_get_ttymode (& (tio), er); + rxvt_get_ttymode (&tio, er); #ifndef __QNX__ /* spin off the command interpreter */ switch (cmd_pid = fork ()) { case -1: - rxvt_print_error ("can't fork"); - return -1; + rxvt_fatal ("can't fork"); case 0: - close (cfd); /* only keep tty_fd and STDERR open */ - init_env (); if (rxvt_control_tty (tty_fd, ttydev) < 0) - rxvt_print_error ("could not obtain control of tty"); + fprintf (stderr, "%s: could not obtain control of tty.", RESNAME); else { /* Reopen stdin, stdout and stderr over the tty file descriptor */ @@ -1372,13 +1382,19 @@ dup2 (tty_fd, STDOUT_FILENO); dup2 (tty_fd, STDERR_FILENO); - if (tty_fd > 2) - close (tty_fd); + // close all our file handles that we do no longer need + for (rxvt_term **t = termlist.begin (); t < termlist.end (); t++) + { + if ((*t)->cmd_fd > 2) close ((*t)->cmd_fd); + if ((*t)->tty_fd > 2) close ((*t)->tty_fd); + } run_child (argv); + fprintf (stderr, "%s: unable to exec child.", RESNAME); } - exit (EXIT_FAILURE); - /* NOTREACHED */ + + _exit (EXIT_FAILURE); + default: { #if defined(HAVE_STRUCT_UTMP) && defined(HAVE_TTYSLOT) @@ -1397,21 +1413,19 @@ dup2 (fdstdin, STDIN_FILENO); close (fdstdin); #endif - } + close (tty_fd); /* keep STDERR_FILENO, cmd_fd, display->fd () open */ break; } #else /* __QNX__ uses qnxspawn () */ fchmod (tty_fd, 0622); fcntl (tty_fd, F_SETFD, FD_CLOEXEC); - fcntl (cfd, F_SETFD, FD_CLOEXEC); + fcntl (cmd_fd, F_SETFD, FD_CLOEXEC); if (run_child (argv) == -1) exit (EXIT_FAILURE); #endif - - return cfd; } /* ------------------------------------------------------------------------- * @@ -1439,10 +1453,8 @@ fd = open (CONSOLE, O_WRONLY, 0); if (fd >= 0) - { - if (ioctl (fd, SRIOCSREDIR, NULL) < 0) - close (fd); - } + if (ioctl (fd, SRIOCSREDIR, NULL) < 0) + close (fd); #endif /* SRIOCSREDIR */ }