From: Daniel Colascione <dancol@dancol.org>
To: emacs-devel@gnu.org
Subject: [PATCH 4/9] Fix emacsclient to work with cygw32
Date: Tue, 07 Aug 2012 01:19:27 -0700 [thread overview]
Message-ID: <64609704ad9d49225b9243ae78cf3bb0c5bc4dcd.1344326992.git.dancol@dancol.org> (raw)
In-Reply-To: <cover.1344326992.git.dancol@dancol.org>
---
lib-src/emacsclient.c | 71 +++++++++++++++++++++++++-----------------------
lisp/server.el | 10 +++++--
2 files changed, 44 insertions(+), 37 deletions(-)
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index 0ba6535..83e357c 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -43,6 +43,10 @@ char *w32_getenv (char *);
#else /* !WINDOWSNT */
+# ifdef HAVE_NTGUI
+# include <windows.h>
+# endif /* HAVE_NTGUI */
+
# include "syswait.h"
# ifdef HAVE_INET_SOCKETS
@@ -188,9 +192,7 @@ struct option longopts[] =
{ "socket-name", required_argument, NULL, 's' },
#endif
{ "server-file", required_argument, NULL, 'f' },
-#ifndef WINDOWSNT
{ "display", required_argument, NULL, 'd' },
-#endif
{ "parent-id", required_argument, NULL, 'p' },
{ 0, 0, 0, 0 }
};
@@ -406,32 +408,6 @@ w32_getenv (char *envvar)
return NULL;
}
-void
-w32_set_user_model_id (void)
-{
- HMODULE shell;
- HRESULT (WINAPI * set_user_model) (wchar_t * id);
-
- /* On Windows 7 and later, we need to set the user model ID
- to associate emacsclient launched files with Emacs frames
- in the UI. */
- shell = LoadLibrary ("shell32.dll");
- if (shell)
- {
- set_user_model
- = (void *) GetProcAddress (shell,
- "SetCurrentProcessExplicitAppUserModelID");
- /* If the function is defined, then we are running on Windows 7
- or newer, and the UI uses this to group related windows
- together. Since emacs, runemacs, emacsclient are related, we
- want them grouped even though the executables are different,
- so we need to set a consistent ID between them. */
- if (set_user_model)
- set_user_model (L"GNU.Emacs");
-
- FreeLibrary (shell);
- }
-}
int
w32_window_app (void)
@@ -1436,10 +1412,37 @@ set_socket (int no_exit_if_error)
exit (EXIT_FAILURE);
}
-#ifdef WINDOWSNT
+#ifdef HAVE_NTGUI
FARPROC set_fg; /* Pointer to AllowSetForegroundWindow. */
FARPROC get_wc; /* Pointer to RealGetWindowClassA. */
+void
+w32_set_user_model_id (void)
+{
+ HMODULE shell;
+ HRESULT (WINAPI * set_user_model) (wchar_t * id);
+
+ /* On Windows 7 and later, we need to set the user model ID
+ to associate emacsclient launched files with Emacs frames
+ in the UI. */
+ shell = LoadLibrary ("shell32.dll");
+ if (shell)
+ {
+ set_user_model
+ = (void *) GetProcAddress (shell,
+ "SetCurrentProcessExplicitAppUserModelID");
+ /* If the function is defined, then we are running on Windows 7
+ or newer, and the UI uses this to group related windows
+ together. Since emacs, runemacs, emacsclient are related, we
+ want them grouped even though the executables are different,
+ so we need to set a consistent ID between them. */
+ if (set_user_model)
+ set_user_model (L"GNU.Emacs");
+
+ FreeLibrary (shell);
+ }
+}
+
BOOL CALLBACK
w32_find_emacs_process (HWND hWnd, LPARAM lParam)
{
@@ -1488,7 +1491,7 @@ w32_give_focus (void)
&& (get_wc = GetProcAddress (user32, "RealGetWindowClassA")))
EnumWindows (w32_find_emacs_process, (LPARAM) 0);
}
-#endif
+#endif /* HAVE_NTGUI */
/* Start the emacs daemon and try to connect to it. */
@@ -1558,11 +1561,11 @@ main (int argc, char **argv)
main_argv = argv;
progname = argv[0];
-#ifdef WINDOWSNT
+#ifdef HAVE_NTGUI
/* On Windows 7 and later, we need to explicitly associate emacsclient
with emacs so the UI behaves sensibly. */
w32_set_user_model_id ();
-#endif
+#endif /* HAVE_NTGUI */
/* Process options. */
decode_options (argc, argv);
@@ -1598,9 +1601,9 @@ main (int argc, char **argv)
fail ();
}
-#ifdef WINDOWSNT
+#ifdef HAVE_NTGUI
w32_give_focus ();
-#endif
+#endif /* HAVE_NTGUI */
/* Send over our environment and current directory. */
if (!current_frame)
diff --git a/lisp/server.el b/lisp/server.el
index a25da40..0ef76dc 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -1115,9 +1115,13 @@ The following commands are accepted by the client:
tty-type (pop args-left)
dontkill (or dontkill
(not use-current-frame)))
- ;; On Windows, emacsclient always asks for a tty frame.
- ;; If running a GUI server, force the frame type to GUI.
- (when (eq window-system 'w32)
+ ;; On Windows, emacsclient always asks for a tty
+ ;; frame. If running a GUI server, force the frame
+ ;; type to GUI. (Cygwin is perfectly happy with
+ ;; multi-tty support, so don't override the user's
+ ;; choice there.)
+ (when (and (eq system-type 'windows-nt)
+ (eq window-system 'w32))
(push "-window-system" args-left)))
;; -position LINE[:COLUMN]: Set point to the given
--
1.7.2.5
next prev parent reply other threads:[~2012-08-07 8:19 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-07 8:19 [PATCH 0/9] Support Win32 GUI in Cygwin Emacs Daniel Colascione
2012-08-07 8:19 ` [PATCH 7/9] Add alt_display to emacsclient for w32, ns Daniel Colascione
2012-08-07 15:22 ` Stefan Monnier
2012-08-07 8:19 ` [PATCH 9/9] Detect window-system from display name Daniel Colascione
2012-08-07 15:50 ` Stefan Monnier
2012-08-07 17:09 ` Daniel Colascione
2012-08-07 20:01 ` Stefan Monnier
2012-08-07 20:19 ` Daniel Colascione
2012-08-07 22:52 ` Lennart Borgman
2012-08-07 22:54 ` Daniel Colascione
2012-08-07 23:02 ` Lennart Borgman
2012-08-07 18:18 ` Eli Zaretskii
2012-08-07 20:28 ` Daniel Colascione
2012-08-08 16:50 ` Eli Zaretskii
2012-08-07 8:19 ` [PATCH 6/9] Rename `w32' local to `nt' for clarity Daniel Colascione
2012-08-07 10:49 ` Lennart Borgman
2012-08-07 15:45 ` Stefan Monnier
2012-08-07 16:31 ` Eli Zaretskii
2012-08-07 16:40 ` Drew Adams
2012-08-07 17:07 ` Daniel Colascione
2012-08-07 20:00 ` Stefan Monnier
2012-08-08 2:50 ` Eli Zaretskii
2012-08-07 8:19 ` [PATCH 2/9] Refactor window-system configuration Daniel Colascione
2012-08-07 17:20 ` Eli Zaretskii
2012-08-07 17:31 ` Daniel Colascione
2012-08-07 20:47 ` Stefan Monnier
2012-08-07 8:19 ` [PATCH 5/9] Prevent crash if w32 used before it's initialized Daniel Colascione
2012-08-07 17:23 ` Eli Zaretskii
2012-08-07 17:28 ` Daniel Colascione
2012-08-07 18:11 ` Eli Zaretskii
2012-08-07 8:19 ` [PATCH 8/9] Generalize fork+exec logic, add DAEMON_MUST_EXEC Daniel Colascione
2012-08-07 8:19 ` Daniel Colascione [this message]
2012-08-07 18:14 ` [PATCH 4/9] Fix emacsclient to work with cygw32 Eli Zaretskii
2012-08-07 20:16 ` Daniel Colascione
2012-08-08 2:55 ` Eli Zaretskii
2012-08-07 8:19 ` [PATCH 3/9] Implement cygw32 Daniel Colascione
2012-08-07 15:40 ` Stefan Monnier
2012-08-07 18:02 ` Eli Zaretskii
2012-08-07 20:11 ` Daniel Colascione
2012-08-08 17:15 ` Eli Zaretskii
2012-08-07 8:19 ` [PATCH 1/9] Under Remote Desktop, NUMCOLORS is unreliable; workaround Daniel Colascione
2012-08-07 17:07 ` Eli Zaretskii
2012-08-07 17:22 ` [PATCH 0/9] Support Win32 GUI in Cygwin Emacs Eli Zaretskii
2012-08-07 17:29 ` Daniel Colascione
2012-08-07 18:10 ` Eli Zaretskii
2012-08-07 19:18 ` Eli Zaretskii
2012-08-07 20:15 ` Daniel Colascione
2012-08-07 20:24 ` Juanma Barranquero
2012-08-08 2:53 ` Eli Zaretskii
2012-08-08 2:33 ` Daniel Colascione
2012-08-08 3:03 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=64609704ad9d49225b9243ae78cf3bb0c5bc4dcd.1344326992.git.dancol@dancol.org \
--to=dancol@dancol.org \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.