* mac.c (sys_select) [MAC_OSX]: New function.
* macterm.c (MakeMeTheFrontProcess): New function.
(mac_initialize): Call MakeMeTheFrontProcess.
* s/darwin.h: Define select to sys_select.
+2002-08-10 Andrew Choi <akochoi@shaw.ca>
+
+ * mac.c (sys_select) [MAC_OSX]: New function.
+
+ * macterm.c (MakeMeTheFrontProcess): New function.
+ (mac_initialize): Call MakeMeTheFrontProcess.
+
+ * s/darwin.h: Define select to sys_select.
+
2002-08-09 Richard M. Stallman <rms@gnu.org>
* keyboard.c (make_lispy_event): Test WINDOWSNT, not WINDOWS_NT.
return Qnil;
}
+#ifdef MAC_OSX
+#undef select
+
+extern int inhibit_window_system;
+
+/* When Emacs is started from the Finder, SELECT always immediately
+ returns as if input is present when file descriptor 0 is polled for
+ input. Strangely, when Emacs is run as a GUI application from the
+ command line, it blocks in the same situation. This `wrapper' of
+ the system call SELECT corrects this discrepancy. */
+int
+sys_select (n, rfds, wfds, efds, timeout)
+ int n;
+ SELECT_TYPE *rfds;
+ SELECT_TYPE *wfds;
+ SELECT_TYPE *efds;
+ struct timeval *timeout;
+{
+ if (!inhibit_window_system && rfds && FD_ISSET (0, rfds))
+ return 1;
+ else
+ return select (n, rfds, wfds, efds, timeout);
+}
+#endif /* MAC_OSX */
void
syms_of_mac ()
extern Lisp_Object x_icon_type P_ ((struct frame *));
+extern int inhibit_window_system;
#if __MRC__
QDGlobals qd; /* QuickDraw global information structure. */
return dpyinfo;
}
\f
+#ifdef MAC_OSX
+void MakeMeTheFrontProcess ()
+{
+ ProcessSerialNumber psn;
+ OSErr err;
+
+ err = GetCurrentProcess (&psn);
+ if (err == noErr)
+ (void) SetFrontProcess (&psn);
+}
+#endif /* MAC_OSX */
+
/* Set up use of X before we make the first connection. */
static struct redisplay_interface x_redisplay_interface =
#endif
DisableMenuCommand (NULL, kHICommandQuit);
+
+ if (!inhibit_window_system)
+ MakeMeTheFrontProcess ();
#endif
}
#define realloc unexec_realloc
#define free unexec_free
#endif
+
+/* Reroute calls to SELECT to the version defined in mac.c to fix the
+ problem of Emacs requiring an extra return to be typed to start
+ working when started from the command line. */
+#if defined (emacs) || defined (temacs)
+#define select sys_select
+#endif