--- rxvt-unicode/src/init.C 2004/07/30 16:13:46 1.65 +++ rxvt-unicode/src/init.C 2004/08/13 03:47:09 1.70 @@ -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", @@ -870,8 +870,7 @@ (void)gettimeofday (&lastcursorchange, NULL); #endif - if ((cmd_fd = run_command (argv)) < 0) - rxvt_fatal ("failure while running command, aborting"); + run_command (argv); } /*----------------------------------------------------------------------*/ @@ -884,7 +883,7 @@ PixColors = PixColorsFocused; #endif - for (i = 0; i < (XDEPTH <= 2 ? 2 : NRS_COLORS); i++) + for (i = 0; i < (display->depth <= 2 ? 2 : NRS_COLORS); i++) { rxvt_color xcol; @@ -936,7 +935,7 @@ SET_PIXCOLOR (i); } - if (XDEPTH <= 2) + 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]; @@ -951,7 +950,7 @@ */ #ifdef KEEP_SCROLLCOLOR - if (XDEPTH <= 2) + if (display->depth <= 2) { /* Monochrome */ PixColors[Color_scroll] = PixColors[Color_fg]; PixColors[Color_topShadow] = PixColors[Color_bg]; @@ -1088,6 +1087,10 @@ { XClassHint classHint; XWMHints wmHint; +#ifndef NO_FRILLS + Atom prop = None; + MWMHints mwmhints; +#endif XGCValues gcvalue; long vt_emask; XSetWindowAttributes attributes; @@ -1099,6 +1102,30 @@ 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 (); @@ -1162,9 +1189,18 @@ | KeyReleaseMask #endif | 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); @@ -1274,7 +1310,7 @@ 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)]; + gcvalue.foreground = PixColors[ (display->depth <= 2 ? Color_fg : Color_scroll)]; scrollbarGC = XCreateGC (display->display, TermWin.vt, GCForeground, &gcvalue); #endif @@ -1291,16 +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) + 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) @@ -1311,10 +1347,12 @@ if ((tty_fd = rxvt_get_tty (ttydev)) < 0) { - close (cfd); + 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]; @@ -1322,10 +1360,9 @@ 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 */ @@ -1334,8 +1371,6 @@ case -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) @@ -1347,8 +1382,12 @@ 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); @@ -1382,13 +1421,11 @@ #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; } /* ------------------------------------------------------------------------- * @@ -1416,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 */ }