Mercurial > emacs
changeset 73806:fbfa7d8c0a64
(get_server_config): Extract also the Emacs pid from the server file.
On Windows, try to force the Emacs frame to the foreground.
author | Juanma Barranquero <lekktu@gmail.com> |
---|---|
date | Tue, 07 Nov 2006 10:43:45 +0000 |
parents | 6bca57b7534e |
children | e02dbec6d19c |
files | lib-src/emacsclient.c |
diffstat | 1 files changed, 29 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/lib-src/emacsclient.c Tue Nov 07 10:42:52 2006 +0000 +++ b/lib-src/emacsclient.c Tue Nov 07 10:43:45 2006 +0000 @@ -432,7 +432,7 @@ /* * Read the information needed to set up a TCP comm channel with - * the Emacs server: host, port and authentication string. + * the Emacs server: host, port, pid and authentication string. */ int get_server_config (server, authentication) @@ -441,6 +441,7 @@ { char dotted[32]; char *port; + char *pid; FILE *config = NULL; if (file_name_absolute_p (server_file)) @@ -464,9 +465,11 @@ return FALSE; if (fgets (dotted, sizeof dotted, config) - && (port = strchr (dotted, ':'))) + && (port = strchr (dotted, ':')) + && (pid = strchr (port, ' '))) { *port++ = '\0'; + *pid++ = '\0'; } else { @@ -486,6 +489,30 @@ fclose (config); +#ifdef WINDOWSNT + /* + Modern Windows restrict which processes can set the foreground window. + So, for emacsclient to be able to force Emacs into the foreground, we + have to call AllowSetForegroundWindow(). Unfortunately, older Windows + (W95, W98 and NT) don't have this function, so we have to check first. + + We're doing this here because it has to be done before sending info + to Emacs, and otherwise we'll need a global variable just to pass around + the pid, which is also inelegant. + */ + { + HMODULE hUser32; + + if (hUser32 = LoadLibrary ("user32.dll")) + { + void (*set_fg)(DWORD); + if (set_fg = GetProcAddress (hUser32, "AllowSetForegroundWindow")) + set_fg (atoi (pid)); + FreeLibrary (hUser32); + } + } +#endif + return TRUE; }