--- rxvt-unicode/src/init.C 2008/02/19 10:47:03 1.249 +++ rxvt-unicode/src/init.C 2010/04/01 00:12:33 1.263 @@ -176,6 +176,7 @@ "rgb:00/ff/ff", // 6/14: bright cyan (Cyan) "rgb:ff/ff/ff", // 7/15: bright white (White) +#ifndef USE_256_COLORS // 88 xterm colours "rgb:00/00/00", "rgb:00/00/8b", @@ -249,6 +250,249 @@ "rgb:b9/b9/b9", "rgb:d0/d0/d0", "rgb:e7/e7/e7", +#else + // 256 xterm colours + "rgb:00/00/00", + "rgb:00/00/5f", + "rgb:00/00/87", + "rgb:00/00/af", + "rgb:00/00/d7", + "rgb:00/00/ff", + "rgb:00/5f/00", + "rgb:00/5f/5f", + "rgb:00/5f/87", + "rgb:00/5f/af", + "rgb:00/5f/d7", + "rgb:00/5f/ff", + "rgb:00/87/00", + "rgb:00/87/5f", + "rgb:00/87/87", + "rgb:00/87/af", + "rgb:00/87/d7", + "rgb:00/87/ff", + "rgb:00/af/00", + "rgb:00/af/5f", + "rgb:00/af/87", + "rgb:00/af/af", + "rgb:00/af/d7", + "rgb:00/af/ff", + "rgb:00/d7/00", + "rgb:00/d7/5f", + "rgb:00/d7/87", + "rgb:00/d7/af", + "rgb:00/d7/d7", + "rgb:00/d7/ff", + "rgb:00/ff/00", + "rgb:00/ff/5f", + "rgb:00/ff/87", + "rgb:00/ff/af", + "rgb:00/ff/d7", + "rgb:00/ff/ff", + "rgb:5f/00/00", + "rgb:5f/00/5f", + "rgb:5f/00/87", + "rgb:5f/00/af", + "rgb:5f/00/d7", + "rgb:5f/00/ff", + "rgb:5f/5f/00", + "rgb:5f/5f/5f", + "rgb:5f/5f/87", + "rgb:5f/5f/af", + "rgb:5f/5f/d7", + "rgb:5f/5f/ff", + "rgb:5f/87/00", + "rgb:5f/87/5f", + "rgb:5f/87/87", + "rgb:5f/87/af", + "rgb:5f/87/d7", + "rgb:5f/87/ff", + "rgb:5f/af/00", + "rgb:5f/af/5f", + "rgb:5f/af/87", + "rgb:5f/af/af", + "rgb:5f/af/d7", + "rgb:5f/af/ff", + "rgb:5f/d7/00", + "rgb:5f/d7/5f", + "rgb:5f/d7/87", + "rgb:5f/d7/af", + "rgb:5f/d7/d7", + "rgb:5f/d7/ff", + "rgb:5f/ff/00", + "rgb:5f/ff/5f", + "rgb:5f/ff/87", + "rgb:5f/ff/af", + "rgb:5f/ff/d7", + "rgb:5f/ff/ff", + "rgb:87/00/00", + "rgb:87/00/5f", + "rgb:87/00/87", + "rgb:87/00/af", + "rgb:87/00/d7", + "rgb:87/00/ff", + "rgb:87/5f/00", + "rgb:87/5f/5f", + "rgb:87/5f/87", + "rgb:87/5f/af", + "rgb:87/5f/d7", + "rgb:87/5f/ff", + "rgb:87/87/00", + "rgb:87/87/5f", + "rgb:87/87/87", + "rgb:87/87/af", + "rgb:87/87/d7", + "rgb:87/87/ff", + "rgb:87/af/00", + "rgb:87/af/5f", + "rgb:87/af/87", + "rgb:87/af/af", + "rgb:87/af/d7", + "rgb:87/af/ff", + "rgb:87/d7/00", + "rgb:87/d7/5f", + "rgb:87/d7/87", + "rgb:87/d7/af", + "rgb:87/d7/d7", + "rgb:87/d7/ff", + "rgb:87/ff/00", + "rgb:87/ff/5f", + "rgb:87/ff/87", + "rgb:87/ff/af", + "rgb:87/ff/d7", + "rgb:87/ff/ff", + "rgb:af/00/00", + "rgb:af/00/5f", + "rgb:af/00/87", + "rgb:af/00/af", + "rgb:af/00/d7", + "rgb:af/00/ff", + "rgb:af/5f/00", + "rgb:af/5f/5f", + "rgb:af/5f/87", + "rgb:af/5f/af", + "rgb:af/5f/d7", + "rgb:af/5f/ff", + "rgb:af/87/00", + "rgb:af/87/5f", + "rgb:af/87/87", + "rgb:af/87/af", + "rgb:af/87/d7", + "rgb:af/87/ff", + "rgb:af/af/00", + "rgb:af/af/5f", + "rgb:af/af/87", + "rgb:af/af/af", + "rgb:af/af/d7", + "rgb:af/af/ff", + "rgb:af/d7/00", + "rgb:af/d7/5f", + "rgb:af/d7/87", + "rgb:af/d7/af", + "rgb:af/d7/d7", + "rgb:af/d7/ff", + "rgb:af/ff/00", + "rgb:af/ff/5f", + "rgb:af/ff/87", + "rgb:af/ff/af", + "rgb:af/ff/d7", + "rgb:af/ff/ff", + "rgb:d7/00/00", + "rgb:d7/00/5f", + "rgb:d7/00/87", + "rgb:d7/00/af", + "rgb:d7/00/d7", + "rgb:d7/00/ff", + "rgb:d7/5f/00", + "rgb:d7/5f/5f", + "rgb:d7/5f/87", + "rgb:d7/5f/af", + "rgb:d7/5f/d7", + "rgb:d7/5f/ff", + "rgb:d7/87/00", + "rgb:d7/87/5f", + "rgb:d7/87/87", + "rgb:d7/87/af", + "rgb:d7/87/d7", + "rgb:d7/87/ff", + "rgb:d7/af/00", + "rgb:d7/af/5f", + "rgb:d7/af/87", + "rgb:d7/af/af", + "rgb:d7/af/d7", + "rgb:d7/af/ff", + "rgb:d7/d7/00", + "rgb:d7/d7/5f", + "rgb:d7/d7/87", + "rgb:d7/d7/af", + "rgb:d7/d7/d7", + "rgb:d7/d7/ff", + "rgb:d7/ff/00", + "rgb:d7/ff/5f", + "rgb:d7/ff/87", + "rgb:d7/ff/af", + "rgb:d7/ff/d7", + "rgb:d7/ff/ff", + "rgb:ff/00/00", + "rgb:ff/00/5f", + "rgb:ff/00/87", + "rgb:ff/00/af", + "rgb:ff/00/d7", + "rgb:ff/00/ff", + "rgb:ff/5f/00", + "rgb:ff/5f/5f", + "rgb:ff/5f/87", + "rgb:ff/5f/af", + "rgb:ff/5f/d7", + "rgb:ff/5f/ff", + "rgb:ff/87/00", + "rgb:ff/87/5f", + "rgb:ff/87/87", + "rgb:ff/87/af", + "rgb:ff/87/d7", + "rgb:ff/87/ff", + "rgb:ff/af/00", + "rgb:ff/af/5f", + "rgb:ff/af/87", + "rgb:ff/af/af", + "rgb:ff/af/d7", + "rgb:ff/af/ff", + "rgb:ff/d7/00", + "rgb:ff/d7/5f", + "rgb:ff/d7/87", + "rgb:ff/d7/af", + "rgb:ff/d7/d7", + "rgb:ff/d7/ff", + "rgb:ff/ff/00", + "rgb:ff/ff/5f", + "rgb:ff/ff/87", + "rgb:ff/ff/af", + "rgb:ff/ff/d7", + "rgb:ff/ff/ff", + "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, @@ -295,6 +539,7 @@ int_bwidth = INTERNALBORDERWIDTH; ext_bwidth = EXTERNALBORDERWIDTH; lineSpace = LINESPACE; + letterSpace = LETTERSPACE; saveLines = SAVELINES; refresh_type = SLOW_REFRESH; @@ -309,6 +554,7 @@ set_option (Opt_secondaryScroll); set_option (Opt_pastableTabs); set_option (Opt_intensityStyles); + set_option (Opt_iso14755); set_option (Opt_iso14755_52); set_option (Opt_buffered); } @@ -394,17 +640,17 @@ select_visual (strtol (rs[Rs_depth], 0, 0)); #endif -#ifdef HAVE_AFTERIMAGE - set_application_name ((char*)rs[Rs_name]); - set_output_threshold (OUTPUT_LEVEL_WARNING); - asv = create_asvisual_for_id (dpy, display->screen, depth, XVisualIDFromVisual (visual), cmap, NULL); -#endif free (r_argv); for (int i = NUM_RESOURCES; i--; ) if (rs [i] == resval_undef) rs [i] = 0; +#ifdef HAVE_AFTERIMAGE + set_application_name ((char *)rs[Rs_name]); + set_output_threshold (OUTPUT_LEVEL_WARNING); +#endif + #if ENABLE_PERL if (!rs[Rs_perl_ext_1]) rs[Rs_perl_ext_1] = "default"; @@ -425,6 +671,7 @@ { if (!rs[Rs_title]) rs[Rs_title] = rxvt_basename (cmd_argv[0]); + if (!rs[Rs_iconName]) rs[Rs_iconName] = rs[Rs_title]; } @@ -432,6 +679,7 @@ { if (!rs[Rs_title]) rs[Rs_title] = rs[Rs_name]; + if (!rs[Rs_iconName]) rs[Rs_iconName] = rs[Rs_name]; } @@ -448,6 +696,9 @@ if (rs[Rs_lineSpace] && (i = atoi (rs[Rs_lineSpace])) >= 0) lineSpace = min (i, std::numeric_limits::max ()); + + if (rs[Rs_letterSpace]) + letterSpace = atoi (rs[Rs_letterSpace]); #endif #ifdef POINTER_BLANK @@ -461,11 +712,6 @@ if (!saveLines) set_option (Opt_scrollBar, 0); -#ifdef PRINTPIPE - if (!rs[Rs_print_pipe]) - rs[Rs_print_pipe] = PRINTPIPE; -#endif - if (!rs[Rs_cutchars]) rs[Rs_cutchars] = CUTCHARS; @@ -541,7 +787,7 @@ SET_R (this); set_locale (""); - set_environ (envv); // few things in X do not call setlocale :( + set_environ (envv); // a few things in X do not call setlocale :( init_vars (); @@ -553,6 +799,16 @@ keyboard->register_done (); #endif + if (const char *path = rs[Rs_chdir]) + if (*path) // ignored if empty + { + if (*path != '/') + rxvt_fatal ("specified shell working directory must start with a slash, aborting.\n"); + + if (chdir (path)) + rxvt_fatal ("unable to change into specified shell working directory, aborting.\n"); + } + if (option (Opt_scrollBar)) scrollBar.state = STATE_IDLE; /* set existence for size calculations */ @@ -562,7 +818,7 @@ init_xlocale (); - scr_reset (); // initialize screen + scr_poweron (); // initialize screen #if 0 XSynchronize (dpy, True); @@ -834,7 +1090,7 @@ /*----------------------------------------------------------------------*/ void -rxvt_term::Get_Colours () +rxvt_term::get_colours () { int i; @@ -1061,7 +1317,7 @@ dLocal (Display *, dpy); /* grab colors before netscape does */ - Get_Colours (); + get_colours (); if (!set_fonts ()) rxvt_fatal ("unable to load base fontset, please specify a valid one using -fn, aborting.\n"); @@ -1119,8 +1375,8 @@ old_width = szHint.width; old_height = szHint.height; - process_xterm_seq (XTerm_title, rs[Rs_title], CHAR_ST); - process_xterm_seq (XTerm_iconName, rs[Rs_iconName], CHAR_ST); + set_title (rs [Rs_title]); + set_icon_name (rs [Rs_iconName]); classHint.res_name = (char *)rs[Rs_name]; classHint.res_class = (char *)RESCLASS; @@ -1132,6 +1388,56 @@ XmbSetWMProperties (dpy, top, NULL, NULL, (char **)argv, argc, &szHint, &wmHint, &classHint); +#if ENABLE_EWMH +# ifdef HAVE_AFTERIMAGE + /* + * set up icon hint + * rs [Rs_iconfile] is path to icon, asv has been created in init_resources + */ + + if (rs [Rs_iconfile]) + { + init_asv (); + + ASImage *im = file2ASImage (rs [Rs_iconfile], 0xFFFFFFFF, SCREEN_GAMMA, 0, NULL); + if (asv && im) + { + int w = im->width; + int h = im->height; + long *buffer = (long *)malloc ((2 + w * h) * sizeof (long)); + ASImage *result = scale_asimage (asv, im, + w, h, ASA_ARGB32, + 100, ASIMAGE_QUALITY_DEFAULT); + destroy_asimage (&im); + + if (buffer && result) + { + ARGB32 *asbuf = result->alt.argb32; + buffer [0] = w; + buffer [1] = h; + + for (unsigned int i = 0; i < w * h; ++i) + buffer [i + 2] = asbuf [i]; + + destroy_asimage (&result); + XChangeProperty (dpy, top, xa[XA_NET_WM_ICON], XA_CARDINAL, 32, + PropModeReplace, (const unsigned char *) buffer, 2 + w * h); + free (buffer); + } + else + { + if (!buffer) + rxvt_warn ("Memory allocation for icon hint failed, continuing without.\n"); + + if (!result) + rxvt_warn ("Icon image transformation to ARGB failed, continuing without.\n"); + } + } + else + rxvt_warn ("Loading image icon failed, continuing without.\n"); + } +# endif +#endif #if ENABLE_FRILLS if (mwmhints.flags) @@ -1526,11 +1832,6 @@ signal (SIGTTOU, SIG_IGN); #endif /* SIGTSTP */ - // unblock signals (signals are blocked by iom.C - sigset_t ss; - sigemptyset (&ss); - sigprocmask (SIG_SETMASK, &ss, 0); - /* command interpreter path */ if (argv) { @@ -1551,7 +1852,7 @@ if ((shell = getenv ("SHELL")) == NULL || *shell == '\0') shell = "/bin/sh"; - argv0 = (const char *)rxvt_basename (shell); + argv0 = rxvt_basename (shell); if (option (Opt_loginShell)) {