diff -ru screen-3.9.15/Makefile.in screen-3.9.15-rzm/Makefile.in --- screen-3.9.15/Makefile.in 2003-03-13 12:19:53.000000000 +0100 +++ screen-3.9.15-rzm/Makefile.in 2003-03-21 21:33:39.000000000 +0100 @@ -76,7 +76,10 @@ $(INSTALL_PROGRAM) screen $(DESTDIR)$(bindir)/$(SCREEN) -chown root $(DESTDIR)$(bindir)/$(SCREEN) && chmod 4755 $(DESTDIR)$(bindir)/$(SCREEN) # This doesn't work if $(bindir)/screen is a symlink - -if [ -f $(DESTDIR)$(bindir)/screen ] && [ ! -f $(DESTDIR)$(bindir)/screen.old ]; then mv $(DESTDIR)$(bindir)/screen $(DESTDIR)$(bindir)/screen.old; fi +# if we do not have the same version with .old + -if [ ! -f $(DESTDIR)/$(SCREEN).old ]; then if [ -f $(DESTDIR)$(bindir)/screen ] && [ ! -f $(DESTDIR)$(bindir)/screen.old ]; then mv $(DESTDIR)$(bindir)/screen $(DESTDIR)$(bindir)/screen.old; fi; fi +# if we already have the same version with .old + -if [ -f $(DESTDIR)/$(SCREEN).old ]; then if [ -f $(DESTDIR)$(bindir)/screen.old ]; then cd $(DESTDIR)$(bindir); rm screen.old; ln -s $(SCREEN).old screen.old; fi rm -f $(DESTDIR)$(bindir)/screen (cd $(DESTDIR)$(bindir) && ln -sf $(SCREEN) screen) cp $(srcdir)/utf8encodings/?? $(DESTDIR)$(SCREENENCODINGS) diff -ru screen-3.9.15/ansi.h screen-3.9.15-rzm/ansi.h --- screen-3.9.15/ansi.h 2003-02-24 17:55:08.000000000 +0100 +++ screen-3.9.15-rzm/ansi.h 2003-03-21 21:33:35.000000000 +0100 @@ -108,11 +108,8 @@ #define ASCII 0 -#ifdef TOPSTAT -#define STATLINE (0) -#else -#define STATLINE (D_height-1) -#endif +#define STATLINE() (statuspos.row == STATUS_BOTTOM ? D_height-1 : 0) +#define STATCOL(width, len) (statuspos.col == STATUS_LEFT ? 0 : D_width - D_status_len - 2) #ifdef ENCODINGS diff -ru screen-3.9.15/comm.c screen-3.9.15-rzm/comm.c --- screen-3.9.15/comm.c 2003-02-21 21:08:11.000000000 +0100 +++ screen-3.9.15-rzm/comm.c 2003-03-21 21:33:47.000000000 +0100 @@ -277,10 +277,12 @@ { "silencewait", ARGS_1 }, { "sleep", ARGS_1 }, { "slowpaste", NEED_FORE|ARGS_01 }, + { "sockdir", ARGS_1 }, { "sorendition", ARGS_012 }, { "source", ARGS_1 }, { "split", NEED_DISPLAY|ARGS_0 }, { "startup_message", ARGS_1 }, + { "status", ARGS_12 }, { "stuff", NEED_LAYER|ARGS_12 }, #ifdef MULTIUSER { "su", NEED_DISPLAY|ARGS_012 }, Only in screen-3.9.15-rzm: config.h diff -ru screen-3.9.15/config.h.in screen-3.9.15-rzm/config.h.in --- screen-3.9.15/config.h.in 2003-03-13 12:19:53.000000000 +0100 +++ screen-3.9.15-rzm/config.h.in 2003-03-21 21:33:47.000000000 +0100 @@ -52,11 +52,6 @@ #undef SOCKDIR /* - * Define this if the SOCKDIR is not shared between hosts. - */ -#define SOCKDIR_IS_LOCAL_TO_HOST - -/* * Screen sources two startup files. First a global file with a path * specified here, second your local $HOME/.screenrc * Don't define this, if you don't want it. @@ -117,12 +112,6 @@ #undef LOCKPTY /* - * If you'd rather see the status line on the first line of your - * terminal rather than the last, define TOPSTAT. - */ -#undef TOPSTAT - -/* * define DETACH can detach a session. An absolute 'must'. */ #define DETACH Only in screen-3.9.15-rzm: config.log Only in screen-3.9.15-rzm: config.status diff -ru screen-3.9.15/display.c screen-3.9.15-rzm/display.c --- screen-3.9.15/display.c 2003-02-24 12:53:35.000000000 +0100 +++ screen-3.9.15-rzm/display.c 2003-03-21 21:33:35.000000000 +0100 @@ -100,6 +100,7 @@ #endif int captionalways; int hardstatusemu = HSTATUS_IGNORE; +struct statusposstr statuspos = { STATUS_BOTTOM, STATUS_LEFT }; /* * Default layer management @@ -2209,8 +2210,8 @@ if (!use_hardstatus || D_has_hstatus == HSTATUS_IGNORE || D_has_hstatus == HSTATUS_MESSAGE) { D_status = STATUS_ON_WIN; - debug1("using STATLINE %d\n", STATLINE); - GotoPos(0, STATLINE); + debug2("using STATLINE/COL %d,%d\n", STATLINE(), STATCOL(D_width, D_status_len) ); + GotoPos(STATCOL(D_width, D_status_len), STATLINE()); SetRendition(&mchar_so); InsertMode(0); AddStr(msg); @@ -2246,8 +2247,8 @@ ASSERT(D_obuffree == D_obuflen); /* this is copied over from RemoveStatus() */ D_status = 0; - GotoPos(0, STATLINE); - RefreshLine(STATLINE, 0, D_status_len - 1, 0); + GotoPos(STATCOL(D_width, D_status_len), STATLINE()); + RefreshLine(STATLINE(), STATCOL(D_width, D_status_len), STATCOL(D_width, D_status_len) + D_status_len - 1, 0); GotoPos(D_status_lastx, D_status_lasty); flayer = D_forecv ? D_forecv->c_layer : 0; if (flayer) @@ -2297,8 +2298,8 @@ oldflayer = flayer; if (where == STATUS_ON_WIN) { - GotoPos(0, STATLINE); - RefreshLine(STATLINE, 0, D_status_len - 1, 0); + GotoPos(STATCOL(D_width, D_status_len), STATLINE()); + RefreshLine(STATLINE(), STATCOL(D_width, D_status_len), STATCOL(D_width, D_status_len) + D_status_len - 1, 0); GotoPos(D_status_lastx, D_status_lasty); } else @@ -2317,7 +2318,7 @@ { int l, i, ox, oy, max; - if (D_status == STATUS_ON_WIN && D_has_hstatus == HSTATUS_LASTLINE && STATLINE == D_height-1) + if (D_status == STATUS_ON_WIN && D_has_hstatus == HSTATUS_LASTLINE && STATLINE() == D_height-1) return; /* sorry, in use */ if (D_HS && D_has_hstatus == HSTATUS_HS) @@ -2449,7 +2450,7 @@ debug2("RefreshLine %d %d", y, from); debug2(" %d %d\n", to, isblank); - if (D_status == STATUS_ON_WIN && y == STATLINE) + if (D_status == STATUS_ON_WIN && y == STATLINE()) return; /* can't refresh status */ if (isblank == 0 && D_CE && to == D_width - 1 && from < to) diff -ru screen-3.9.15/display.h screen-3.9.15-rzm/display.h --- screen-3.9.15/display.h 2002-02-11 12:46:46.000000000 +0100 +++ screen-3.9.15-rzm/display.h 2003-03-21 21:33:35.000000000 +0100 @@ -325,3 +325,13 @@ #define HSTATUS_MESSAGE 2 #define HSTATUS_HS 3 #define HSTATUS_ALWAYS (1<<2) + +struct statusposstr +{ + int row, col; +}; + +#define STATUS_TOP 1 +#define STATUS_BOTTOM 0 +#define STATUS_LEFT 0 +#define STATUS_RIGHT 1 Only in screen-3.9.15-rzm/doc: Makefile diff -ru screen-3.9.15/etc/screenrc screen-3.9.15-rzm/etc/screenrc --- screen-3.9.15/etc/screenrc 2003-03-13 12:19:54.000000000 +0100 +++ screen-3.9.15-rzm/etc/screenrc 2003-03-21 21:36:17.000000000 +0100 @@ -32,6 +32,12 @@ defscrollback 1000 +# more convenient status messages location +# status top right + +# in shared mode screen will not wipe out sockets of another hosts sharing the same socket directory +# sockdir shared + # don't kill window after the process died # zombie "^[" diff -ru screen-3.9.15/extern.h screen-3.9.15-rzm/extern.h --- screen-3.9.15/extern.h 2003-02-24 18:01:17.000000000 +0100 +++ screen-3.9.15-rzm/extern.h 2003-03-21 21:33:47.000000000 +0100 @@ -324,6 +324,7 @@ extern void ReceiveMsg __P((void)); extern void SendCreateMsg __P((char *, struct NewWindow *)); extern int SendErrorMsg __P((char *, char *)); +extern int sockdir; /* misc.c */ extern char *SaveStr __P((const char *)); diff -ru screen-3.9.15/process.c screen-3.9.15-rzm/process.c --- screen-3.9.15/process.c 2003-02-24 18:09:37.000000000 +0100 +++ screen-3.9.15-rzm/process.c 2003-03-21 21:33:47.000000000 +0100 @@ -63,6 +63,7 @@ extern int TtyMode, auto_detach, use_altscreen; extern int iflag, maxwin; extern int use_hardstatus, visual_bell; +extern struct statusposstr statuspos; #ifdef COLOR extern int attr2color[][4]; extern int nattr2color; @@ -2525,6 +2526,67 @@ if (msgok) Msg(0, "messages displayed on %s", use_hardstatus ? "hardstatus line" : "window"); break; + case RC_STATUS: + if (display) + { + Msg(0, "%s", ""); /* wait till mintime (keep gcc quiet) */ + RemoveStatus(); + } + { + int i = 0; + while ( (i <= 1) && args[i]) { + if ( (strcmp(args[i], "top") == 0) || (strcmp(args[i], "up") == 0) ) + { + statuspos.row = STATUS_TOP; + } + else + { + if ( (strcmp(args[i], "bottom") == 0) || (strcmp(args[i], "down") == 0) ) + { + statuspos.row = STATUS_BOTTOM; + } + else + { + if (strcmp(args[i], "left") == 0) + { + statuspos.col = STATUS_LEFT; + } + else + { + if (strcmp(args[i], "right") == 0) + { + statuspos.col = STATUS_RIGHT; + } + else + { + Msg(0, "%s: usage: status [top|up|down|bottom] [left|right]", rc_name); + break; + } + } + } + } + i++; + } + } + break; + case RC_SOCKDIR: + if ( args[0] && (strcmp(args[0], "local") == 0) ) + { + sockdir = SOCKDIR_LOCAL; + } + else + { + if ( args[0] && (strcmp(args[0], "shared") == 0) ) + { + sockdir = SOCKDIR_SHARED; + } + else + { + Msg(0, "%s: usage: sockdir local|shared", rc_name); + break; + } + } + break; case RC_CAPTION: if (strcmp(args[0], "always") == 0 || strcmp(args[0], "splitonly") == 0) { diff -ru screen-3.9.15/screen.h screen-3.9.15-rzm/screen.h --- screen-3.9.15/screen.h 2002-03-28 19:00:58.000000000 +0100 +++ screen-3.9.15-rzm/screen.h 2003-03-21 21:33:47.000000000 +0100 @@ -287,3 +287,8 @@ int bps; /* bits per seconds */ int sym; /* symbol defined in ttydev.h */ }; + + +/* sockdir values */ +#define SOCKDIR_LOCAL 0 /* single host, default */ +#define SOCKDIR_SHARED 1 /* many hosts use the socket directory, e.g. via NFS */ diff -ru screen-3.9.15/socket.c screen-3.9.15-rzm/socket.c --- screen-3.9.15/socket.c 2003-02-24 18:08:34.000000000 +0100 +++ screen-3.9.15-rzm/socket.c 2003-03-21 21:33:47.000000000 +0100 @@ -57,6 +57,7 @@ #endif static void FinishAttach __P((struct msg *)); static void AskPassword __P((struct msg *)); +int sockdir = SOCKDIR_LOCAL; extern char *RcFileName, *extra_incap, *extra_outcap; .