* Tom Scogland on Thursday, June 26, 2008 at 07:21:55 -0500
> I've been a screen user for a few years on linux, but when switching
> to osx as my primary os not too long ago (long story...) I found the
> current development versions wont build. The issue was just a #ifdef
> that was checking the wrong item, patch attached. (sorry if this isn't
> the right place, given recent activity it seemed like the best idea)
I always apply attached patch that apple apparently uses for its
shipped screen w/o probs.
<http://www.opensource.apple.com/darwinsource/tarballs/other/screen-11.tar.gz>
> There is one other issue however that I'm having much worse trouble
> tracking down. On osx if I specify that screen should use
> screen-256color-bce as its TERM, it fails back to vt100 and all
> features disappear, once this happens I can't change screen's internal
> term through ^a:term it just sticks there. As a temporary measure I'm
> having it use xterm-256color, but I would like to find/fix the issue,
> if anyone knows where I might look for that it would be very helpful.
> Oh, and that term value works fine on linux and the terminfo file is
> in the path in 3 seperate places... so it shouldn't be a path issue.
FWIW, I can't reproduce this. Is this within Terminal.app?
Because there nsterm family is recommended -- only works up to
nsterm-16color though with recent ncurses.
Within X11 xterm both xterm-256color and xterm-256color-bce work
for me -- personally I prefer w/o bce as in some apps (mutt) the
drawing of menu bars do not span the whole width.
This is on MacOS 10.4.11. For Leopard I don't know.
c
--
Was heißt hier Dogma, ich bin Underdogma!
[ What the hell do you mean dogma, I am underdogma. ]
_F R E E_ _V I D E O S_ -->> http://www.blacktrash.org/underdogma/
diff --git a/src/Makefile.in b/src/Makefile.in
index 3035e51..6de77b1 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -79,7 +79,7 @@ install_bin: .version screen
-if [ -f $(DESTDIR)$(bindir)/screen ] && [ ! -f $(DESTDIR)$(bindir)/screen.old ]; then mv $(DESTDIR)$(bindir)/screen $(DESTDIR)$(bindir)/screen.old; fi
rm -f $(DESTDIR)$(bindir)/screen
(cd $(DESTDIR)$(bindir) && ln -f -s $(SCREEN) screen)
- cp $(srcdir)/utf8encodings/?? $(DESTDIR)$(SCREENENCODINGS)
+ cp $(srcdir)/utf8encodings/?? $(DSTROOT)$(SCREENENCODINGS)
###############################################################################
install: installdirs install_bin
@@ -95,7 +95,7 @@ install: installdirs install_bin
installdirs:
# Path leading to ETCSCREENRC and Socketdirectory not checked.
- $(srcdir)/etc/mkinstalldirs $(DESTDIR)$(bindir) $(DESTDIR)$(SCREENENCODINGS)
+ $(srcdir)/etc/mkinstalldirs $(DESTDIR)$(bindir) $(DSTROOT)$(SCREENENCODINGS)
cd doc ; $(MAKE) installdirs
uninstall: .version
@@ -122,7 +122,7 @@ tty.c: tty.sh
sh $(srcdir)/tty.sh tty.c
comm.h: comm.c comm.sh config.h
- AWK=$(AWK) CC="$(CC) $(CFLAGS)" srcdir=${srcdir} sh $(srcdir)/comm.sh
+ AWK=$(AWK) srcdir=${srcdir} sh $(srcdir)/comm.sh
osdef.h: osdef.sh config.h osdef.h.in
CPP="$(CPP) $(CPPFLAGS)" srcdir=${srcdir} sh $(srcdir)/osdef.sh
diff --git a/src/config.h.in b/src/config.h.in
index ebac18a..a0d9308 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -208,14 +208,14 @@
* If screen is installed with permissions to update /etc/utmp (such
* as if it is installed set-uid root), define UTMPOK.
*/
-#define UTMPOK
+#undef UTMPOK
/* Set LOGINDEFAULT to one (1)
* if you want entries added to /etc/utmp by default, else set it to
* zero (0).
* LOGINDEFAULT will be one (1) whenever LOGOUTOK is undefined!
*/
-#define LOGINDEFAULT 1
+#undef LOGINDEFAULT
/* Set LOGOUTOK to one (1)
* if you want the user to be able to log her/his windows out.
@@ -231,7 +231,7 @@
* Set CAREFULUTMP to one (1) if you want that users have at least one
* window per screen session logged in.
*/
-#define LOGOUTOK 1
+#undef LOGOUTOK
#undef CAREFULUTMP
diff --git a/src/configure b/src/configure
index 3a6b754..b9726aa 100755
--- a/src/configure
+++ b/src/configure
@@ -5572,7 +5572,7 @@ cat >>conftest.$ac_ext <<_ACEOF
#include <time.h> /* to get time_t on SCO */
#include <sys/types.h>
-#if defined(__SVR4) && !defined(DGUX)
+#if (defined(__SVR4) || defined(__APPLE__)) && !defined(DGUX)
#include <utmpx.h>
#define utmp utmpx
#else
@@ -5581,6 +5581,10 @@ cat >>conftest.$ac_ext <<_ACEOF
#ifdef __hpux
#define pututline _pututline
#endif
+#ifdef __APPLE__
+#define pututline pututxline
+#define getutent getutxent
+#endif
int
main ()
diff --git a/src/etc/etcscreenrc b/src/etc/etcscreenrc
index 3fc9c37..d2caeae 100644
--- a/src/etc/etcscreenrc
+++ b/src/etc/etcscreenrc
@@ -10,7 +10,7 @@
#defflow on # will force screen to process ^S/^Q
-deflogin on
+#deflogin on
#autodetach off
vbell on
@@ -88,7 +88,7 @@ bind ^\
#make them better
bind \\ quit
bind K kill
-bind I login on
-bind O login off
+#bind I login on
+#bind O login off
bind } history
diff --git a/src/pty.c b/src/pty.c
index f89d44c..38e9709 100644
--- a/src/pty.c
+++ b/src/pty.c
@@ -34,7 +34,7 @@
#endif
/* for solaris 2.1, Unixware (SVR4.2) and possibly others */
-#ifdef HAVE_SVR4_PTYS
+#if defined(HAVE_SVR4_PTYS) && !defined(__APPLE__)
# include <sys/stropts.h>
#endif
diff --git a/src/window.c b/src/window.c
index a244bd4..21bce82 100644
--- a/src/window.c
+++ b/src/window.c
@@ -25,6 +25,7 @@
#include <sys/stat.h>
#include <signal.h>
#include <fcntl.h>
+#include <unistd.h>
#ifndef sun
# include <sys/ioctl.h>
#endif
@@ -1419,6 +1420,38 @@ char **args, *ttyn;
return pid;
}
+#ifdef RUN_LOGIN
+/*
+ * All of the logic to maintain utmpx is now built into /usr/bin/login, so
+ * all we need to do is call it, and pass the shell command to it.
+ */
+extern char *LoginName;
+
+static int
+run_login(const char *path, char *const argv[], char *const envp[])
+{
+ const char *shargs[MAXARGS + 1 + 3];
+ const char **fp, **tp;
+
+ if (access(path, X_OK) < 0)
+ return -1;
+ shargs[0] = "login";
+ shargs[1] = (*argv[0] == '-') ? "-pfq" : "-pflq";
+ shargs[2] = LoginName;
+ shargs[3] = path;
+ fp = (const char **)argv + 1;
+ tp = shargs + 4;
+ /* argv has already been check for length */
+ while ((*tp++ = *fp++) != NULL) {}
+ /* shouldn't return unless there was an error */
+ return (execve("/usr/bin/login", (char *const*)shargs, envp));
+}
+
+/* replace the following occurrences of execve() with run_login() */
+#define execve run_login
+
+#endif /* RUN_LOGIN */
+
void
execvpe(prog, args, env)
char *prog, **args, **env;