annotate lib-src/emacsclient.c @ 99492:ee792794d888

(isearch-search-fun): Compare the length of the current search string with the length of the string from the previous search state to detect the situation when the user adds or removes characters in the search string. Use word-search-forward-lax and word-search-backward-lax in this case, and otherwise word-search-forward and word-search-backward.
author Juri Linkov <juri@jurta.org>
date Tue, 11 Nov 2008 19:43:09 +0000
parents e6ec0b2ebf47
children 61db5ca5de78
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 478
diff changeset
1 /* Client process that communicates with GNU Emacs acting as server.
64769
6358e3c6075c Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64083
diff changeset
2 Copyright (C) 1986, 1987, 1994, 1999, 2000, 2001, 2002, 2003, 2004,
79748
5714ff101fd9 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 79232
diff changeset
3 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 This file is part of GNU Emacs.
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
7 GNU Emacs is free software: you can redistribute it and/or modify
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
10 (at your option) any later version.
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 GNU General Public License for more details.
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92159
diff changeset
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
21 #ifdef HAVE_CONFIG_H
42412
83c1951257f1 Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 42176
diff changeset
22 #include <config.h>
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
23 #endif
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
24
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
25 #ifdef WINDOWSNT
73585
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
26
73973
a36e68eb4ae8 [WINDOWSNT]: Undef _WINSOCKAPI_ and _WINSOCK_H.
Juanma Barranquero <lekktu@gmail.com>
parents: 73896
diff changeset
27 /* config.h defines these, which disables sockets altogether! */
a36e68eb4ae8 [WINDOWSNT]: Undef _WINSOCKAPI_ and _WINSOCK_H.
Juanma Barranquero <lekktu@gmail.com>
parents: 73896
diff changeset
28 # undef _WINSOCKAPI_
a36e68eb4ae8 [WINDOWSNT]: Undef _WINSOCKAPI_ and _WINSOCK_H.
Juanma Barranquero <lekktu@gmail.com>
parents: 73896
diff changeset
29 # undef _WINSOCK_H
a36e68eb4ae8 [WINDOWSNT]: Undef _WINSOCKAPI_ and _WINSOCK_H.
Juanma Barranquero <lekktu@gmail.com>
parents: 73896
diff changeset
30
73585
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
31 # include <malloc.h>
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
32 # include <stdlib.h>
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
33 # include <windows.h>
78904
5025525d6c9d (w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents: 78257
diff changeset
34 # include <commctrl.h>
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
35
73585
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
36 # define NO_SOCKETS_IN_FILE_SYSTEM
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
37
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
38 # define HSOCKET SOCKET
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
39 # define CLOSE_SOCKET closesocket
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
40 # define INITIALIZE() (initialize_sockets ())
73585
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
41
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
42 #else /* !WINDOWSNT */
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
43
73896
09dabd95380c [!WINDOWSNT]: Include <sys/types.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73816
diff changeset
44 # include <sys/types.h>
09dabd95380c [!WINDOWSNT]: Include <sys/types.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73816
diff changeset
45
73617
7af864af10b6 [WINDOWSNT]: Define HAVE_INET_SOCKETS.
Juanma Barranquero <lekktu@gmail.com>
parents: 73601
diff changeset
46 # ifdef HAVE_INET_SOCKETS
7af864af10b6 [WINDOWSNT]: Define HAVE_INET_SOCKETS.
Juanma Barranquero <lekktu@gmail.com>
parents: 73601
diff changeset
47 # include <netinet/in.h>
7af864af10b6 [WINDOWSNT]: Define HAVE_INET_SOCKETS.
Juanma Barranquero <lekktu@gmail.com>
parents: 73601
diff changeset
48 # endif
73585
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
49
73578
e193b6a3f379 Fixes to emacsclient.c for GNU/Linux.
Juanma Barranquero <lekktu@gmail.com>
parents: 73562
diff changeset
50 # define INVALID_SOCKET -1
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
51 # define HSOCKET int
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
52 # define CLOSE_SOCKET close
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
53 # define INITIALIZE()
73585
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
54
7d264c036b25 [WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73583
diff changeset
55 #endif /* !WINDOWSNT */
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
56
3595
e10f7473d2e3 * emacsserver.c (main): When we're passing a `struct sockaddr_un'
Jim Blandy <jimb@redhat.com>
parents: 1031
diff changeset
57 #undef signal
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
59 #include <stdarg.h>
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
60 #include <ctype.h>
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
61 #include <stdio.h>
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
62 #include "getopt.h"
21431
a080769e8f7d Move inclusion of unistd.h to top, else fails on
Dave Love <fx@gnu.org>
parents: 21387
diff changeset
63 #ifdef HAVE_UNISTD_H
a080769e8f7d Move inclusion of unistd.h to top, else fails on
Dave Love <fx@gnu.org>
parents: 21387
diff changeset
64 #include <unistd.h>
a080769e8f7d Move inclusion of unistd.h to top, else fails on
Dave Love <fx@gnu.org>
parents: 21387
diff changeset
65 #endif
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
67 #ifdef WINDOWSNT
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
68 # include <io.h>
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
69 #else /* not WINDOWSNT */
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
70 # include <pwd.h>
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
71 #endif /* not WINDOWSNT */
83500
0a651d0085ee Fix compilation error on OpenBSD. (Reported by Han Boetes.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83499
diff changeset
72 #include <sys/stat.h>
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
73
82995
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82994
diff changeset
74 #include <signal.h>
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
75 #include <errno.h>
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
76
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
77
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
78 char *getenv (), *getwd ();
60718
96023ae0af92 * emacsclient.c: Avoid expansion of getcwd when defined as a macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 56446
diff changeset
79 char *(getcwd) ();
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
80
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
81 #ifdef WINDOWSNT
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
82 char *w32_getenv ();
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
83 #define egetenv(VAR) w32_getenv(VAR)
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
84 #else
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
85 #define egetenv(VAR) getenv(VAR)
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
86 #endif
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
87
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
88 #ifndef VERSION
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
89 #define VERSION "unspecified"
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
90 #endif
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
91
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
92
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
93 #ifndef EXIT_SUCCESS
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
94 #define EXIT_SUCCESS 0
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
95 #endif
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
96
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
97 #ifndef EXIT_FAILURE
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
98 #define EXIT_FAILURE 1
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
99 #endif
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
100
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
101 #ifndef FALSE
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
102 #define FALSE 0
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
103 #endif
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
104
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
105 #ifndef TRUE
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
106 #define TRUE 1
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
107 #endif
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
108
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
109 #ifndef NO_RETURN
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
110 #define NO_RETURN
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
111 #endif
99215
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
112
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
113 /* Additional space when allocating buffers for filenames, etc. */
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
114 #define EXTRA_SPACE 100
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
115
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
116
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
117 /* Name used to invoke this program. */
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
118 char *progname;
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
119
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53233
diff changeset
120 /* The second argument to main. */
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53233
diff changeset
121 char **main_argv;
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53233
diff changeset
122
16146
a649abfefbb1 (longopts): Change nowait to no-wait.
Richard M. Stallman <rms@gnu.org>
parents: 16074
diff changeset
123 /* Nonzero means don't wait for a response from Emacs. --no-wait. */
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
124 int nowait = 0;
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
125
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
126 /* Nonzero means args are expressions to be evaluated. --eval. */
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
127 int eval = 0;
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
128
84667
f2c11a35b0e3 (current_frame): Change the default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83666
diff changeset
129 /* Nonzero means don't open a new frame. Inverse of --create-frame. */
f2c11a35b0e3 (current_frame): Change the default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83666
diff changeset
130 int current_frame = 1;
83367
2b5fb28780be Fix `emacsclient -ne '(+ 2 2)'' (reported by Han Boetes), and clean up some corner cases in Emacs server.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
131
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
132 /* The display on which Emacs should work. --display. */
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
133 char *display = NULL;
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
134
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
135 /* Nonzero means open a new Emacs frame on the current terminal. */
83043
78a785f205ea Added -w option to emacsclient for opening a new X frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83037
diff changeset
136 int tty = 0;
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
137
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
138 /* If non-NULL, the name of an editor to fallback to if the server
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
139 is not running. --alternate-editor. */
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
140 const char *alternate_editor = NULL;
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
141
52532
cd53bfef4ab1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 52479
diff changeset
142 /* If non-NULL, the filename of the UNIX socket. */
52479
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
143 char *socket_name = NULL;
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
144
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
145 /* If non-NULL, the filename of the authentication file. */
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
146 char *server_file = NULL;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
147
74342
c6cb776ffbb7 (emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 74341
diff changeset
148 /* PID of the Emacs server process. */
c6cb776ffbb7 (emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 74341
diff changeset
149 int emacs_pid = 0;
c6cb776ffbb7 (emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 74341
diff changeset
150
72005
da0099bc0ba4 * ebrowse.c (usage, version): Mark as NO_RETURN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 68647
diff changeset
151 void print_help_and_exit () NO_RETURN;
21387
4812cf228971 Include <stdlib.h> and <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19582
diff changeset
152
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
153 struct option longopts[] =
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
154 {
16146
a649abfefbb1 (longopts): Change nowait to no-wait.
Richard M. Stallman <rms@gnu.org>
parents: 16074
diff changeset
155 { "no-wait", no_argument, NULL, 'n' },
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
156 { "eval", no_argument, NULL, 'e' },
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
157 { "help", no_argument, NULL, 'H' },
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
158 { "version", no_argument, NULL, 'V' },
82994
44ffe551079c Fix longopts option name for --tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 82991
diff changeset
159 { "tty", no_argument, NULL, 't' },
98676
d63a9c87e0ac (longopts, print_help_and_exit): Add -nw.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 98245
diff changeset
160 { "nw", no_argument, NULL, 't' },
84667
f2c11a35b0e3 (current_frame): Change the default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83666
diff changeset
161 { "create-frame", no_argument, NULL, 'c' },
47515
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
162 { "alternate-editor", required_argument, NULL, 'a' },
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
163 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
52479
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
164 { "socket-name", required_argument, NULL, 's' },
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
165 #endif
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
166 { "server-file", required_argument, NULL, 'f' },
87724
e89ccaac023a (decode_options) [WINDOWSNT]: Don't use the value of DISPLAY in the
Eli Zaretskii <eliz@gnu.org>
parents: 87669
diff changeset
167 #ifndef WINDOWSNT
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
168 { "display", required_argument, NULL, 'd' },
87724
e89ccaac023a (decode_options) [WINDOWSNT]: Don't use the value of DISPLAY in the
Eli Zaretskii <eliz@gnu.org>
parents: 87669
diff changeset
169 #endif
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
170 { 0, 0, 0, 0 }
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
171 };
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
172
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
173
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
174 /* Like malloc but get fatal error if memory is exhausted. */
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
175
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
176 long *
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
177 xmalloc (size)
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
178 unsigned int size;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
179 {
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
180 long *result = (long *) malloc (size);
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
181 if (result == NULL)
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
182 {
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
183 perror ("malloc");
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
184 exit (EXIT_FAILURE);
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
185 }
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
186 return result;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
187 }
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
188
83103
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
189 /* Like strdup but get a fatal error if memory is exhausted. */
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
190
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
191 char *
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
192 xstrdup (const char *s)
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
193 {
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
194 char *result = strdup (s);
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
195 if (result == NULL)
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
196 {
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
197 perror ("strdup");
83121
84cafe5c268f Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83107 55442
diff changeset
198 exit (EXIT_FAILURE);
83103
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
199 }
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
200 return result;
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
201 }
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
202
83499
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
203 /* From sysdep.c */
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
204 #if !defined (HAVE_GET_CURRENT_DIR_NAME) || defined (BROKEN_GET_CURRENT_DIR_NAME)
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
205
84681
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
206 /* From lisp.h */
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
207 #ifndef DIRECTORY_SEP
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
208 #define DIRECTORY_SEP '/'
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
209 #endif
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
210 #ifndef IS_DIRECTORY_SEP
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
211 #define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP)
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
212 #endif
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
213 #ifndef IS_DEVICE_SEP
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
214 #ifndef DEVICE_SEP
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
215 #define IS_DEVICE_SEP(_c_) 0
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
216 #else
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
217 #define IS_DEVICE_SEP(_c_) ((_c_) == DEVICE_SEP)
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
218 #endif
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
219 #endif
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
220 #ifndef IS_ANY_SEP
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
221 #define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_))
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
222 #endif
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
223
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
224
83499
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
225 /* Return the current working directory. Returns NULL on errors.
87965
e66c061f4966 (set_tcp_socket): Don't send a "\n" after the authentication string;
Juanma Barranquero <lekktu@gmail.com>
parents: 87724
diff changeset
226 Any other returned value must be freed with free. This is used
83499
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
227 only when get_current_dir_name is not defined on the system. */
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
228 char*
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
229 get_current_dir_name ()
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
230 {
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
231 char *buf;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
232 char *pwd;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
233 struct stat dotstat, pwdstat;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
234 /* If PWD is accurate, use it instead of calling getwd. PWD is
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
235 sometimes a nicer name, and using it may avoid a fatal error if a
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
236 parent directory is searchable but not readable. */
85680
a927843fe12d Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 85116
diff changeset
237 if ((pwd = egetenv ("PWD")) != 0
83499
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
238 && (IS_DIRECTORY_SEP (*pwd) || (*pwd && IS_DEVICE_SEP (pwd[1])))
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
239 && stat (pwd, &pwdstat) == 0
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
240 && stat (".", &dotstat) == 0
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
241 && dotstat.st_ino == pwdstat.st_ino
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
242 && dotstat.st_dev == pwdstat.st_dev
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
243 #ifdef MAXPATHLEN
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
244 && strlen (pwd) < MAXPATHLEN
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
245 #endif
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
246 )
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
247 {
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
248 buf = (char *) xmalloc (strlen (pwd) + 1);
83499
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
249 if (!buf)
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
250 return NULL;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
251 strcpy (buf, pwd);
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
252 }
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
253 #ifdef HAVE_GETCWD
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
254 else
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
255 {
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
256 size_t buf_size = 1024;
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
257 buf = (char *) xmalloc (buf_size);
83499
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
258 if (!buf)
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
259 return NULL;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
260 for (;;)
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
261 {
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
262 if (getcwd (buf, buf_size) == buf)
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
263 break;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
264 if (errno != ERANGE)
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
265 {
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
266 int tmp_errno = errno;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
267 free (buf);
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
268 errno = tmp_errno;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
269 return NULL;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
270 }
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
271 buf_size *= 2;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
272 buf = (char *) realloc (buf, buf_size);
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
273 if (!buf)
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
274 return NULL;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
275 }
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
276 }
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
277 #else
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
278 else
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
279 {
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
280 /* We need MAXPATHLEN here. */
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
281 buf = (char *) xmalloc (MAXPATHLEN + 1);
83499
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
282 if (!buf)
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
283 return NULL;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
284 if (getwd (buf) == NULL)
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
285 {
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
286 int tmp_errno = errno;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
287 free (buf);
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
288 errno = tmp_errno;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
289 return NULL;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
290 }
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
291 }
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
292 #endif
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
293 return buf;
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
294 }
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
295 #endif
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
296
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
297 #ifdef WINDOWSNT
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
298
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
299 #define REG_ROOT "SOFTWARE\\GNU\\Emacs"
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
300
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
301 /* Retrieve an environment variable from the Emacs subkeys of the registry.
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
302 Return NULL if the variable was not found, or it was empty.
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
303 This code is based on w32_get_resource (w32.c). */
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
304 char *
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
305 w32_get_resource (predefined, key, type)
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
306 HKEY predefined;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
307 char *key;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
308 LPDWORD type;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
309 {
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
310 HKEY hrootkey = NULL;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
311 char *result = NULL;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
312 DWORD cbData;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
313
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
314 if (RegOpenKeyEx (predefined, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS)
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
315 {
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
316 if (RegQueryValueEx (hrootkey, key, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS)
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
317 {
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
318 result = (char *) xmalloc (cbData);
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
319
99215
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
320 if ((RegQueryValueEx (hrootkey, key, NULL, type, result, &cbData) != ERROR_SUCCESS)
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
321 || (*result == 0))
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
322 {
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
323 free (result);
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
324 result = NULL;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
325 }
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
326 }
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
327
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
328 RegCloseKey (hrootkey);
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
329 }
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
330
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
331 return result;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
332 }
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
333
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
334 /*
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
335 getenv wrapper for Windows
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
336
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
337 This is needed to duplicate Emacs's behavior, which is to look for enviroment
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
338 variables in the registry if they don't appear in the environment.
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
339 */
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
340 char *
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
341 w32_getenv (envvar)
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
342 char *envvar;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
343 {
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
344 char *value;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
345 DWORD dwType;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
346
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
347 if (value = getenv (envvar))
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
348 /* Found in the environment. */
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
349 return value;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
350
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
351 if (! (value = w32_get_resource (HKEY_CURRENT_USER, envvar, &dwType)) &&
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
352 ! (value = w32_get_resource (HKEY_LOCAL_MACHINE, envvar, &dwType)))
99311
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
353 {
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
354 /* "w32console" is what Emacs on Windows uses for tty-type under -nw. */
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
355 if (strcmp (envvar, "TERM") == 0)
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
356 return xstrdup ("w32console");
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
357 /* Found neither in the environment nor in the registry. */
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
358 return NULL;
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
359 }
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
360
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
361 if (dwType == REG_SZ)
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
362 /* Registry; no need to expand. */
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
363 return value;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
364
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
365 if (dwType == REG_EXPAND_SZ)
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
366 {
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
367 DWORD size;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
368
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
369 if (size = ExpandEnvironmentStrings (value, NULL, 0))
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
370 {
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
371 char *buffer = (char *) xmalloc (size);
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
372 if (ExpandEnvironmentStrings (value, buffer, size))
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
373 {
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
374 /* Found and expanded. */
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
375 free (value);
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
376 return buffer;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
377 }
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
378
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
379 /* Error expanding. */
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
380 free (buffer);
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
381 }
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
382 }
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
383
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
384 /* Not the right type, or not correctly expanded. */
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
385 free (value);
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
386 return NULL;
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
387 }
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
388
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
389 int
74645
aa3039743d63 Comment and whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 74644
diff changeset
390 w32_window_app ()
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
391 {
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
392 static int window_app = -1;
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
393 char szTitle[MAX_PATH];
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
394
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
395 if (window_app < 0)
78904
5025525d6c9d (w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents: 78257
diff changeset
396 {
5025525d6c9d (w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents: 78257
diff changeset
397 /* Checking for STDOUT does not work; it's a valid handle also in
5025525d6c9d (w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents: 78257
diff changeset
398 nonconsole apps. Testing for the console title seems to work. */
5025525d6c9d (w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents: 78257
diff changeset
399 window_app = (GetConsoleTitleA (szTitle, MAX_PATH) == 0);
5025525d6c9d (w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents: 78257
diff changeset
400 if (window_app)
5025525d6c9d (w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents: 78257
diff changeset
401 InitCommonControls();
5025525d6c9d (w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents: 78257
diff changeset
402 }
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
403
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
404 return window_app;
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
405 }
83600
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
406
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
407 /*
84681
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
408 execvp wrapper for Windows. Quotes arguments with embedded spaces.
83600
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
409
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
410 This is necessary due to the broken implementation of exec* routines in
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
411 the Microsoft libraries: they concatenate the arguments together without
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
412 quoting special characters, and pass the result to CreateProcess, with
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
413 predictably bad results. By contrast, Posix execvp passes the arguments
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
414 directly into the argv array of the child process.
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
415 */
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
416 int
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
417 w32_execvp (path, argv)
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
418 char *path;
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
419 char **argv;
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
420 {
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
421 int i;
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
422
83600
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
423 /* Required to allow a .BAT script as alternate editor. */
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
424 argv[0] = (char *) alternate_editor;
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
425
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
426 for (i = 0; argv[i]; i++)
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
427 if (strchr (argv[i], ' '))
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
428 {
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
429 char *quoted = alloca (strlen (argv[i]) + 3);
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
430 sprintf (quoted, "\"%s\"", argv[i]);
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
431 argv[i] = quoted;
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
432 }
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
433
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
434 return execvp (path, argv);
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
435 }
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
436
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
437 #undef execvp
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
438 #define execvp w32_execvp
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
439
99311
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
440 /* Emulation of ttyname for Windows. */
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
441 char *
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
442 ttyname (int fd)
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
443 {
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
444 return "CONOUT$";
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
445 }
9e2c3c623db2 (main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents: 99297
diff changeset
446
83600
9aa8a3a78f9e * emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83590
diff changeset
447 #endif /* WINDOWSNT */
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
448
85691
153740aec87c Comment change.
Juanma Barranquero <lekktu@gmail.com>
parents: 85688
diff changeset
449 /* Display a normal or error message.
153740aec87c Comment change.
Juanma Barranquero <lekktu@gmail.com>
parents: 85688
diff changeset
450 On Windows, use a message box if compiled as a Windows app. */
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
451 void
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
452 message (int is_error, char *message, ...)
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
453 {
74342
c6cb776ffbb7 (emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 74341
diff changeset
454 char msg [2048];
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
455 va_list args;
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
456
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
457 va_start (args, message);
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
458 vsprintf (msg, message, args);
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
459 va_end (args);
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
460
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
461 #ifdef WINDOWSNT
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
462 if (w32_window_app ())
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
463 {
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
464 if (is_error)
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
465 MessageBox (NULL, msg, "Emacsclient ERROR", MB_ICONERROR);
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
466 else
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
467 MessageBox (NULL, msg, "Emacsclient", MB_ICONINFORMATION);
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
468 }
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
469 else
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
470 #endif
74341
32079f79e240 (message): Make sure the message is properly written even if it contains printf
Juanma Barranquero <lekktu@gmail.com>
parents: 74176
diff changeset
471 {
32079f79e240 (message): Make sure the message is properly written even if it contains printf
Juanma Barranquero <lekktu@gmail.com>
parents: 74176
diff changeset
472 FILE *f = is_error ? stderr : stdout;
32079f79e240 (message): Make sure the message is properly written even if it contains printf
Juanma Barranquero <lekktu@gmail.com>
parents: 74176
diff changeset
473
32079f79e240 (message): Make sure the message is properly written even if it contains printf
Juanma Barranquero <lekktu@gmail.com>
parents: 74176
diff changeset
474 fputs (msg, f);
32079f79e240 (message): Make sure the message is properly written even if it contains printf
Juanma Barranquero <lekktu@gmail.com>
parents: 74176
diff changeset
475 fflush (f);
32079f79e240 (message): Make sure the message is properly written even if it contains printf
Juanma Barranquero <lekktu@gmail.com>
parents: 74176
diff changeset
476 }
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
477 }
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
478
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
479 /* Decode the options from argv and argc.
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
480 The global variable `optind' will say how many arguments we used up. */
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
481
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
482 void
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
483 decode_options (argc, argv)
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
484 int argc;
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
485 char **argv;
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
486 {
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
487 alternate_editor = egetenv ("ALTERNATE_EDITOR");
88014
e830695cdb7f (decode_options): Default to a NULL display, as Emacs-22.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87965
diff changeset
488
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
489 while (1)
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
490 {
98676
d63a9c87e0ac (longopts, print_help_and_exit): Add -nw.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 98245
diff changeset
491 int opt = getopt_long_only (argc, argv,
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
492 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
493 "VHnea:s:f:d:tc",
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
494 #else
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
495 "VHnea:f:d:tc",
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
496 #endif
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
497 longopts, 0);
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
498
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
499 if (opt == EOF)
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
500 break;
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
501
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
502 switch (opt)
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
503 {
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
504 case 0:
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
505 /* If getopt returns 0, then it has already processed a
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
506 long-named option. We should do nothing. */
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
507 break;
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
508
27305
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
509 case 'a':
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
510 alternate_editor = optarg;
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
511 break;
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
512
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
513 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
52479
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
514 case 's':
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
515 socket_name = optarg;
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
516 break;
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
517 #endif
52479
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
518
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
519 case 'f':
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
520 server_file = optarg;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
521 break;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
522
88014
e830695cdb7f (decode_options): Default to a NULL display, as Emacs-22.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87965
diff changeset
523 /* We used to disallow this argument in w32, but it seems better
e830695cdb7f (decode_options): Default to a NULL display, as Emacs-22.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87965
diff changeset
524 to allow it, for the occasional case where the user is
e830695cdb7f (decode_options): Default to a NULL display, as Emacs-22.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87965
diff changeset
525 connecting with a w32 client to a server compiled with X11
e830695cdb7f (decode_options): Default to a NULL display, as Emacs-22.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87965
diff changeset
526 support. */
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
527 case 'd':
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
528 display = optarg;
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
529 break;
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
530
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
531 case 'n':
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
532 nowait = 1;
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
533 break;
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
534
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
535 case 'e':
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
536 eval = 1;
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
537 break;
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
538
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
539 case 'V':
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
540 message (FALSE, "emacsclient %s\n", VERSION);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 53813
diff changeset
541 exit (EXIT_SUCCESS);
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
542 break;
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
543
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
544 case 't':
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
545 tty = 1;
84715
e872fac85e8c (decode_options): -t implies -c.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84681
diff changeset
546 current_frame = 0;
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
547 break;
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
549 case 'c':
84667
f2c11a35b0e3 (current_frame): Change the default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83666
diff changeset
550 current_frame = 0;
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
551 break;
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
552
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
553 case 'H':
50101
e5f56d47b52c (print_help_and_exit): Print to stdout. Exit successfully. Added some blank
Juanma Barranquero <lekktu@gmail.com>
parents: 48627
diff changeset
554 print_help_and_exit ();
e5f56d47b52c (print_help_and_exit): Print to stdout. Exit successfully. Added some blank
Juanma Barranquero <lekktu@gmail.com>
parents: 48627
diff changeset
555 break;
e5f56d47b52c (print_help_and_exit): Print to stdout. Exit successfully. Added some blank
Juanma Barranquero <lekktu@gmail.com>
parents: 48627
diff changeset
556
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
557 default:
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
558 message (TRUE, "Try `%s --help' for more information\n", progname);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 53813
diff changeset
559 exit (EXIT_FAILURE);
50101
e5f56d47b52c (print_help_and_exit): Print to stdout. Exit successfully. Added some blank
Juanma Barranquero <lekktu@gmail.com>
parents: 48627
diff changeset
560 break;
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
561 }
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
562 }
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
563
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
564 /* If the -c option is used (without -t) and no --display argument
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
565 is provided, try $DISPLAY.
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
566 Without the -c option, we used to set `display' to $DISPLAY by
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
567 default, but this changed the default behavior and is sometimes
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
568 inconvenient. So we force users to use "--display $DISPLAY" if
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
569 they want Emacs to connect to their current display. */
91664
cb25fa691429 (decode_options): Fix last change so as not to override an explicit -display.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91663
diff changeset
570 if (!current_frame && !tty && !display)
91663
2b045ea84cf9 (decode_options): Pass --display implicitly if -c
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88014
diff changeset
571 display = egetenv ("DISPLAY");
2b045ea84cf9 (decode_options): Pass --display implicitly if -c
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88014
diff changeset
572
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
573 /* A null-string display is invalid. */
88014
e830695cdb7f (decode_options): Default to a NULL display, as Emacs-22.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87965
diff changeset
574 if (display && strlen (display) == 0)
e830695cdb7f (decode_options): Default to a NULL display, as Emacs-22.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87965
diff changeset
575 display = NULL;
e830695cdb7f (decode_options): Default to a NULL display, as Emacs-22.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87965
diff changeset
576
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
577 /* If no display is available, new frames are tty frames. */
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
578 if (!current_frame && !display)
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
579 tty = 1;
83624
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
580
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
581 /* --no-wait implies --current-frame on ttys when there are file
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
582 arguments or expressions given. */
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
583 if (nowait && tty && argc - optind > 0)
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
584 current_frame = 1;
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
585 }
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
586
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
587
21387
4812cf228971 Include <stdlib.h> and <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19582
diff changeset
588 void
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
589 print_help_and_exit ()
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
590 {
83624
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
591 /* Spaces and tabs are significant in this message; they're chosen so the
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
592 message aligns properly both in a tty and in a Windows message box.
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
593 Please try to preserve them; otherwise the output is very hard to read
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
594 when using emacsclientw. */
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
595 message (FALSE,
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
596 "Usage: %s [OPTIONS] FILE...\n\
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
597 Tell the Emacs server to visit the specified files.\n\
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
598 Every FILE can be either just a FILENAME or [+LINE[:COLUMN]] FILENAME.\n\
50101
e5f56d47b52c (print_help_and_exit): Print to stdout. Exit successfully. Added some blank
Juanma Barranquero <lekktu@gmail.com>
parents: 48627
diff changeset
599 \n\
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
600 The following OPTIONS are accepted:\n\
74127
46dc2e041725 (print_help_and_exit): Tweak message contents and tabs/spaces
Juanma Barranquero <lekktu@gmail.com>
parents: 74118
diff changeset
601 -V, --version Just print version info and return\n\
83624
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
602 -H, --help Print this usage information message\n\
98676
d63a9c87e0ac (longopts, print_help_and_exit): Add -nw.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 98245
diff changeset
603 -nw, -t, --tty Open a new Emacs frame on the current terminal\n\
85116
5f8a9bf276b9 (print_help_and_exit): Fix space to improve alignment in output messages.
Juanma Barranquero <lekktu@gmail.com>
parents: 85114
diff changeset
604 -c, --create-frame Create a new frame instead of trying to\n\
83624
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
605 use the current Emacs frame\n\
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
606 -e, --eval Evaluate the FILE arguments as ELisp expressions\n\
91852
e05f6258e35f (print_help_and_exit): Show -d option on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 91664
diff changeset
607 -n, --no-wait Don't wait for the server to return\n\
e05f6258e35f (print_help_and_exit): Show -d option on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 91664
diff changeset
608 -d, --display=DISPLAY Visit the file in the given display\n"
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
609 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
610 "-s, --socket-name=FILENAME\n\
74127
46dc2e041725 (print_help_and_exit): Tweak message contents and tabs/spaces
Juanma Barranquero <lekktu@gmail.com>
parents: 74118
diff changeset
611 Set filename of the UNIX socket for communication\n"
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
612 #endif
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
613 "-f, --server-file=FILENAME\n\
74127
46dc2e041725 (print_help_and_exit): Tweak message contents and tabs/spaces
Juanma Barranquero <lekktu@gmail.com>
parents: 74118
diff changeset
614 Set filename of the TCP authentication file\n\
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
615 -a, --alternate-editor=EDITOR\n\
83624
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
616 Editor to fallback to if the server is not running\n\
50101
e5f56d47b52c (print_help_and_exit): Print to stdout. Exit successfully. Added some blank
Juanma Barranquero <lekktu@gmail.com>
parents: 48627
diff changeset
617 \n\
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
618 Report bugs to bug-gnu-emacs@gnu.org.\n", progname);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 53813
diff changeset
619 exit (EXIT_SUCCESS);
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
620 }
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
621
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
622 /*
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
623 Try to run a different command, or --if no alternate editor is
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
624 defined-- exit with an errorcode.
84681
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
625 Uses argv, but gets it from the global variable main_argv.
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
626 */
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
627 void
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
628 fail (void)
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
629 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
630 if (alternate_editor)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
631 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
632 int i = optind - 1;
74637
fe8bd1af34c4 (w32_execvp): New function; wrapper for `execvp'.
Juanma Barranquero <lekktu@gmail.com>
parents: 74342
diff changeset
633
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
634 execvp (alternate_editor, main_argv + i);
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
635 message (TRUE, "%s: error executing alternate editor \"%s\"\n",
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
636 progname, alternate_editor);
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
637 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
638 exit (EXIT_FAILURE);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
639 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
640
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
641
73617
7af864af10b6 [WINDOWSNT]: Define HAVE_INET_SOCKETS.
Juanma Barranquero <lekktu@gmail.com>
parents: 73601
diff changeset
642 #if !defined (HAVE_SOCKETS) || !defined (HAVE_INET_SOCKETS)
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
643
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
644 int
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
645 main (argc, argv)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
646 int argc;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
647 char **argv;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
648 {
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
649 main_argv = argv;
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
650 progname = argv[0];
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
651 message (TRUE, "%s: Sorry, the Emacs server is supported only\n"
83624
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
652 "on systems with Berkeley sockets.\n",
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
653 argv[0]);
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
654 fail ();
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
655 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
656
73617
7af864af10b6 [WINDOWSNT]: Define HAVE_INET_SOCKETS.
Juanma Barranquero <lekktu@gmail.com>
parents: 73601
diff changeset
657 #else /* HAVE_SOCKETS && HAVE_INET_SOCKETS */
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
658
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
659 #ifdef WINDOWSNT
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
660 # include <winsock2.h>
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
661 #else
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
662 # include <sys/types.h>
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
663 # include <sys/socket.h>
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
664 # include <sys/un.h>
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
665 #endif
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
666
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
667 #define AUTH_KEY_LENGTH 64
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
668 #define SEND_BUFFER_SIZE 4096
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
669
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
670 extern char *strerror ();
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
671 extern int errno;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
672
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
673 /* Buffer to accumulate data to send in TCP connections. */
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
674 char send_buffer[SEND_BUFFER_SIZE + 1];
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
675 int sblen = 0; /* Fill pointer for the send buffer. */
83601
8365dbf64d14 (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83600
diff changeset
676 /* Socket used to communicate with the Emacs server process. */
8365dbf64d14 (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83600
diff changeset
677 HSOCKET emacs_socket = 0;
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
678
79226
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
679 /* On Windows, the socket library was historically separate from the standard
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
680 C library, so errors are handled differently. */
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
681 void
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
682 sock_err_message (function_name)
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
683 char *function_name;
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
684 {
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
685 #ifdef WINDOWSNT
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
686 char* msg = NULL;
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
687
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
688 FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
689 | FORMAT_MESSAGE_ALLOCATE_BUFFER
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
690 | FORMAT_MESSAGE_ARGUMENT_ARRAY,
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
691 NULL, WSAGetLastError (), 0, (LPTSTR)&msg, 0, NULL);
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
692
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
693 message (TRUE, "%s: %s: %s\n", progname, function_name, msg);
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
694
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
695 LocalFree (msg);
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
696 #else
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
697 message (TRUE, "%s: %s: %s\n", progname, function_name, strerror (errno));
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
698 #endif
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
699 }
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
700
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
701
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
702 /* Let's send the data to Emacs when either
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
703 - the data ends in "\n", or
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
704 - the buffer is full (but this shouldn't happen)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
705 Otherwise, we just accumulate it. */
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
706 void
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
707 send_to_emacs (s, data)
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
708 HSOCKET s;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
709 char *data;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
710 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
711 while (data)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
712 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
713 int dlen = strlen (data);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
714 if (dlen + sblen >= SEND_BUFFER_SIZE)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
715 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
716 int part = SEND_BUFFER_SIZE - sblen;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
717 strncpy (&send_buffer[sblen], data, part);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
718 data += part;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
719 sblen = SEND_BUFFER_SIZE;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
720 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
721 else if (dlen)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
722 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
723 strcpy (&send_buffer[sblen], data);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
724 data = NULL;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
725 sblen += dlen;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
726 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
727 else
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
728 break;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
729
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
730 if (sblen == SEND_BUFFER_SIZE
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
731 || (sblen > 0 && send_buffer[sblen-1] == '\n'))
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
732 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
733 int sent = send (s, send_buffer, sblen, 0);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
734 if (sent != sblen)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
735 strcpy (send_buffer, &send_buffer[sent]);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
736 sblen -= sent;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
737 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
738 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
739 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
740
83499
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
741
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
742 /* In STR, insert a & before each &, each space, each newline, and
52848
5c74e66d6c36 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 52635
diff changeset
743 any initial -. Change spaces to underscores, too, so that the
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
744 return value never contains a space.
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
745
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
746 Does not change the string. Outputs the result to STREAM. */
52635
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
747 void
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
748 quote_argument (s, str)
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
749 HSOCKET s;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
750 char *str;
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
751 {
83103
efc0b56b83d9 Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
752 char *copy = (char *) xmalloc (strlen (str) * 2 + 1);
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
753 char *p, *q;
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
754
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
755 p = str;
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
756 q = copy;
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
757 while (*p)
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
758 {
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
759 if (*p == ' ')
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
760 {
16074
25cfff7ffced (quote_file_name): Quote with &, not \.
Richard M. Stallman <rms@gnu.org>
parents: 16061
diff changeset
761 *q++ = '&';
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
762 *q++ = '_';
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
763 p++;
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
764 }
47515
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
765 else if (*p == '\n')
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
766 {
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
767 *q++ = '&';
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
768 *q++ = 'n';
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
769 p++;
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
770 }
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
771 else
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
772 {
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
773 if (*p == '&' || (*p == '-' && p == str))
16074
25cfff7ffced (quote_file_name): Quote with &, not \.
Richard M. Stallman <rms@gnu.org>
parents: 16061
diff changeset
774 *q++ = '&';
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
775 *q++ = *p++;
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
776 }
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
777 }
16074
25cfff7ffced (quote_file_name): Quote with &, not \.
Richard M. Stallman <rms@gnu.org>
parents: 16061
diff changeset
778 *q++ = 0;
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
779
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
780 send_to_emacs (s, copy);
52635
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
781
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
782 free (copy);
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
783 }
18701
9c7e0c926ed5 [C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
784
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
785
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
786 /* The inverse of quote_argument. Removes quoting in string STR by
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
787 modifying the string in place. Returns STR. */
18701
9c7e0c926ed5 [C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
788
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
789 char *
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
790 unquote_argument (str)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
791 char *str;
18701
9c7e0c926ed5 [C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
792 {
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
793 char *p, *q;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
794
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
795 if (! str)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
796 return str;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
797
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
798 p = str;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
799 q = str;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
800 while (*p)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
801 {
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
802 if (*p == '&')
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
803 {
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
804 p++;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
805 if (*p == '&')
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
806 *p = '&';
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
807 else if (*p == '_')
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
808 *p = ' ';
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
809 else if (*p == 'n')
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
810 *p = '\n';
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
811 else if (*p == '-')
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
812 *p = '-';
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
813 }
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
814 *q++ = *p++;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
815 }
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
816 *q = 0;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
817 return str;
18701
9c7e0c926ed5 [C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
818 }
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
819
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
820
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
821 int
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
822 file_name_absolute_p (filename)
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
823 const unsigned char *filename;
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
824 {
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
825 /* Sanity check, it shouldn't happen. */
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
826 if (! filename) return FALSE;
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
827
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
828 /* /xxx is always an absolute path. */
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
829 if (filename[0] == '/') return TRUE;
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
830
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
831 /* Empty filenames (which shouldn't happen) are relative. */
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
832 if (filename[0] == '\0') return FALSE;
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
833
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
834 #ifdef WINDOWSNT
75956
6ef0c279b18c Comment changes and clarifications.
Juanma Barranquero <lekktu@gmail.com>
parents: 75348
diff changeset
835 /* X:\xxx is always absolute. */
74176
6eee550d3bda (file_name_absolute_p) [WINDOWSNT]: Use isalpha().
Jason Rumney <jasonr@gnu.org>
parents: 74172
diff changeset
836 if (isalpha (filename[0])
74172
cbda0982f77c (file_name_absolute_p) [WINDOWSNT]: Support absolute file names with forward
Eli Zaretskii <eliz@gnu.org>
parents: 74145
diff changeset
837 && filename[1] == ':' && (filename[2] == '\\' || filename[2] == '/'))
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
838 return TRUE;
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
839
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
840 /* Both \xxx and \\xxx\yyy are absolute. */
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
841 if (filename[0] == '\\') return TRUE;
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
842 #endif
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
843
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
844 return FALSE;
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
845 }
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
846
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
847 #ifdef WINDOWSNT
74645
aa3039743d63 Comment and whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 74644
diff changeset
848 /* Wrapper to make WSACleanup a cdecl, as required by atexit. */
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
849 void
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
850 __cdecl close_winsock ()
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
851 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
852 WSACleanup ();
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
853 }
18701
9c7e0c926ed5 [C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
854
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
855 /* Initialize the WinSock2 library. */
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
856 void
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
857 initialize_sockets ()
18701
9c7e0c926ed5 [C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16218
diff changeset
858 {
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
859 WSADATA wsaData;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
860
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
861 if (WSAStartup (MAKEWORD (2, 0), &wsaData))
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
862 {
87669
b8b050fde307 Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents: 87668
diff changeset
863 message (TRUE, "%s: error initializing WinSock2\n", progname);
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
864 exit (EXIT_FAILURE);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
865 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
866
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
867 atexit (close_winsock);
73578
e193b6a3f379 Fixes to emacsclient.c for GNU/Linux.
Juanma Barranquero <lekktu@gmail.com>
parents: 73562
diff changeset
868 }
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
869 #endif /* WINDOWSNT */
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
870
16030
fb38057473c8 (decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15995
diff changeset
871
27305
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
872 /*
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
873 * Read the information needed to set up a TCP comm channel with
73806
fbfa7d8c0a64 (get_server_config): Extract also the Emacs pid from the server file.
Juanma Barranquero <lekktu@gmail.com>
parents: 73765
diff changeset
874 * the Emacs server: host, port, pid and authentication string.
74729
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
875 */
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
876 int
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
877 get_server_config (server, authentication)
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
878 struct sockaddr_in *server;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
879 char *authentication;
27305
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
880 {
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
881 char dotted[32];
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
882 char *port;
73806
fbfa7d8c0a64 (get_server_config): Extract also the Emacs pid from the server file.
Juanma Barranquero <lekktu@gmail.com>
parents: 73765
diff changeset
883 char *pid;
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
884 FILE *config = NULL;
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
885
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
886 if (file_name_absolute_p (server_file))
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
887 config = fopen (server_file, "rb");
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
888 else
27305
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
889 {
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
890 char *home = egetenv ("HOME");
73809
cbc1f46b6590 (get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents: 73806
diff changeset
891
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
892 if (home)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
893 {
99215
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
894 char *path = alloca (strlen (home) + strlen (server_file)
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
895 + EXTRA_SPACE);
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
896 sprintf (path, "%s/.emacs.d/server/%s", home, server_file);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
897 config = fopen (path, "rb");
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
898 }
73809
cbc1f46b6590 (get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents: 73806
diff changeset
899 #ifdef WINDOWSNT
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
900 if (!config && (home = egetenv ("APPDATA")))
73809
cbc1f46b6590 (get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents: 73806
diff changeset
901 {
99215
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
902 char *path = alloca (strlen (home) + strlen (server_file)
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
903 + EXTRA_SPACE);
73809
cbc1f46b6590 (get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents: 73806
diff changeset
904 sprintf (path, "%s/.emacs.d/server/%s", home, server_file);
cbc1f46b6590 (get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents: 73806
diff changeset
905 config = fopen (path, "rb");
cbc1f46b6590 (get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents: 73806
diff changeset
906 }
cbc1f46b6590 (get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents: 73806
diff changeset
907 #endif
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
908 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
909
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
910 if (! config)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
911 return FALSE;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
912
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
913 if (fgets (dotted, sizeof dotted, config)
73806
fbfa7d8c0a64 (get_server_config): Extract also the Emacs pid from the server file.
Juanma Barranquero <lekktu@gmail.com>
parents: 73765
diff changeset
914 && (port = strchr (dotted, ':'))
fbfa7d8c0a64 (get_server_config): Extract also the Emacs pid from the server file.
Juanma Barranquero <lekktu@gmail.com>
parents: 73765
diff changeset
915 && (pid = strchr (port, ' ')))
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
916 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
917 *port++ = '\0';
73806
fbfa7d8c0a64 (get_server_config): Extract also the Emacs pid from the server file.
Juanma Barranquero <lekktu@gmail.com>
parents: 73765
diff changeset
918 *pid++ = '\0';
27305
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
919 }
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
920 else
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
921 {
87669
b8b050fde307 Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents: 87668
diff changeset
922 message (TRUE, "%s: invalid configuration info\n", progname);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 53813
diff changeset
923 exit (EXIT_FAILURE);
27305
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
924 }
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
925
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
926 server->sin_family = AF_INET;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
927 server->sin_addr.s_addr = inet_addr (dotted);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
928 server->sin_port = htons (atoi (port));
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
929
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
930 if (! fread (authentication, AUTH_KEY_LENGTH, 1, config))
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
931 {
87669
b8b050fde307 Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents: 87668
diff changeset
932 message (TRUE, "%s: cannot read authentication info\n", progname);
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
933 exit (EXIT_FAILURE);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
934 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
935
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
936 fclose (config);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
937
74342
c6cb776ffbb7 (emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 74341
diff changeset
938 emacs_pid = atoi (pid);
73806
fbfa7d8c0a64 (get_server_config): Extract also the Emacs pid from the server file.
Juanma Barranquero <lekktu@gmail.com>
parents: 73765
diff changeset
939
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
940 return TRUE;
27305
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
941 }
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
942
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
943 HSOCKET
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
944 set_tcp_socket ()
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
945 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
946 HSOCKET s;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
947 struct sockaddr_in server;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
948 struct linger l_arg = {1, 1};
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
949 char auth_string[AUTH_KEY_LENGTH + 1];
27305
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
950
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
951 if (! get_server_config (&server, auth_string))
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
952 return INVALID_SOCKET;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
953
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
954 if (server.sin_addr.s_addr != inet_addr ("127.0.0.1"))
74341
32079f79e240 (message): Make sure the message is properly written even if it contains printf
Juanma Barranquero <lekktu@gmail.com>
parents: 74176
diff changeset
955 message (FALSE, "%s: connected to remote socket at %s\n",
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
956 progname, inet_ntoa (server.sin_addr));
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
957
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
958 /*
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
959 * Open up an AF_INET socket
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
960 */
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
961 if ((s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
962 {
79226
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
963 sock_err_message ("socket");
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
964 return INVALID_SOCKET;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
965 }
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
967 /*
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
968 * Set up the socket
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
969 */
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
970 if (connect (s, (struct sockaddr *) &server, sizeof server) < 0)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
971 {
79226
8919d6b286e1 (sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents: 78904
diff changeset
972 sock_err_message ("connect");
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
973 return INVALID_SOCKET;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
974 }
27305
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
975
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
976 setsockopt (s, SOL_SOCKET, SO_LINGER, (char *) &l_arg, sizeof l_arg);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
977
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
978 /*
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
979 * Send the authentication
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
980 */
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
981 auth_string[AUTH_KEY_LENGTH] = '\0';
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
982
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
983 send_to_emacs (s, "-auth ");
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
984 send_to_emacs (s, auth_string);
87965
e66c061f4966 (set_tcp_socket): Don't send a "\n" after the authentication string;
Juanma Barranquero <lekktu@gmail.com>
parents: 87724
diff changeset
985 send_to_emacs (s, " ");
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
986
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
987 return s;
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 }
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989
83590
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
990
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
991 /* Returns 1 if PREFIX is a prefix of STRING. */
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
992 static int
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
993 strprefix (char *prefix, char *string)
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
994 {
84681
f44a6d77db08 (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84677
diff changeset
995 return !strncmp (prefix, string, strlen (prefix));
83590
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
996 }
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
997
99334
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
998 /* Get tty name and type. If successful, return the type in TTY_TYPE
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
999 and the name in TTY_NAME, and return 1. Otherwise, fail if NOABORT
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1000 is zero, or return 0 if NOABORT is non-zero. */
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1001
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1002 int
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1003 find_tty (char **tty_type, char **tty_name, int noabort)
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1004 {
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1005 char *type = egetenv ("TERM");
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1006 char *name = ttyname (fileno (stdout));
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1007
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1008 if (!name)
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1009 {
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1010 if (noabort)
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1011 return 0;
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1012 else
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1013 {
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1014 message (TRUE, "%s: could not get terminal name\n", progname);
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1015 fail ();
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1016 }
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1017 }
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1018
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1019 if (!type)
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1020 {
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1021 if (noabort)
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1022 return 0;
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1023 else
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1024 {
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1025 message (TRUE, "%s: please set the TERM variable to your terminal type\n",
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1026 progname);
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1027 fail ();
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1028 }
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1029 }
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1030
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1031 if (strcmp (type, "eterm") == 0)
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1032 {
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1033 if (noabort)
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1034 return 0;
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1035 else
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1036 {
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1037 /* This causes nasty, MULTI_KBOARD-related input lockouts. */
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1038 message (TRUE, "%s: opening a frame in an Emacs term buffer"
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1039 " is not supported\n", progname);
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1040 fail ();
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1041 }
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1042 }
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1043
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1044 *tty_name = name;
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1045 *tty_type = type;
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1046 return 1;
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1047 }
e6ec0b2ebf47 Fix last change.
Chong Yidong <cyd@stupidchicken.com>
parents: 99333
diff changeset
1048
83590
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
1049
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1050 #if !defined (NO_SOCKETS_IN_FILE_SYSTEM)
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1052 /* Three possibilities:
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1053 2 - can't be `stat'ed (sets errno)
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1054 1 - isn't owned by us
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1055 0 - success: none of the above */
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1056
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1057 static int
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1058 socket_status (socket_name)
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1059 char *socket_name;
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1060 {
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1061 struct stat statbfr;
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1062
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1063 if (stat (socket_name, &statbfr) == -1)
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1064 return 2;
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1065
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1066 if (statbfr.st_uid != geteuid ())
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1067 return 1;
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1068
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1069 return 0;
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1070 }
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1071
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1072
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83019
diff changeset
1073 /* A signal handler that passes the signal to the Emacs process.
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83019
diff changeset
1074 Useful for SIGWINCH. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83019
diff changeset
1075
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1076 SIGTYPE
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
1077 pass_signal_to_emacs (int signalnum)
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1078 {
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1079 int old_errno = errno;
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1080
82995
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82994
diff changeset
1081 if (emacs_pid)
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
1082 kill (emacs_pid, signalnum);
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1083
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
1084 signal (signalnum, pass_signal_to_emacs);
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1085 errno = old_errno;
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1086 }
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1087
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1088 /* Signal handler for SIGCONT; notify the Emacs process that it can
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1089 now resume our tty frame. */
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1090
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1091 SIGTYPE
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1092 handle_sigcont (int signalnum)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1093 {
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1094 int old_errno = errno;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1095
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1096 if (tcgetpgrp (1) == getpgrp ())
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1097 {
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1098 /* We are in the foreground. */
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1099 send_to_emacs (emacs_socket, "-resume \n");
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1100 }
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1101 else
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1102 {
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1103 /* We are in the background; cancel the continue. */
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1104 kill (getpid (), SIGSTOP);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1105 }
83348
afade4ccd30c Fix broken emacsclient resume on Solaris (by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83332
diff changeset
1106
afade4ccd30c Fix broken emacsclient resume on Solaris (by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83332
diff changeset
1107 signal (signalnum, handle_sigcont);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1108 errno = old_errno;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1109 }
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1110
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1111 /* Signal handler for SIGTSTP; notify the Emacs process that we are
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1112 going to sleep. Normally the suspend is initiated by Emacs via
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1113 server-handle-suspend-tty, but if the server gets out of sync with
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1114 reality, we may get a SIGTSTP on C-z. Handling this signal and
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1115 notifying Emacs about it should get things under control again. */
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1116
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1117 SIGTYPE
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1118 handle_sigtstp (int signalnum)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1119 {
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1120 int old_errno = errno;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1121 sigset_t set;
83624
3b1222f7b28a (print_help_and_exit): Restore and adapt trunk change from 2006-11-23 which was
Juanma Barranquero <lekktu@gmail.com>
parents: 83620
diff changeset
1122
83611
a5651b79b31b * emacsclient.c (handle_sigtstp): Use the new name for the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83607
diff changeset
1123 if (emacs_socket)
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1124 send_to_emacs (emacs_socket, "-suspend \n");
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1125
87965
e66c061f4966 (set_tcp_socket): Don't send a "\n" after the authentication string;
Juanma Barranquero <lekktu@gmail.com>
parents: 87724
diff changeset
1126 /* Unblock this signal and call the default handler by temporarily
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1127 changing the handler and resignalling. */
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1128 sigprocmask (SIG_BLOCK, NULL, &set);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1129 sigdelset (&set, signalnum);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1130 signal (signalnum, SIG_DFL);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1131 kill (getpid (), signalnum);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1132 sigprocmask (SIG_SETMASK, &set, NULL); /* Let's the above signal through. */
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1133 signal (signalnum, handle_sigtstp);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1134
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1135 errno = old_errno;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1136 }
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1137
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1138
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83019
diff changeset
1139 /* Set up signal handlers before opening a frame on the current tty. */
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1140
82995
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82994
diff changeset
1141 void
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82994
diff changeset
1142 init_signals (void)
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1143 {
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1144 /* Set up signal handlers. */
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
1145 signal (SIGWINCH, pass_signal_to_emacs);
83012
4aa172a45af1 Fix C-g handling with multiple ttys.
Karoly Lorentey <lorentey@elte.hu>
parents: 83010
diff changeset
1146
4aa172a45af1 Fix C-g handling with multiple ttys.
Karoly Lorentey <lorentey@elte.hu>
parents: 83010
diff changeset
1147 /* Don't pass SIGINT and SIGQUIT to Emacs, because it has no way of
4aa172a45af1 Fix C-g handling with multiple ttys.
Karoly Lorentey <lorentey@elte.hu>
parents: 83010
diff changeset
1148 deciding which terminal the signal came from. C-g is now a
4aa172a45af1 Fix C-g handling with multiple ttys.
Karoly Lorentey <lorentey@elte.hu>
parents: 83010
diff changeset
1149 normal input event on secondary terminals. */
4aa172a45af1 Fix C-g handling with multiple ttys.
Karoly Lorentey <lorentey@elte.hu>
parents: 83010
diff changeset
1150 #if 0
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
1151 signal (SIGINT, pass_signal_to_emacs);
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
1152 signal (SIGQUIT, pass_signal_to_emacs);
83012
4aa172a45af1 Fix C-g handling with multiple ttys.
Karoly Lorentey <lorentey@elte.hu>
parents: 83010
diff changeset
1153 #endif
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1154
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1155 signal (SIGCONT, handle_sigcont);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1156 signal (SIGTSTP, handle_sigtstp);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1157 signal (SIGTTOU, handle_sigtstp);
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1158 }
27305
4161adef5fd3 Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents: 26083
diff changeset
1159
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1161 HSOCKET
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1162 set_local_socket ()
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 {
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1164 HSOCKET s;
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 struct sockaddr_un server;
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
1167 /*
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168 * Open up an AF_UNIX socket in this person's home directory
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 */
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 {
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
1173 message (TRUE, "%s: socket: %s\n", progname, strerror (errno));
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1174 return INVALID_SOCKET;
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 }
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
1176
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 server.sun_family = AF_UNIX;
25261
89be69860eeb (main): Move the dynamic allocation of
Karl Heuer <kwzh@gnu.org>
parents: 24652
diff changeset
1178
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 478
diff changeset
1179 {
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1180 int sock_status = 0;
53646
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1181 int default_sock = !socket_name;
83010
82554ed1aed8 Merged in changes from CVS HEAD
Karoly Lorentey <lorentey@elte.hu>
parents: 83005 53543
diff changeset
1182 int saved_errno = 0;
53734
132739917566 (main): Don't use the hostname in the socket name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53693
diff changeset
1183 char *server_name = "server";
99209
01e8c1513572 * server.el, emacsclient.c: Use TMPDIR (default /tmp) instead of hardcoded /tmp.
Juanma Barranquero <lekktu@gmail.com>
parents: 98676
diff changeset
1184 char *tmpdir;
53734
132739917566 (main): Don't use the hostname in the socket name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53693
diff changeset
1185
132739917566 (main): Don't use the hostname in the socket name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53693
diff changeset
1186 if (socket_name && !index (socket_name, '/') && !index (socket_name, '\\'))
132739917566 (main): Don't use the hostname in the socket name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53693
diff changeset
1187 { /* socket_name is a file name component. */
83031
1d2f73785d9d Merged in changes from CVS HEAD
Karoly Lorentey <lorentey@elte.hu>
parents: 83030 53734
diff changeset
1188 server_name = socket_name;
1d2f73785d9d Merged in changes from CVS HEAD
Karoly Lorentey <lorentey@elte.hu>
parents: 83030 53734
diff changeset
1189 socket_name = NULL;
1d2f73785d9d Merged in changes from CVS HEAD
Karoly Lorentey <lorentey@elte.hu>
parents: 83030 53734
diff changeset
1190 default_sock = 1; /* Try both UIDs. */
53734
132739917566 (main): Don't use the hostname in the socket name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53693
diff changeset
1191 }
24084
c0b0893dd5a6 (main): Eliminate arbitrary limit on length of system_name.
Richard M. Stallman <rms@gnu.org>
parents: 23412
diff changeset
1192
53646
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1193 if (default_sock)
52479
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1194 {
99209
01e8c1513572 * server.el, emacsclient.c: Use TMPDIR (default /tmp) instead of hardcoded /tmp.
Juanma Barranquero <lekktu@gmail.com>
parents: 98676
diff changeset
1195 tmpdir = egetenv ("TMPDIR");
01e8c1513572 * server.el, emacsclient.c: Use TMPDIR (default /tmp) instead of hardcoded /tmp.
Juanma Barranquero <lekktu@gmail.com>
parents: 98676
diff changeset
1196 if (!tmpdir)
01e8c1513572 * server.el, emacsclient.c: Use TMPDIR (default /tmp) instead of hardcoded /tmp.
Juanma Barranquero <lekktu@gmail.com>
parents: 98676
diff changeset
1197 tmpdir = "/tmp";
99215
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
1198 socket_name = alloca (strlen (tmpdir) + strlen (server_name)
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
1199 + EXTRA_SPACE);
99209
01e8c1513572 * server.el, emacsclient.c: Use TMPDIR (default /tmp) instead of hardcoded /tmp.
Juanma Barranquero <lekktu@gmail.com>
parents: 98676
diff changeset
1200 sprintf (socket_name, "%s/emacs%d/%s",
01e8c1513572 * server.el, emacsclient.c: Use TMPDIR (default /tmp) instead of hardcoded /tmp.
Juanma Barranquero <lekktu@gmail.com>
parents: 98676
diff changeset
1201 tmpdir, (int) geteuid (), server_name);
52479
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1202 }
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1203
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1204 if (strlen (socket_name) < sizeof (server.sun_path))
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1205 strcpy (server.sun_path, socket_name);
bc2610a13fbf (socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1206 else
53646
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1207 {
87669
b8b050fde307 Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents: 87668
diff changeset
1208 message (TRUE, "%s: socket-name %s too long\n",
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1209 progname, socket_name);
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
1210 fail ();
53646
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1211 }
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1213 /* See if the socket exists, and if it's owned by us. */
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1214 sock_status = socket_status (server.sun_path);
53543
fec82b542db2 (main): Save errno from socket_status.
Andreas Schwab <schwab@suse.de>
parents: 53497
diff changeset
1215 saved_errno = errno;
53646
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1216 if (sock_status && default_sock)
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 478
diff changeset
1217 {
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1218 /* Failing that, see if LOGNAME or USER exist and differ from
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1219 our euid. If so, look for a socket based on the UID
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1220 associated with the name. This is reminiscent of the logic
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1221 that init_editfns uses to set the global Vuser_full_name. */
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
1222
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
1223 char *user_name = (char *) egetenv ("LOGNAME");
53693
04e9ebd16fcd (main): Restore errno from saved_errno,
Richard M. Stallman <rms@gnu.org>
parents: 53646
diff changeset
1224
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1225 if (!user_name)
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
1226 user_name = (char *) egetenv ("USER");
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
1227
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1228 if (user_name)
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1229 {
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1230 struct passwd *pw = getpwnam (user_name);
53693
04e9ebd16fcd (main): Restore errno from saved_errno,
Richard M. Stallman <rms@gnu.org>
parents: 53646
diff changeset
1231
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1232 if (pw && (pw->pw_uid != geteuid ()))
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1233 {
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1234 /* We're running under su, apparently. */
99215
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
1235 socket_name = alloca (strlen (tmpdir) + strlen (server_name)
e0e326adf3bc * emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents: 99209
diff changeset
1236 + EXTRA_SPACE);
99209
01e8c1513572 * server.el, emacsclient.c: Use TMPDIR (default /tmp) instead of hardcoded /tmp.
Juanma Barranquero <lekktu@gmail.com>
parents: 98676
diff changeset
1237 sprintf (socket_name, "%s/emacs%d/%s",
01e8c1513572 * server.el, emacsclient.c: Use TMPDIR (default /tmp) instead of hardcoded /tmp.
Juanma Barranquero <lekktu@gmail.com>
parents: 98676
diff changeset
1238 tmpdir, (int) pw->pw_uid, server_name);
53646
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1239
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1240 if (strlen (socket_name) < sizeof (server.sun_path))
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1241 strcpy (server.sun_path, socket_name);
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1242 else
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1243 {
87669
b8b050fde307 Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents: 87668
diff changeset
1244 message (TRUE, "%s: socket-name %s too long\n",
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1245 progname, socket_name);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 53813
diff changeset
1246 exit (EXIT_FAILURE);
53646
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1247 }
8c55b1b400d5 (main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53543
diff changeset
1248
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1249 sock_status = socket_status (server.sun_path);
83010
82554ed1aed8 Merged in changes from CVS HEAD
Karoly Lorentey <lorentey@elte.hu>
parents: 83005 53543
diff changeset
1250 saved_errno = errno;
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1251 }
53693
04e9ebd16fcd (main): Restore errno from saved_errno,
Richard M. Stallman <rms@gnu.org>
parents: 53646
diff changeset
1252 else
04e9ebd16fcd (main): Restore errno from saved_errno,
Richard M. Stallman <rms@gnu.org>
parents: 53646
diff changeset
1253 errno = saved_errno;
27474
ed3668c0295a (socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 27305
diff changeset
1254 }
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 478
diff changeset
1255 }
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
1256
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1257 switch (sock_status)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1258 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1259 case 1:
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1260 /* There's a socket, but it isn't owned by us. This is OK if
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1261 we are root. */
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1262 if (0 != geteuid ())
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1263 {
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1264 message (TRUE, "%s: Invalid socket owner\n", progname);
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1265 return INVALID_SOCKET;
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1266 }
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1267 break;
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
1268
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1269 case 2:
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1270 /* `stat' failed */
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1271 if (saved_errno == ENOENT)
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1272 message (TRUE,
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1273 "%s: can't find socket; have you started the server?\n\
48627
c91408365d35 (main): Tell user how to start server within Emacs if socket could not
Stephen Eglen <stephen@gnu.org>
parents: 48617
diff changeset
1274 To start the server in Emacs, type \"M-x server-start\".\n",
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1275 progname);
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1276 else
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1277 message (TRUE, "%s: can't stat %s: %s\n",
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1278 progname, server.sun_path, strerror (saved_errno));
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1279 return INVALID_SOCKET;
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1280 }
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 478
diff changeset
1281 }
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282
3595
e10f7473d2e3 * emacsserver.c (main): When we're passing a `struct sockaddr_un'
Jim Blandy <jimb@redhat.com>
parents: 1031
diff changeset
1283 if (connect (s, (struct sockaddr *) &server, strlen (server.sun_path) + 2)
e10f7473d2e3 * emacsserver.c (main): When we're passing a `struct sockaddr_un'
Jim Blandy <jimb@redhat.com>
parents: 1031
diff changeset
1284 < 0)
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 {
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
1286 message (TRUE, "%s: connect: %s\n", progname, strerror (errno));
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1287 return INVALID_SOCKET;
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 }
15758
7e712d42d371 (main) [HAVE_SOCKETS]: Use two separate stdio
Richard M. Stallman <rms@gnu.org>
parents: 14610
diff changeset
1289
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1290 return s;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1291 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1292 #endif /* ! NO_SOCKETS_IN_FILE_SYSTEM */
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1293
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1294 HSOCKET
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1295 set_socket ()
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1296 {
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1297 HSOCKET s;
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1298
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1299 INITIALIZE ();
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1300
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1301 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1302 /* Explicit --socket-name argument. */
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1303 if (socket_name)
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1304 {
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1305 s = set_local_socket ();
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1306 if ((s != INVALID_SOCKET) || alternate_editor)
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1307 return s;
87668
98943cbe28fb Daniel Hackney <dan at haxney.org> (tiny change)
Glenn Morris <rgm@gnu.org>
parents: 87649
diff changeset
1308 message (TRUE, "%s: error accessing socket \"%s\"\n",
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1309 progname, socket_name);
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1310 exit (EXIT_FAILURE);
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1311 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1312 #endif
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1313
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1314 /* Explicit --server-file arg or EMACS_SERVER_FILE variable. */
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1315 if (!server_file)
79232
7970215aa6e5 Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents: 79226
diff changeset
1316 server_file = egetenv ("EMACS_SERVER_FILE");
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1317
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1318 if (server_file)
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1319 {
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1320 s = set_tcp_socket ();
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1321 if ((s != INVALID_SOCKET) || alternate_editor)
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1322 return s;
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1323
87669
b8b050fde307 Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents: 87668
diff changeset
1324 message (TRUE, "%s: error accessing server file \"%s\"\n",
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1325 progname, server_file);
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1326 exit (EXIT_FAILURE);
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1327 }
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1328
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1329 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1330 /* Implicit local socket. */
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1331 s = set_local_socket ();
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1332 if (s != INVALID_SOCKET)
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1333 return s;
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1334 #endif
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1335
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1336 /* Implicit server file. */
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1337 server_file = "server";
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1338 s = set_tcp_socket ();
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1339 if ((s != INVALID_SOCKET) || alternate_editor)
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1340 return s;
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1341
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1342 /* No implicit or explicit socket, and no alternate editor. */
74118
bee73d83d967 Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents: 73978
diff changeset
1343 message (TRUE, "%s: No socket or alternate editor. Please use:\n\n"
73765
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1344 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1345 "\t--socket-name\n"
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1346 #endif
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1347 "\t--server-file (or environment variable EMACS_SERVER_FILE)\n\
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1348 \t--alternate-editor (or environment variable ALTERNATE_EDITOR)\n",
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1349 progname);
bcb5c0f9a466 (longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents: 73657
diff changeset
1350 exit (EXIT_FAILURE);
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1351 }
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1352
74729
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1353 #ifdef WINDOWSNT
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1354 FARPROC set_fg; /* Pointer to AllowSetForegroundWindow. */
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1355 FARPROC get_wc; /* Pointer to RealGetWindowClassA. */
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1356
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1357 BOOL CALLBACK
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1358 w32_find_emacs_process (hWnd, lParam)
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1359 HWND hWnd;
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1360 LPARAM lParam;
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1361 {
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1362 DWORD pid;
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1363 char class[6];
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1364
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1365 /* Reject any window not of class "Emacs". */
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1366 if (! get_wc (hWnd, class, sizeof (class))
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1367 || strcmp (class, "Emacs"))
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1368 return TRUE;
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1369
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1370 /* We only need the process id, not the thread id. */
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1371 (void) GetWindowThreadProcessId (hWnd, &pid);
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1372
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1373 /* Not the one we're looking for. */
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1374 if (pid != (DWORD) emacs_pid) return TRUE;
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1375
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1376 /* OK, let's raise it. */
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1377 set_fg (emacs_pid);
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1378
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1379 /* Stop enumeration. */
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1380 return FALSE;
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1381 }
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1382
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1383 /*
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1384 * Search for a window of class "Emacs" and owned by a process with
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1385 * process id = emacs_pid. If found, allow it to grab the focus.
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1386 */
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1387 void
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1388 w32_give_focus ()
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1389 {
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1390 HMODULE hUser32;
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1391
75956
6ef0c279b18c Comment changes and clarifications.
Juanma Barranquero <lekktu@gmail.com>
parents: 75348
diff changeset
1392 /* It shouldn't happen when dealing with TCP sockets. */
74729
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1393 if (!emacs_pid) return;
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1394
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1395 if (!(hUser32 = LoadLibrary ("user32.dll"))) return;
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1396
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1397 /* Modern Windows restrict which processes can set the foreground window.
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1398 emacsclient can allow Emacs to grab the focus by calling the function
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1399 AllowSetForegroundWindow. Unfortunately, older Windows (W95, W98 and
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1400 NT) lack this function, so we have to check its availability. */
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1401 if ((set_fg = GetProcAddress (hUser32, "AllowSetForegroundWindow"))
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1402 && (get_wc = GetProcAddress (hUser32, "RealGetWindowClassA")))
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1403 EnumWindows (w32_find_emacs_process, (LPARAM) 0);
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1404
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1405 FreeLibrary (hUser32);
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1406 }
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1407 #endif
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1408
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1409 int
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1410 main (argc, argv)
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1411 int argc;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1412 char **argv;
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1413 {
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1414 int i, rl, needlf = 0;
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1415 char *cwd, *str;
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1416 char string[BUFSIZ+1];
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1417
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1418 main_argv = argv;
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1419 progname = argv[0];
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1420
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1421 /* Process options. */
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1422 decode_options (argc, argv);
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1423
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1424 if ((argc - optind < 1) && !eval && current_frame)
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1425 {
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1426 message (TRUE, "%s: file name or argument required\n"
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1427 "Try `%s --help' for more information\n",
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1428 progname, progname);
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1429 exit (EXIT_FAILURE);
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 }
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431
83601
8365dbf64d14 (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83600
diff changeset
1432 if ((emacs_socket = set_socket ()) == INVALID_SOCKET)
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1433 fail ();
15758
7e712d42d371 (main) [HAVE_SOCKETS]: Use two separate stdio
Richard M. Stallman <rms@gnu.org>
parents: 14610
diff changeset
1434
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1435
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1436 cwd = get_current_dir_name ();
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 if (cwd == 0)
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 {
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 /* getwd puts message in STRING if it fails. */
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1440 message (TRUE, "%s: %s\n", progname,
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1441 "Cannot get current working directory");
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
1442 fail ();
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 }
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444
74342
c6cb776ffbb7 (emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 74341
diff changeset
1445 #ifdef WINDOWSNT
74729
303099bc66d9 [WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents: 74645
diff changeset
1446 w32_give_focus ();
74342
c6cb776ffbb7 (emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 74341
diff changeset
1447 #endif
c6cb776ffbb7 (emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 74341
diff changeset
1448
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1449 /* Send over our environment and current directory. */
83403
51eb0aa362f3 Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83371
diff changeset
1450 if (!current_frame)
51eb0aa362f3 Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83371
diff changeset
1451 {
51eb0aa362f3 Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83371
diff changeset
1452 extern char **environ;
51eb0aa362f3 Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83371
diff changeset
1453 int i;
51eb0aa362f3 Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83371
diff changeset
1454 for (i = 0; environ[i]; i++)
51eb0aa362f3 Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83371
diff changeset
1455 {
51eb0aa362f3 Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83371
diff changeset
1456 char *name = xstrdup (environ[i]);
51eb0aa362f3 Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83371
diff changeset
1457 char *value = strchr (name, '=');
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1458 send_to_emacs (emacs_socket, "-env ");
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1459 quote_argument (emacs_socket, environ[i]);
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1460 send_to_emacs (emacs_socket, " ");
83403
51eb0aa362f3 Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 83371
diff changeset
1461 }
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1462 send_to_emacs (emacs_socket, "-dir ");
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1463 quote_argument (emacs_socket, cwd);
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1464 send_to_emacs (emacs_socket, "/");
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1465 send_to_emacs (emacs_socket, " ");
83499
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
1466 }
0fe580113f72 Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
1467
83246
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1468 retry:
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
1469 if (nowait)
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1470 send_to_emacs (emacs_socket, "-nowait ");
16061
a1290c4159b5 (quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16030
diff changeset
1471
83367
2b5fb28780be Fix `emacsclient -ne '(+ 2 2)'' (reported by Han Boetes), and clean up some corner cases in Emacs server.
Karoly Lorentey <lorentey@elte.hu>
parents: 83353
diff changeset
1472 if (current_frame)
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1473 send_to_emacs (emacs_socket, "-current-frame ");
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
1474
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
1475 if (display)
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 {
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1477 send_to_emacs (emacs_socket, "-display ");
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1478 quote_argument (emacs_socket, display);
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1479 send_to_emacs (emacs_socket, " ");
52635
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1480 }
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1481
99254
8cade16f7427 (main): If using the current frame, send tty information to Emacs in
Chong Yidong <cyd@stupidchicken.com>
parents: 99215
diff changeset
1482 /* If using the current frame, send tty information to Emacs anyway.
8cade16f7427 (main): If using the current frame, send tty information to Emacs in
Chong Yidong <cyd@stupidchicken.com>
parents: 99215
diff changeset
1483 In daemon mode, Emacs may need to occupy this tty if no other
8cade16f7427 (main): If using the current frame, send tty information to Emacs in
Chong Yidong <cyd@stupidchicken.com>
parents: 99215
diff changeset
1484 frame is available. */
99297
4069e1395eca (main): Don't force sending tty when in eval mode.
Andreas Schwab <schwab@suse.de>
parents: 99254
diff changeset
1485 if (tty || (current_frame && !eval))
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1486 {
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1487 char *tty_type, *tty_name;
83064
e7e9448cb3a0 Make emacsclient refuse to create a frame inside an Emacs term buffer.
Karoly Lorentey <lorentey@elte.hu>
parents: 83052
diff changeset
1488
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1489 if (find_tty (&tty_type, &tty_name, !tty))
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1490 {
83590
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
1491 #if !defined (NO_SOCKETS_IN_FILE_SYSTEM)
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1492 init_signals ();
83590
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
1493 #endif
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1494 send_to_emacs (emacs_socket, "-tty ");
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1495 quote_argument (emacs_socket, tty_name);
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1496 send_to_emacs (emacs_socket, " ");
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1497 quote_argument (emacs_socket, tty_type);
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1498 send_to_emacs (emacs_socket, " ");
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1499 }
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 52848
diff changeset
1500 }
83043
78a785f205ea Added -w option to emacsclient for opening a new X frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83037
diff changeset
1501
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1502 if (!current_frame && !tty)
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1503 send_to_emacs (emacs_socket, "-window-system ");
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1504
52635
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1505 if ((argc - optind > 0))
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1506 {
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1507 for (i = optind; i < argc; i++)
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 {
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1509 int relative = 0;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1510
52635
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1511 if (eval)
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1512 {
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1513 /* Don't prepend cwd or anything like that. */
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1514 send_to_emacs (emacs_socket, "-eval ");
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1515 quote_argument (emacs_socket, argv[i]);
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1516 send_to_emacs (emacs_socket, " ");
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1517 continue;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1518 }
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1519
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1520 if (*argv[i] == '+')
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1521 {
52635
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1522 char *p = argv[i] + 1;
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1523 while (isdigit ((unsigned char) *p) || *p == ':') p++;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1524 if (*p == 0)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1525 {
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1526 send_to_emacs (emacs_socket, "-position ");
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1527 quote_argument (emacs_socket, argv[i]);
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1528 send_to_emacs (emacs_socket, " ");
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1529 continue;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1530 }
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1531 else
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1532 relative = 1;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1533 }
91982
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1534 else if (! file_name_absolute_p (argv[i]))
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1535 #ifndef WINDOWSNT
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1536 relative = 1;
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1537 #else
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1538 /* Call GetFullPathName so filenames of the form X:Y, where X is
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1539 a valid drive designator, are interpreted as drive:path, not
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1540 file:stream, and treated as absolute.
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1541 The user can still pass a file:stream if desired (for example,
91984
b9d0a7968c0a Fix typo in comment.
Juanma Barranquero <lekktu@gmail.com>
parents: 91982
diff changeset
1542 .\X:Y), but it is not very useful, as Emacs currently does a
98245
dd5392c63164 (main): Fix a typo in a comment.
Eli Zaretskii <eliz@gnu.org>
parents: 98244
diff changeset
1543 very bad job of dealing with NTFS streams. */
91982
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1544 {
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1545 char *filename = (char *) xmalloc (MAX_PATH);
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1546 DWORD size;
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1547
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1548 size = GetFullPathName (argv[i], MAX_PATH, filename, NULL);
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1549 if (size > 0 && size < MAX_PATH)
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1550 argv[i] = filename;
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1551 else
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1552 {
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1553 relative = 1;
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1554 free (filename);
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1555 }
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1556 }
098ab8b8e2cb (main) [WINDOWSNT]: Understand DRIVE:NAME, where
Juanma Barranquero <lekktu@gmail.com>
parents: 91852
diff changeset
1557 #endif
52635
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1558
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1559 send_to_emacs (emacs_socket, "-file ");
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1560 if (relative)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1561 {
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1562 quote_argument (emacs_socket, cwd);
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1563 send_to_emacs (emacs_socket, "/");
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1564 }
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1565 quote_argument (emacs_socket, argv[i]);
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1566 send_to_emacs (emacs_socket, " ");
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1567 }
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 }
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1569 else if (eval)
52635
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1570 {
99333
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1571 /* Read expressions interactively. */
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1572 while ((str = fgets (string, BUFSIZ, stdin)))
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1573 {
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1574 send_to_emacs (emacs_socket, "-eval ");
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1575 quote_argument (emacs_socket, str);
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1576 }
a999ab783eff (window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents: 99311
diff changeset
1577 send_to_emacs (emacs_socket, " ");
52635
9963e9da5850 (quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents: 52532
diff changeset
1578 }
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 53813
diff changeset
1579
83603
54df157e987d (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83601
diff changeset
1580 send_to_emacs (emacs_socket, "\n");
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581
83165
ed82e09208c9 Fix --no-wait in emacsclient (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83121
diff changeset
1582 /* Wait for an answer. */
ed82e09208c9 Fix --no-wait in emacsclient (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83121
diff changeset
1583 if (!eval && !tty && !nowait)
47647
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
1584 {
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
1585 printf ("Waiting for Emacs...");
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
1586 needlf = 2;
5498210ad40d Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47515
diff changeset
1587 }
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 fflush (stdout);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1589 fsync (1);
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590
47515
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
1591 /* Now, wait for an answer and print any messages. */
83601
8365dbf64d14 (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83600
diff changeset
1592 while ((rl = recv (emacs_socket, string, BUFSIZ, 0)) > 0)
47515
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
1593 {
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1594 char *p;
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1595 string[rl] = '\0';
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1596
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1597 p = string + strlen (string) - 1;
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1598 while (p > string && *p == '\n')
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1599 *p-- = 0;
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1600
84667
f2c11a35b0e3 (current_frame): Change the default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83666
diff changeset
1601 if (strprefix ("-emacs-pid ", string))
83043
78a785f205ea Added -w option to emacsclient for opening a new X frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83037
diff changeset
1602 {
83246
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1603 /* -emacs-pid PID: The process id of the Emacs process. */
83043
78a785f205ea Added -w option to emacsclient for opening a new X frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83037
diff changeset
1604 emacs_pid = strtol (string + strlen ("-emacs-pid"), NULL, 10);
78a785f205ea Added -w option to emacsclient for opening a new X frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83037
diff changeset
1605 }
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1606 else if (strprefix ("-window-system-unsupported ", string))
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1607 {
83246
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1608 /* -window-system-unsupported: Emacs was compiled without X
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1609 support. Try again on the terminal. */
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1610 nowait = 0;
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1611 tty = 1;
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1612 goto retry;
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1613 }
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1614 else if (strprefix ("-print ", string))
82995
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82994
diff changeset
1615 {
83246
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1616 /* -print STRING: Print STRING on the terminal. */
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1617 str = unquote_argument (string + strlen ("-print "));
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1618 if (needlf)
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1619 printf ("\n");
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1620 printf ("%s", str);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1621 needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
83043
78a785f205ea Added -w option to emacsclient for opening a new X frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83037
diff changeset
1622 }
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1623 else if (strprefix ("-error ", string))
83043
78a785f205ea Added -w option to emacsclient for opening a new X frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83037
diff changeset
1624 {
83246
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1625 /* -error DESCRIPTION: Signal an error on the terminal. */
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1626 str = unquote_argument (string + strlen ("-error "));
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1627 if (needlf)
83043
78a785f205ea Added -w option to emacsclient for opening a new X frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83037
diff changeset
1628 printf ("\n");
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1629 fprintf (stderr, "*ERROR*: %s", str);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1630 needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1631 }
84677
421e6c54ace8 (main) [SIGSTOP]: Change conditional from WINDOWSNT.
Jason Rumney <jasonr@gnu.org>
parents: 84667
diff changeset
1632 #ifdef SIGSTOP
83551
d9dc7e67ad3f Fix various suspend-related bugs in emacsclient. (Report & patch by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83550
diff changeset
1633 else if (strprefix ("-suspend ", string))
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1634 {
83246
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1635 /* -suspend: Suspend this terminal, i.e., stop the process. */
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1636 if (needlf)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1637 printf ("\n");
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1638 needlf = 0;
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1639 kill (0, SIGSTOP);
82995
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82994
diff changeset
1640 }
83590
dab011361c2a (s): Remove.
Jason Rumney <jasonr@gnu.org>
parents: 83556
diff changeset
1641 #endif
82995
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82994
diff changeset
1642 else
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82994
diff changeset
1643 {
83246
5bc762f84335 Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents: 83165
diff changeset
1644 /* Unknown command. */
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1645 if (needlf)
82995
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82994
diff changeset
1646 printf ("\n");
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1647 printf ("*ERROR*: Unknown message: %s", string);
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83533 74342
diff changeset
1648 needlf = string[0] == '\0' ? needlf : string[strlen (string) - 1] != '\n';
82995
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82994
diff changeset
1649 }
47515
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
1650 }
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
1651
47515
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
1652 if (needlf)
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
1653 printf ("\n");
6ee937dcfe16 (quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42412
diff changeset
1654 fflush (stdout);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83064
diff changeset
1655 fsync (1);
42176
1f5dbeefa536 Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 39723
diff changeset
1656
83601
8365dbf64d14 (emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents: 83600
diff changeset
1657 CLOSE_SOCKET (emacs_socket);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 53813
diff changeset
1658 return EXIT_SUCCESS;
412
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1659 }
3cc2c5136064 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1660
73617
7af864af10b6 [WINDOWSNT]: Define HAVE_INET_SOCKETS.
Juanma Barranquero <lekktu@gmail.com>
parents: 73601
diff changeset
1661 #endif /* HAVE_SOCKETS && HAVE_INET_SOCKETS */
73562
368665ce6f35 Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents: 72005
diff changeset
1662
5527
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1663
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1664 #ifndef HAVE_STRERROR
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1665 char *
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1666 strerror (errnum)
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1667 int errnum;
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1668 {
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1669 extern char *sys_errlist[];
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1670 extern int sys_nerr;
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1671
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1672 if (errnum >= 0 && errnum < sys_nerr)
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1673 return sys_errlist[errnum];
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1674 return (char *) "Unknown error";
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1675 }
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1676
51451a050975 [! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents: 5522
diff changeset
1677 #endif /* ! HAVE_STRERROR */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52069
diff changeset
1678
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52069
diff changeset
1679 /* arch-tag: f39bb9c4-73eb-477e-896d-50832e2ca9a7
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52069
diff changeset
1680 (do not change this comment) */
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 53813
diff changeset
1681
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 53813
diff changeset
1682 /* emacsclient.c ends here */