Merged from emacs@sv.gnu.org.
Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-536 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-537 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-538 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-539 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-540 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-541 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-542 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-543 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-544 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-545 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-546 Update from erc--emacs--22 * emacs@sv.gnu.org/emacs--devo--0--patch-547 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-548 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-549 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-550 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-551 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-552 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-553 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-554 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-555 erc-iswitchb: Temporarily enable iswitchb mode * emacs@sv.gnu.org/emacs--devo--0--patch-556 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-557 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-558 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-559 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-560 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-561 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-562 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-563 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-564 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-565 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-566 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-567 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-568 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-569 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-570 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-571 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-572 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-573 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-574 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-575 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-576 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-577 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-578 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-579 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-580 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-581 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-582 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-583 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-584 Fix admin/quick-install-emacs to work with recent versions of autoconf * emacs@sv.gnu.org/gnus--rel--5.10--patch-171 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-172 Merge from emacs--devo--0 * emacs@sv.gnu.org/gnus--rel--5.10--patch-173 Merge from emacs--devo--0 * emacs@sv.gnu.org/gnus--rel--5.10--patch-174 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-175 Update from CVS: lisp/legacy-gnus-agent.el: Add Copyright notice. * emacs@sv.gnu.org/gnus--rel--5.10--patch-176 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-177 Merge from emacs--devo--0 * emacs@sv.gnu.org/gnus--rel--5.10--patch-178 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-179 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-180 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-181 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-182 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-183 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-184 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-185 Merge from emacs--devo--0 git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-590
This commit is contained in:
commit
65e86587ab
740 changed files with 8177 additions and 4924 deletions
|
@ -301,16 +301,15 @@ get_current_dir_name ()
|
|||
/* Message functions. */
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
/* I first tried to check for STDOUT. The check did not work,
|
||||
I get a valid handle also in nonconsole apps.
|
||||
Instead I test for console title, which seems to work. */
|
||||
int
|
||||
w32_window_app()
|
||||
w32_window_app ()
|
||||
{
|
||||
static int window_app = -1;
|
||||
char szTitle[MAX_PATH];
|
||||
|
||||
if (window_app < 0)
|
||||
/* Checking for STDOUT does not work; it's a valid handle also in
|
||||
nonconsole apps. Testing for the console title seems to work. */
|
||||
window_app = (GetConsoleTitleA (szTitle, MAX_PATH) == 0);
|
||||
|
||||
return window_app;
|
||||
|
@ -488,9 +487,7 @@ fail (void)
|
|||
if (alternate_editor)
|
||||
{
|
||||
int i = optind - 1;
|
||||
#ifdef WINDOWSNT
|
||||
main_argv[i] = (char *)alternate_editor;
|
||||
#endif
|
||||
|
||||
execvp (alternate_editor, main_argv + i);
|
||||
message (TRUE, "%s: error executing alternate editor \"%s\"\n",
|
||||
progname, alternate_editor);
|
||||
|
@ -683,7 +680,7 @@ file_name_absolute_p (filename)
|
|||
}
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
/* Wrapper to make WSACleanup a cdecl, as required by atexit(). */
|
||||
/* Wrapper to make WSACleanup a cdecl, as required by atexit. */
|
||||
void
|
||||
__cdecl close_winsock ()
|
||||
{
|
||||
|
@ -707,10 +704,47 @@ initialize_sockets ()
|
|||
#endif /* WINDOWSNT */
|
||||
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
|
||||
/*
|
||||
execvp wrapper for Windows. Quotes arguments with embedded spaces.
|
||||
|
||||
This is necessary due to the broken implementation of exec* routines in
|
||||
the Microsoft libraries: they concatenate the arguments together without
|
||||
quoting special characters, and pass the result to CreateProcess, with
|
||||
predictably bad results. By contrast, Posix execvp passes the arguments
|
||||
directly into the argv array of the child process.
|
||||
*/
|
||||
int
|
||||
w32_execvp (path, argv)
|
||||
char *path;
|
||||
char **argv;
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Required to allow a .BAT script as alternate editor. */
|
||||
argv[0] = (char *) alternate_editor;
|
||||
|
||||
for (i = 0; argv[i]; i++)
|
||||
if (strchr (argv[i], ' '))
|
||||
{
|
||||
char *quoted = alloca (strlen (argv[i]) + 3);
|
||||
sprintf (quoted, "\"%s\"", argv[i]);
|
||||
argv[i] = quoted;
|
||||
}
|
||||
|
||||
return execvp (path, argv);
|
||||
}
|
||||
|
||||
#undef execvp
|
||||
#define execvp w32_execvp
|
||||
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
/*
|
||||
* Read the information needed to set up a TCP comm channel with
|
||||
* the Emacs server: host, port, pid and authentication string.
|
||||
*/
|
||||
*/
|
||||
int
|
||||
get_server_config (server, authentication)
|
||||
struct sockaddr_in *server;
|
||||
|
@ -1145,6 +1179,62 @@ set_socket ()
|
|||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
FARPROC set_fg; /* Pointer to AllowSetForegroundWindow. */
|
||||
FARPROC get_wc; /* Pointer to RealGetWindowClassA. */
|
||||
|
||||
BOOL CALLBACK
|
||||
w32_find_emacs_process (hWnd, lParam)
|
||||
HWND hWnd;
|
||||
LPARAM lParam;
|
||||
{
|
||||
DWORD pid;
|
||||
char class[6];
|
||||
|
||||
/* Reject any window not of class "Emacs". */
|
||||
if (! get_wc (hWnd, class, sizeof (class))
|
||||
|| strcmp (class, "Emacs"))
|
||||
return TRUE;
|
||||
|
||||
/* We only need the process id, not the thread id. */
|
||||
(void) GetWindowThreadProcessId (hWnd, &pid);
|
||||
|
||||
/* Not the one we're looking for. */
|
||||
if (pid != (DWORD) emacs_pid) return TRUE;
|
||||
|
||||
/* OK, let's raise it. */
|
||||
set_fg (emacs_pid);
|
||||
|
||||
/* Stop enumeration. */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Search for a window of class "Emacs" and owned by a process with
|
||||
* process id = emacs_pid. If found, allow it to grab the focus.
|
||||
*/
|
||||
void
|
||||
w32_give_focus ()
|
||||
{
|
||||
HMODULE hUser32;
|
||||
|
||||
/* It should'nt happen when dealing with TCP sockets. */
|
||||
if (!emacs_pid) return;
|
||||
|
||||
if (!(hUser32 = LoadLibrary ("user32.dll"))) return;
|
||||
|
||||
/* Modern Windows restrict which processes can set the foreground window.
|
||||
emacsclient can allow Emacs to grab the focus by calling the function
|
||||
AllowSetForegroundWindow. Unfortunately, older Windows (W95, W98 and
|
||||
NT) lack this function, so we have to check its availability. */
|
||||
if ((set_fg = GetProcAddress (hUser32, "AllowSetForegroundWindow"))
|
||||
&& (get_wc = GetProcAddress (hUser32, "RealGetWindowClassA")))
|
||||
EnumWindows (w32_find_emacs_process, (LPARAM) 0);
|
||||
|
||||
FreeLibrary (hUser32);
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
main (argc, argv)
|
||||
int argc;
|
||||
|
@ -1184,24 +1274,7 @@ main (argc, argv)
|
|||
}
|
||||
|
||||
#ifdef WINDOWSNT
|
||||
/*
|
||||
Modern Windows restrict which processes can set the foreground window.
|
||||
emacsclient can allow Emacs to grab the focus by calling the function
|
||||
AllowSetForegroundWindow(). Unfortunately, older Windows (W95, W98
|
||||
and NT) lack this function, so we have to check its availability.
|
||||
*/
|
||||
if (emacs_pid)
|
||||
{
|
||||
HMODULE hUser32;
|
||||
|
||||
if (hUser32 = LoadLibrary ("user32.dll"))
|
||||
{
|
||||
FARPROC set_fg;
|
||||
if (set_fg = GetProcAddress (hUser32, "AllowSetForegroundWindow"))
|
||||
set_fg (emacs_pid);
|
||||
FreeLibrary (hUser32);
|
||||
}
|
||||
}
|
||||
w32_give_focus ();
|
||||
#endif
|
||||
|
||||
/* First of all, send our version number for verification. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue