diff -urbB emacs21-21.4a/src/emacs.c emacs21-21.4a.displaylenience/src/emacs.c --- emacs21-21.4a/src/emacs.c 2002-08-29 20:27:07.000000000 +0100 +++ emacs21-21.4a.displaylenience/src/emacs.c 2006-03-06 00:05:23.000000000 +0000 @@ -45,6 +45,10 @@ #include "intervals.h" #include "buffer.h" +#ifdef HAVE_X_WINDOWS +#include "xterm.h" +#endif + #include "systty.h" #include "blockinput.h" #include "syssignal.h" @@ -1268,6 +1272,14 @@ /* Don't actually discard this arg. */ skip_args = count_before; + + /* Do NOT be lenient if the user explicitly asked for a named display */ + if( display_arg != 1 ) + if( x_display_ok(displayname) == 0 ) { + inhibit_window_system = 1; + fprintf( stderr, + "DISPLAY unavailable, simulating -nw\n", displayname ); + } } #endif diff -urbB emacs21-21.4a/src/xterm.c emacs21-21.4a.displaylenience/src/xterm.c --- emacs21-21.4a/src/xterm.c 2002-10-15 15:21:45.000000000 +0100 +++ emacs21-21.4a.displaylenience/src/xterm.c 2006-03-06 00:07:40.000000000 +0000 @@ -14156,6 +14156,24 @@ } #endif +int +x_display_ok (display) + const char * display; +{ + int dpy_ok = 1; + Display *dpy; + char *display_name = display || getenv("DISPLAY"); + + if( !display_name ) + return 0; + + if( dpy = XOpenDisplay (display) ) + XCloseDisplay( dpy ); + else + dpy_ok = 0; + return dpy_ok; +} + struct x_display_info * x_term_init (display_name, xrm_option, resource_name) Lisp_Object display_name; diff -urbB emacs21-21.4a/src/xterm.h emacs21-21.4a.displaylenience/src/xterm.h --- emacs21-21.4a/src/xterm.h 2002-02-22 10:41:44.000000000 +0000 +++ emacs21-21.4a.displaylenience/src/xterm.h 2006-03-06 00:07:40.000000000 +0000 @@ -378,6 +378,7 @@ extern struct x_display_info *x_display_info_for_name P_ ((Lisp_Object)); extern struct x_display_info *x_term_init P_ ((Lisp_Object, char *, char *)); +extern int x_display_ok P_ ((const char *)); extern Lisp_Object x_list_fonts P_ ((struct frame *, Lisp_Object, int, int)); extern void select_visual P_ ((struct x_display_info *));