Mercurial > emacs
annotate lib-src/emacsclient.c @ 109515:60055a69c9ae
Regenerate configure.
author | Ken Brown <kbrown@cornell.edu> |
---|---|
date | Sat, 24 Jul 2010 18:06:03 -0400 |
parents | 09a43f890565 |
children | 68ca98ae70fb |
rev | line source |
---|---|
493 | 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, |
106815 | 3 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
412 | 4 |
5 This file is part of GNU Emacs. | |
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 | 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 | 11 |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
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 | 19 |
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 | 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 |
100418
9ad0989a1e66
Include syswait.h instead of sys/types.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100364
diff
changeset
|
44 # include "syswait.h" |
73896
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 |
100154 | 50 # include <arpa/inet.h> |
100149
61db5ca5de78
Include <darpa/inet.h>.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
99334
diff
changeset
|
51 |
73578
e193b6a3f379
Fixes to emacsclient.c for GNU/Linux.
Juanma Barranquero <lekktu@gmail.com>
parents:
73562
diff
changeset
|
52 # define INVALID_SOCKET -1 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
53 # define HSOCKET int |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
54 # define CLOSE_SOCKET close |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
55 # define INITIALIZE() |
73585
7d264c036b25
[WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73583
diff
changeset
|
56 |
100364
1cbff49af513
(WCONTINUED): New compatibility define for older systems.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100344
diff
changeset
|
57 # ifndef WCONTINUED |
1cbff49af513
(WCONTINUED): New compatibility define for older systems.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100344
diff
changeset
|
58 # define WCONTINUED 8 |
1cbff49af513
(WCONTINUED): New compatibility define for older systems.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100344
diff
changeset
|
59 # endif |
1cbff49af513
(WCONTINUED): New compatibility define for older systems.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100344
diff
changeset
|
60 |
73585
7d264c036b25
[WINDOWSNT]: Include <malloc.h> and <stdlib.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73583
diff
changeset
|
61 #endif /* !WINDOWSNT */ |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
62 |
3595
e10f7473d2e3
* emacsserver.c (main): When we're passing a `struct sockaddr_un'
Jim Blandy <jimb@redhat.com>
parents:
1031
diff
changeset
|
63 #undef signal |
412 | 64 |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
65 #include <stdarg.h> |
42176
1f5dbeefa536
Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents:
39723
diff
changeset
|
66 #include <ctype.h> |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
67 #include <stdio.h> |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
68 #include "getopt.h" |
21431
a080769e8f7d
Move inclusion of unistd.h to top, else fails on
Dave Love <fx@gnu.org>
parents:
21387
diff
changeset
|
69 #ifdef HAVE_UNISTD_H |
a080769e8f7d
Move inclusion of unistd.h to top, else fails on
Dave Love <fx@gnu.org>
parents:
21387
diff
changeset
|
70 #include <unistd.h> |
a080769e8f7d
Move inclusion of unistd.h to top, else fails on
Dave Love <fx@gnu.org>
parents:
21387
diff
changeset
|
71 #endif |
412 | 72 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
73 #ifdef WINDOWSNT |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
74 # include <io.h> |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
75 #else /* not WINDOWSNT */ |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
76 # include <pwd.h> |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
77 #endif /* not WINDOWSNT */ |
83500
0a651d0085ee
Fix compilation error on OpenBSD. (Reported by Han Boetes.)
Karoly Lorentey <lorentey@elte.hu>
parents:
83499
diff
changeset
|
78 #include <sys/stat.h> |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
79 |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82994
diff
changeset
|
80 #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
|
81 #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
|
82 |
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
|
83 |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
84 char *getenv (const char *), *getwd (char *); |
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
|
85 char *(getcwd) (); |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
86 |
79232
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
87 #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
|
88 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
|
89 #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
|
90 #else |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
91 #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
|
92 #endif |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
93 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
94 #ifndef VERSION |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
95 #define VERSION "unspecified" |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
96 #endif |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
97 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
98 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
99 #ifndef EXIT_SUCCESS |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
100 #define EXIT_SUCCESS 0 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
101 #endif |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
102 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
103 #ifndef EXIT_FAILURE |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
104 #define EXIT_FAILURE 1 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
105 #endif |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
106 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
107 #ifndef FALSE |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
108 #define FALSE 0 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
109 #endif |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
110 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
111 #ifndef TRUE |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
112 #define TRUE 1 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
113 #endif |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
114 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
115 #ifndef NO_RETURN |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
116 #define NO_RETURN |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
117 #endif |
99215
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
118 |
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
119 /* Additional space when allocating buffers for filenames, etc. */ |
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
120 #define EXTRA_SPACE 100 |
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
121 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
122 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
123 /* Name used to invoke this program. */ |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
124 char *progname; |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
125 |
53341 | 126 /* The second argument to main. */ |
127 char **main_argv; | |
128 | |
16146
a649abfefbb1
(longopts): Change nowait to no-wait.
Richard M. Stallman <rms@gnu.org>
parents:
16074
diff
changeset
|
129 /* 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
|
130 int nowait = 0; |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
131 |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
132 /* Nonzero means args are expressions to be evaluated. --eval. */ |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
133 int eval = 0; |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
134 |
84667
f2c11a35b0e3
(current_frame): Change the default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83666
diff
changeset
|
135 /* 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
|
136 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
|
137 |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
138 /* The display on which Emacs should work. --display. */ |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
139 char *display = NULL; |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
140 |
108828
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
141 /* The parent window ID, if we are opening a frame via XEmbed. */ |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
142 char *parent_id = NULL; |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
143 |
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
|
144 /* 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
|
145 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
|
146 |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
147 /* 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
|
148 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
|
149 const char *alternate_editor = NULL; |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
150 |
52532 | 151 /* 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
|
152 char *socket_name = NULL; |
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
153 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
154 /* If non-NULL, the filename of the authentication file. */ |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
155 char *server_file = NULL; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
156 |
74342
c6cb776ffbb7
(emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents:
74341
diff
changeset
|
157 /* PID of the Emacs server process. */ |
c6cb776ffbb7
(emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents:
74341
diff
changeset
|
158 int emacs_pid = 0; |
c6cb776ffbb7
(emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents:
74341
diff
changeset
|
159 |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
160 void print_help_and_exit (void) NO_RETURN; |
109511
09a43f890565
Add NO_RETURN specifiers to functions in lib-src.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109480
diff
changeset
|
161 void fail (void) NO_RETURN; |
09a43f890565
Add NO_RETURN specifiers to functions in lib-src.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109480
diff
changeset
|
162 |
21387
4812cf228971
Include <stdlib.h> and <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents:
19582
diff
changeset
|
163 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
164 struct option longopts[] = |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
165 { |
16146
a649abfefbb1
(longopts): Change nowait to no-wait.
Richard M. Stallman <rms@gnu.org>
parents:
16074
diff
changeset
|
166 { "no-wait", no_argument, NULL, 'n' }, |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
167 { "eval", no_argument, NULL, 'e' }, |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
168 { "help", no_argument, NULL, 'H' }, |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
169 { "version", no_argument, NULL, 'V' }, |
82994
44ffe551079c
Fix longopts option name for --tty.
Karoly Lorentey <lorentey@elte.hu>
parents:
82991
diff
changeset
|
170 { "tty", no_argument, NULL, 't' }, |
98676
d63a9c87e0ac
(longopts, print_help_and_exit): Add -nw.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98245
diff
changeset
|
171 { "nw", no_argument, NULL, 't' }, |
84667
f2c11a35b0e3
(current_frame): Change the default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83666
diff
changeset
|
172 { "create-frame", no_argument, NULL, 'c' }, |
47515
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
173 { "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
|
174 #ifndef NO_SOCKETS_IN_FILE_SYSTEM |
52479
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
175 { "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
|
176 #endif |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
177 { "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
|
178 #ifndef WINDOWSNT |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
179 { "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
|
180 #endif |
108828
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
181 { "parent-id", required_argument, NULL, 'p' }, |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
182 { 0, 0, 0, 0 } |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
183 }; |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
184 |
79232
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 /* 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
|
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 long * |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
189 xmalloc (unsigned int size) |
79232
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
190 { |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
191 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
|
192 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
|
193 { |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
194 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
|
195 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
|
196 } |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
197 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
|
198 } |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
199 |
83103
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
200 /* 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
|
201 |
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
202 char * |
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
203 xstrdup (const char *s) |
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
204 { |
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
205 char *result = strdup (s); |
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
206 if (result == NULL) |
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
207 { |
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
208 perror ("strdup"); |
83121 | 209 exit (EXIT_FAILURE); |
83103
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
210 } |
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
211 return result; |
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
212 } |
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
213 |
83499
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
214 /* From sysdep.c */ |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
215 #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
|
216 |
84681
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
217 /* From lisp.h */ |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
218 #ifndef DIRECTORY_SEP |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
219 #define DIRECTORY_SEP '/' |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
220 #endif |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
221 #ifndef IS_DIRECTORY_SEP |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
222 #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
|
223 #endif |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
224 #ifndef IS_DEVICE_SEP |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
225 #ifndef DEVICE_SEP |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
226 #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
|
227 #else |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
228 #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
|
229 #endif |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
230 #endif |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
231 #ifndef IS_ANY_SEP |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
232 #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
|
233 #endif |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
234 |
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
235 |
83499
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
236 /* 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
|
237 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
|
238 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
|
239 char* |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
240 get_current_dir_name (void) |
83499
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
241 { |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
242 char *buf; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
243 char *pwd; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
244 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
|
245 /* 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
|
246 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
|
247 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
|
248 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
|
249 && (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
|
250 && 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
|
251 && stat (".", &dotstat) == 0 |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
252 && 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
|
253 && 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
|
254 #ifdef MAXPATHLEN |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
255 && strlen (pwd) < MAXPATHLEN |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
256 #endif |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
257 ) |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
258 { |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
259 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
|
260 if (!buf) |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
261 return NULL; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
262 strcpy (buf, pwd); |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
263 } |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
264 #ifdef HAVE_GETCWD |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
265 else |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
266 { |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
267 size_t buf_size = 1024; |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
268 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
|
269 if (!buf) |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
270 return NULL; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
271 for (;;) |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
272 { |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
273 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
|
274 break; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
275 if (errno != ERANGE) |
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 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
|
278 free (buf); |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
279 errno = tmp_errno; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
280 return NULL; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
281 } |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
282 buf_size *= 2; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
283 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
|
284 if (!buf) |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
285 return NULL; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
286 } |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
287 } |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
288 #else |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
289 else |
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 /* We need MAXPATHLEN here. */ |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
292 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
|
293 if (!buf) |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
294 return NULL; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
295 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
|
296 { |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
297 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
|
298 free (buf); |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
299 errno = tmp_errno; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
300 return NULL; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
301 } |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
302 } |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
303 #endif |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
304 return buf; |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
305 } |
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
306 #endif |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
307 |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
308 #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
|
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 #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
|
311 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
312 /* 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
|
313 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
|
314 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
|
315 char * |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
316 w32_get_resource (HKEY predefined, char *key, LPDWORD type) |
79232
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 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
|
319 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
|
320 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
|
321 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
322 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
|
323 { |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
324 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
|
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 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
|
327 |
99215
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
328 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
|
329 || (*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
|
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 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
|
332 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
|
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 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
336 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
|
337 } |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
338 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
339 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
|
340 } |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
341 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
342 /* |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
343 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
|
344 |
106818
a3da62473e24
Fix typos in comments and ChangeLogs.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
345 This is needed to duplicate Emacs's behavior, which is to look for environment |
79232
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
346 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
|
347 */ |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
348 char * |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
349 w32_getenv (char *envvar) |
79232
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 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
|
352 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
|
353 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
354 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
|
355 /* 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
|
356 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
|
357 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
358 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
|
359 ! (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
|
360 { |
9e2c3c623db2
(main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents:
99297
diff
changeset
|
361 /* "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
|
362 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
|
363 return xstrdup ("w32console"); |
9e2c3c623db2
(main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents:
99297
diff
changeset
|
364 /* 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
|
365 return NULL; |
9e2c3c623db2
(main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents:
99297
diff
changeset
|
366 } |
79232
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
367 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
368 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
|
369 /* 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
|
370 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
|
371 |
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 (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
|
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 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
|
375 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
376 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
|
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 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
|
379 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
|
380 { |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
381 /* 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
|
382 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
|
383 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
|
384 } |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
385 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
386 /* 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
|
387 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
|
388 } |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
389 } |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
390 |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
391 /* 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
|
392 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
|
393 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
|
394 } |
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
395 |
103641
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
396 void |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
397 w32_set_user_model_id (void) |
103641
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
398 { |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
399 HMODULE shell; |
103716
7bad97f82eb6
* w32term.c (w32_initialize): Use standard types.
Jason Rumney <jasonr@gnu.org>
parents:
103641
diff
changeset
|
400 HRESULT (WINAPI * set_user_model) (wchar_t * id); |
103641
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
401 |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
402 /* On Windows 7 and later, we need to set the user model ID |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
403 to associate emacsclient launched files with Emacs frames |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
404 in the UI. */ |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
405 shell = LoadLibrary("shell32.dll"); |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
406 if (shell) |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
407 { |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
408 set_user_model |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
409 = (void *) GetProcAddress (shell, |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
410 "SetCurrentProcessExplicitAppUserModelID"); |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
411 /* If the function is defined, then we are running on Windows 7 |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
412 or newer, and the UI uses this to group related windows |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
413 together. Since emacs, runemacs, emacsclient are related, we |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
414 want them grouped even though the executables are different, |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
415 so we need to set a consistent ID between them. */ |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
416 if (set_user_model) |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
417 set_user_model (L"GNU.Emacs"); |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
418 |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
419 FreeLibrary (shell); |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
420 } |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
421 } |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
422 |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
423 int |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
424 w32_window_app (void) |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
425 { |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
426 static int window_app = -1; |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
427 char szTitle[MAX_PATH]; |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
428 |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
429 if (window_app < 0) |
78904
5025525d6c9d
(w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents:
78257
diff
changeset
|
430 { |
5025525d6c9d
(w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents:
78257
diff
changeset
|
431 /* 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
|
432 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
|
433 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
|
434 if (window_app) |
5025525d6c9d
(w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents:
78257
diff
changeset
|
435 InitCommonControls(); |
5025525d6c9d
(w32_window_app): Init common controls when windowed.
Jason Rumney <jasonr@gnu.org>
parents:
78257
diff
changeset
|
436 } |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
437 |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
438 return window_app; |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
439 } |
83600
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
440 |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
441 /* |
84681
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
442 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
|
443 |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
444 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
|
445 the Microsoft libraries: they concatenate the arguments together without |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
446 quoting special characters, and pass the result to CreateProcess, with |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
447 predictably bad results. By contrast, POSIX execvp passes the arguments |
83600
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
448 directly into the argv array of the child process. |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
449 */ |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
450 int |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
451 w32_execvp (const char *path, char **argv) |
83600
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
452 { |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
453 int i; |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
454 |
83600
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
455 /* Required to allow a .BAT script as alternate editor. */ |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
456 argv[0] = (char *) alternate_editor; |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
457 |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
458 for (i = 0; argv[i]; i++) |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
459 if (strchr (argv[i], ' ')) |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
460 { |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
461 char *quoted = alloca (strlen (argv[i]) + 3); |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
462 sprintf (quoted, "\"%s\"", argv[i]); |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
463 argv[i] = quoted; |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
464 } |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
465 |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
466 return execvp (path, argv); |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
467 } |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
468 |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
469 #undef execvp |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
470 #define execvp w32_execvp |
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
471 |
99311
9e2c3c623db2
(main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents:
99297
diff
changeset
|
472 /* 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
|
473 char * |
9e2c3c623db2
(main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents:
99297
diff
changeset
|
474 ttyname (int fd) |
9e2c3c623db2
(main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents:
99297
diff
changeset
|
475 { |
9e2c3c623db2
(main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents:
99297
diff
changeset
|
476 return "CONOUT$"; |
9e2c3c623db2
(main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents:
99297
diff
changeset
|
477 } |
9e2c3c623db2
(main) [WINDOWSNT]: Don't ifdef away the call to `ttyname'.
Eli Zaretskii <eliz@gnu.org>
parents:
99297
diff
changeset
|
478 |
83600
9aa8a3a78f9e
* emacsclient.c (s): Restore.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83590
diff
changeset
|
479 #endif /* WINDOWSNT */ |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
480 |
85691 | 481 /* Display a normal or error message. |
482 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
|
483 void |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
484 message (int is_error, char *message, ...) |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
485 { |
74342
c6cb776ffbb7
(emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents:
74341
diff
changeset
|
486 char msg [2048]; |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
487 va_list args; |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
488 |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
489 va_start (args, message); |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
490 vsprintf (msg, message, args); |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
491 va_end (args); |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
492 |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
493 #ifdef WINDOWSNT |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
494 if (w32_window_app ()) |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
495 { |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
496 if (is_error) |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
497 MessageBox (NULL, msg, "Emacsclient ERROR", MB_ICONERROR); |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
498 else |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
499 MessageBox (NULL, msg, "Emacsclient", MB_ICONINFORMATION); |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
500 } |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
501 else |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
502 #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
|
503 { |
32079f79e240
(message): Make sure the message is properly written even if it contains printf
Juanma Barranquero <lekktu@gmail.com>
parents:
74176
diff
changeset
|
504 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
|
505 |
32079f79e240
(message): Make sure the message is properly written even if it contains printf
Juanma Barranquero <lekktu@gmail.com>
parents:
74176
diff
changeset
|
506 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
|
507 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
|
508 } |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
509 } |
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
510 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
511 /* Decode the options from argv and argc. |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
512 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
|
513 |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
514 void |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
515 decode_options (int argc, char **argv) |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
516 { |
79232
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
517 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
|
518 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
519 while (1) |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
520 { |
98676
d63a9c87e0ac
(longopts, print_help_and_exit): Add -nw.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
98245
diff
changeset
|
521 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
|
522 #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>
diff
changeset
|
523 "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
|
524 #else |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
525 "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
|
526 #endif |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
527 longopts, 0); |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
528 |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
529 if (opt == EOF) |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
530 break; |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
531 |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
532 switch (opt) |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
533 { |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
534 case 0: |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
535 /* 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
|
536 long-named option. We should do nothing. */ |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
537 break; |
42176
1f5dbeefa536
Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents:
39723
diff
changeset
|
538 |
27305
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
539 case 'a': |
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
540 alternate_editor = optarg; |
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
541 break; |
42176
1f5dbeefa536
Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents:
39723
diff
changeset
|
542 |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
543 #ifndef NO_SOCKETS_IN_FILE_SYSTEM |
52479
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
544 case 's': |
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
545 socket_name = optarg; |
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
546 break; |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
547 #endif |
52479
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
548 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
549 case 'f': |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
550 server_file = optarg; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
551 break; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
552 |
88014
e830695cdb7f
(decode_options): Default to a NULL display, as Emacs-22.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87965
diff
changeset
|
553 /* 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
|
554 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
|
555 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
|
556 support. */ |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
557 case 'd': |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
558 display = optarg; |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
559 break; |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
560 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
561 case 'n': |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
562 nowait = 1; |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
563 break; |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
564 |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
565 case 'e': |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
566 eval = 1; |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
567 break; |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
568 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
569 case 'V': |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
570 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
|
571 exit (EXIT_SUCCESS); |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
572 break; |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
573 |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
574 case 't': |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
575 tty = 1; |
84715
e872fac85e8c
(decode_options): -t implies -c.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84681
diff
changeset
|
576 current_frame = 0; |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
577 break; |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
578 |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
579 case 'c': |
84667
f2c11a35b0e3
(current_frame): Change the default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83666
diff
changeset
|
580 current_frame = 0; |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
581 break; |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
582 |
108828
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
583 case 'p': |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
584 parent_id = optarg; |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
585 current_frame = 0; |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
586 break; |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
587 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
588 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
|
589 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
|
590 break; |
e5f56d47b52c
(print_help_and_exit): Print to stdout. Exit successfully. Added some blank
Juanma Barranquero <lekktu@gmail.com>
parents:
48627
diff
changeset
|
591 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
592 default: |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
593 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
|
594 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
|
595 break; |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
596 } |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
597 } |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
598 |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
599 /* 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
|
600 is provided, try $DISPLAY. |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
601 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
|
602 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
|
603 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
|
604 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
|
605 if (!current_frame && !tty && !display) |
101397
b4aa70dece55
* emacsclient.c (decode_options): Use a dummy display name under NS/Cocoa.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
100958
diff
changeset
|
606 { |
b4aa70dece55
* emacsclient.c (decode_options): Use a dummy display name under NS/Cocoa.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
100958
diff
changeset
|
607 display = egetenv ("DISPLAY"); |
b4aa70dece55
* emacsclient.c (decode_options): Use a dummy display name under NS/Cocoa.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
100958
diff
changeset
|
608 #ifdef NS_IMPL_COCOA |
b4aa70dece55
* emacsclient.c (decode_options): Use a dummy display name under NS/Cocoa.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
100958
diff
changeset
|
609 /* Under Cocoa, we don't really use displays the same way as in X, |
b4aa70dece55
* emacsclient.c (decode_options): Use a dummy display name under NS/Cocoa.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
100958
diff
changeset
|
610 so provide a dummy. */ |
b4aa70dece55
* emacsclient.c (decode_options): Use a dummy display name under NS/Cocoa.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
100958
diff
changeset
|
611 if (!display || strlen (display) == 0) |
b4aa70dece55
* emacsclient.c (decode_options): Use a dummy display name under NS/Cocoa.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
100958
diff
changeset
|
612 display = "ns"; |
b4aa70dece55
* emacsclient.c (decode_options): Use a dummy display name under NS/Cocoa.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
100958
diff
changeset
|
613 #endif |
b4aa70dece55
* emacsclient.c (decode_options): Use a dummy display name under NS/Cocoa.
Adrian Robert <Adrian.B.Robert@gmail.com>
parents:
100958
diff
changeset
|
614 } |
91663
2b045ea84cf9
(decode_options): Pass --display implicitly if -c
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
88014
diff
changeset
|
615 |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
616 /* 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
|
617 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
|
618 display = NULL; |
e830695cdb7f
(decode_options): Default to a NULL display, as Emacs-22.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87965
diff
changeset
|
619 |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
620 /* 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
|
621 if (!current_frame && !display) |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
622 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
|
623 |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
624 /* --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
|
625 arguments or expressions given. */ |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
626 if (nowait && tty && argc - optind > 0) |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
627 current_frame = 1; |
100318
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
628 |
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
629 #ifdef WINDOWSNT |
100321
ebafebeca927
(decode_options): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100318
diff
changeset
|
630 if (alternate_editor && alternate_editor[0] == '\0') |
100318
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
631 { |
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
632 message (TRUE, "--alternate-editor argument or ALTERNATE_EDITOR variable cannot be\n\ |
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
633 an empty string"); |
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
634 exit (EXIT_FAILURE); |
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
635 } |
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
636 #endif /* WINDOWSNT */ |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
637 } |
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
638 |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
639 |
21387
4812cf228971
Include <stdlib.h> and <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents:
19582
diff
changeset
|
640 void |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
641 print_help_and_exit (void) |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
642 { |
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
|
643 /* 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
|
644 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
|
645 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
|
646 when using emacsclientw. */ |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
647 message (FALSE, |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
648 "Usage: %s [OPTIONS] FILE...\n\ |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
649 Tell the Emacs server to visit the specified files.\n\ |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
650 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
|
651 \n\ |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
652 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
|
653 -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
|
654 -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
|
655 -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
|
656 -c, --create-frame Create a new frame instead of trying to\n\ |
103026
9265a8db20b3
* emacsclient.c (print_help_and_exit): Fix typo and tabify (careful
Juanma Barranquero <lekktu@gmail.com>
parents:
103025
diff
changeset
|
657 use the current Emacs frame\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
|
658 -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
|
659 -n, --no-wait Don't wait for the server to return\n\ |
103025
fdccf299eae0
* emacsclient.c (print_help_and_exit): Clarify argument placement
Chong Yidong <cyd@stupidchicken.com>
parents:
102823
diff
changeset
|
660 -d DISPLAY, --display=DISPLAY\n\ |
108828
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
661 Visit the file in the given display\n\ |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
662 --parent-id=ID Open in parent window ID, via XEmbed\n" |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
663 #ifndef NO_SOCKETS_IN_FILE_SYSTEM |
103025
fdccf299eae0
* emacsclient.c (print_help_and_exit): Clarify argument placement
Chong Yidong <cyd@stupidchicken.com>
parents:
102823
diff
changeset
|
664 "-s SOCKET, --socket-name=SOCKET\n\ |
103026
9265a8db20b3
* emacsclient.c (print_help_and_exit): Fix typo and tabify (careful
Juanma Barranquero <lekktu@gmail.com>
parents:
103025
diff
changeset
|
665 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
|
666 #endif |
103025
fdccf299eae0
* emacsclient.c (print_help_and_exit): Clarify argument placement
Chong Yidong <cyd@stupidchicken.com>
parents:
102823
diff
changeset
|
667 "-f SERVER, --server-file=SERVER\n\ |
103026
9265a8db20b3
* emacsclient.c (print_help_and_exit): Fix typo and tabify (careful
Juanma Barranquero <lekktu@gmail.com>
parents:
103025
diff
changeset
|
668 Set filename of the TCP authentication file\n\ |
103025
fdccf299eae0
* emacsclient.c (print_help_and_exit): Clarify argument placement
Chong Yidong <cyd@stupidchicken.com>
parents:
102823
diff
changeset
|
669 -a EDITOR, --alternate-editor=EDITOR\n\ |
103026
9265a8db20b3
* emacsclient.c (print_help_and_exit): Fix typo and tabify (careful
Juanma Barranquero <lekktu@gmail.com>
parents:
103025
diff
changeset
|
670 Editor to fallback to if the server is not running\n" |
102823
3b582fef386d
(print_help_and_exit): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
102474
diff
changeset
|
671 #ifndef WINDOWSNT |
100314
9c9346f62ad8
* emacsclient.c [!WINDOWSNT] (EMACS_DAEMON): New define.
Juanma Barranquero <lekktu@gmail.com>
parents:
100312
diff
changeset
|
672 " If EDITOR is the empty string, start Emacs in daemon\n\ |
9c9346f62ad8
* emacsclient.c [!WINDOWSNT] (EMACS_DAEMON): New define.
Juanma Barranquero <lekktu@gmail.com>
parents:
100312
diff
changeset
|
673 mode and try connecting again\n" |
102823
3b582fef386d
(print_help_and_exit): Fix typo.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
102474
diff
changeset
|
674 #endif /* not WINDOWSNT */ |
100314
9c9346f62ad8
* emacsclient.c [!WINDOWSNT] (EMACS_DAEMON): New define.
Juanma Barranquero <lekktu@gmail.com>
parents:
100312
diff
changeset
|
675 "\n\ |
105608
1af242c07461
(print_help_and_exit): Fix bug report instructions.
Glenn Morris <rgm@gnu.org>
parents:
103716
diff
changeset
|
676 Report bugs with M-x report-emacs-bug.\n", progname); |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
53813
diff
changeset
|
677 exit (EXIT_SUCCESS); |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
678 } |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
679 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
680 /* |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
681 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
|
682 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
|
683 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
|
684 */ |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
685 void |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
686 fail (void) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
687 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
688 if (alternate_editor) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
689 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
690 int i = optind - 1; |
74637
fe8bd1af34c4
(w32_execvp): New function; wrapper for `execvp'.
Juanma Barranquero <lekktu@gmail.com>
parents:
74342
diff
changeset
|
691 |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
692 execvp (alternate_editor, main_argv + i); |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
693 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>
diff
changeset
|
694 progname, alternate_editor); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
695 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
696 exit (EXIT_FAILURE); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
697 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
698 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
699 |
73617
7af864af10b6
[WINDOWSNT]: Define HAVE_INET_SOCKETS.
Juanma Barranquero <lekktu@gmail.com>
parents:
73601
diff
changeset
|
700 #if !defined (HAVE_SOCKETS) || !defined (HAVE_INET_SOCKETS) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
701 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
702 int |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
703 main (argc, argv) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
704 int argc; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
705 char **argv; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
706 { |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
707 main_argv = argv; |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
708 progname = argv[0]; |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
709 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
|
710 "on systems with Berkeley sockets.\n", |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
711 argv[0]); |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
712 fail (); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
713 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
714 |
73617
7af864af10b6
[WINDOWSNT]: Define HAVE_INET_SOCKETS.
Juanma Barranquero <lekktu@gmail.com>
parents:
73601
diff
changeset
|
715 #else /* HAVE_SOCKETS && HAVE_INET_SOCKETS */ |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
716 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
717 #ifdef WINDOWSNT |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
718 # include <winsock2.h> |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
719 #else |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
720 # include <sys/types.h> |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
721 # include <sys/socket.h> |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
722 # include <sys/un.h> |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
723 #endif |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
724 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
725 #define AUTH_KEY_LENGTH 64 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
726 #define SEND_BUFFER_SIZE 4096 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
727 |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
728 extern char *strerror (int); |
73562
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 /* Buffer to accumulate data to send in TCP connections. */ |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
731 char send_buffer[SEND_BUFFER_SIZE + 1]; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
732 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
|
733 /* Socket used to communicate with the Emacs server process. */ |
8365dbf64d14
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83600
diff
changeset
|
734 HSOCKET emacs_socket = 0; |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
735 |
79226
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
736 /* 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
|
737 C library, so errors are handled differently. */ |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
738 void |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
739 sock_err_message (char *function_name) |
79226
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
740 { |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
741 #ifdef WINDOWSNT |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
742 char* msg = NULL; |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
743 |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
744 FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
745 | FORMAT_MESSAGE_ALLOCATE_BUFFER |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
746 | FORMAT_MESSAGE_ARGUMENT_ARRAY, |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
747 NULL, WSAGetLastError (), 0, (LPTSTR)&msg, 0, NULL); |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
748 |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
749 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
|
750 |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
751 LocalFree (msg); |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
752 #else |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
753 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
|
754 #endif |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
755 } |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
756 |
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
757 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
758 /* Let's send the data to Emacs when either |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
759 - the data ends in "\n", or |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
760 - the buffer is full (but this shouldn't happen) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
761 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
|
762 void |
109115 | 763 send_to_emacs (HSOCKET s, char *data) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
764 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
765 while (data) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
766 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
767 int dlen = strlen (data); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
768 if (dlen + sblen >= SEND_BUFFER_SIZE) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
769 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
770 int part = SEND_BUFFER_SIZE - sblen; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
771 strncpy (&send_buffer[sblen], data, part); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
772 data += part; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
773 sblen = SEND_BUFFER_SIZE; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
774 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
775 else if (dlen) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
776 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
777 strcpy (&send_buffer[sblen], data); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
778 data = NULL; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
779 sblen += dlen; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
780 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
781 else |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
782 break; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
783 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
784 if (sblen == SEND_BUFFER_SIZE |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
785 || (sblen > 0 && send_buffer[sblen-1] == '\n')) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
786 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
787 int sent = send (s, send_buffer, sblen, 0); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
788 if (sent != sblen) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
789 strcpy (send_buffer, &send_buffer[sent]); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
790 sblen -= sent; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
791 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
792 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
793 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
794 |
83499
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
795 |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
796 /* In STR, insert a & before each &, each space, each newline, and |
52848 | 797 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
|
798 return value never contains a space. |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
799 |
109115 | 800 Does not change the string. Outputs the result to S. */ |
52635
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
801 void |
109115 | 802 quote_argument (HSOCKET s, char *str) |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
803 { |
83103
efc0b56b83d9
Another server.el overhaul.
Karoly Lorentey <lorentey@elte.hu>
parents:
83065
diff
changeset
|
804 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
|
805 char *p, *q; |
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
806 |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
807 p = str; |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
808 q = copy; |
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
809 while (*p) |
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
810 { |
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
811 if (*p == ' ') |
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
812 { |
16074
25cfff7ffced
(quote_file_name): Quote with &, not \.
Richard M. Stallman <rms@gnu.org>
parents:
16061
diff
changeset
|
813 *q++ = '&'; |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
814 *q++ = '_'; |
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
815 p++; |
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
816 } |
47515
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
817 else if (*p == '\n') |
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
818 { |
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
819 *q++ = '&'; |
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
820 *q++ = 'n'; |
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
821 p++; |
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
822 } |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
823 else |
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
824 { |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
825 if (*p == '&' || (*p == '-' && p == str)) |
16074
25cfff7ffced
(quote_file_name): Quote with &, not \.
Richard M. Stallman <rms@gnu.org>
parents:
16061
diff
changeset
|
826 *q++ = '&'; |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
827 *q++ = *p++; |
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
828 } |
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
829 } |
16074
25cfff7ffced
(quote_file_name): Quote with &, not \.
Richard M. Stallman <rms@gnu.org>
parents:
16061
diff
changeset
|
830 *q++ = 0; |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
831 |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
832 send_to_emacs (s, copy); |
52635
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
833 |
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
834 free (copy); |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
835 } |
18701
9c7e0c926ed5
[C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
836 |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
837 |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
838 /* 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
|
839 modifying the string in place. Returns STR. */ |
18701
9c7e0c926ed5
[C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
840 |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
841 char * |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
842 unquote_argument (char *str) |
18701
9c7e0c926ed5
[C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
843 { |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
844 char *p, *q; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
845 |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
846 if (! str) |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
847 return str; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
848 |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
849 p = str; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
850 q = str; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
851 while (*p) |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
852 { |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
853 if (*p == '&') |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
854 { |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
855 p++; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
856 if (*p == '&') |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
857 *p = '&'; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
858 else if (*p == '_') |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
859 *p = ' '; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
860 else if (*p == 'n') |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
861 *p = '\n'; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
862 else if (*p == '-') |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
863 *p = '-'; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
864 } |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
865 *q++ = *p++; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
866 } |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
867 *q = 0; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
868 return str; |
18701
9c7e0c926ed5
[C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
869 } |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
870 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
871 |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
872 int |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
873 file_name_absolute_p (const unsigned char *filename) |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
874 { |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
875 /* 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
|
876 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
|
877 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
878 /* /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
|
879 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
|
880 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
881 /* 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
|
882 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
|
883 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
884 #ifdef WINDOWSNT |
75956
6ef0c279b18c
Comment changes and clarifications.
Juanma Barranquero <lekktu@gmail.com>
parents:
75348
diff
changeset
|
885 /* X:\xxx is always absolute. */ |
74176
6eee550d3bda
(file_name_absolute_p) [WINDOWSNT]: Use isalpha().
Jason Rumney <jasonr@gnu.org>
parents:
74172
diff
changeset
|
886 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
|
887 && 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
|
888 return TRUE; |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
889 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
890 /* 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
|
891 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
|
892 #endif |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
893 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
894 return FALSE; |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
895 } |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
896 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
897 #ifdef WINDOWSNT |
74645
aa3039743d63
Comment and whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents:
74644
diff
changeset
|
898 /* Wrapper to make WSACleanup a cdecl, as required by atexit. */ |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
899 void __cdecl |
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
900 close_winsock (void) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
901 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
902 WSACleanup (); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
903 } |
18701
9c7e0c926ed5
[C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
904 |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
905 /* 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
|
906 void |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
907 initialize_sockets (void) |
18701
9c7e0c926ed5
[C_ALLOCA] (xmalloc): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16218
diff
changeset
|
908 { |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
909 WSADATA wsaData; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
910 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
911 if (WSAStartup (MAKEWORD (2, 0), &wsaData)) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
912 { |
87669
b8b050fde307
Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents:
87668
diff
changeset
|
913 message (TRUE, "%s: error initializing WinSock2\n", progname); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
914 exit (EXIT_FAILURE); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
915 } |
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 atexit (close_winsock); |
73578
e193b6a3f379
Fixes to emacsclient.c for GNU/Linux.
Juanma Barranquero <lekktu@gmail.com>
parents:
73562
diff
changeset
|
918 } |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
919 #endif /* WINDOWSNT */ |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
920 |
16030
fb38057473c8
(decode_options): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15995
diff
changeset
|
921 |
27305
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
922 /* |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
923 * 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
|
924 * 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
|
925 */ |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
926 int |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
927 get_server_config (struct sockaddr_in *server, char *authentication) |
27305
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
928 { |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
929 char dotted[32]; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
930 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
|
931 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
|
932 FILE *config = NULL; |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
933 |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
934 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
|
935 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
|
936 else |
27305
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
937 { |
79232
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
938 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
|
939 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
940 if (home) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
941 { |
99215
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
942 char *path = alloca (strlen (home) + strlen (server_file) |
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
943 + EXTRA_SPACE); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
944 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
|
945 config = fopen (path, "rb"); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
946 } |
73809
cbc1f46b6590
(get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents:
73806
diff
changeset
|
947 #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
|
948 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
|
949 { |
99215
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
950 char *path = alloca (strlen (home) + strlen (server_file) |
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
951 + EXTRA_SPACE); |
73809
cbc1f46b6590
(get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents:
73806
diff
changeset
|
952 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
|
953 config = fopen (path, "rb"); |
cbc1f46b6590
(get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents:
73806
diff
changeset
|
954 } |
cbc1f46b6590
(get_server_config) [WINDOWSNT]: Search the server file on APPDATA
Juanma Barranquero <lekktu@gmail.com>
parents:
73806
diff
changeset
|
955 #endif |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
956 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
957 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
958 if (! config) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
959 return FALSE; |
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 (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
|
962 && (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
|
963 && (pid = strchr (port, ' '))) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
964 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
965 *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
|
966 *pid++ = '\0'; |
27305
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
967 } |
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
968 else |
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
969 { |
87669
b8b050fde307
Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents:
87668
diff
changeset
|
970 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
|
971 exit (EXIT_FAILURE); |
27305
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
972 } |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
973 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
974 server->sin_family = AF_INET; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
975 server->sin_addr.s_addr = inet_addr (dotted); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
976 server->sin_port = htons (atoi (port)); |
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 if (! fread (authentication, AUTH_KEY_LENGTH, 1, config)) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
979 { |
87669
b8b050fde307
Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents:
87668
diff
changeset
|
980 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
|
981 exit (EXIT_FAILURE); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
982 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
983 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
984 fclose (config); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
985 |
74342
c6cb776ffbb7
(emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents:
74341
diff
changeset
|
986 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
|
987 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
988 return TRUE; |
27305
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
989 } |
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
990 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
991 HSOCKET |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
992 set_tcp_socket (void) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
993 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
994 HSOCKET s; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
995 struct sockaddr_in server; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
996 struct linger l_arg = {1, 1}; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
997 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
|
998 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
999 if (! get_server_config (&server, auth_string)) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1000 return INVALID_SOCKET; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1001 |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1002 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
|
1003 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
|
1004 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
|
1005 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1006 /* |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1007 * Open up an AF_INET socket |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1008 */ |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1009 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
|
1010 { |
79226
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
1011 sock_err_message ("socket"); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1012 return INVALID_SOCKET; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1013 } |
412 | 1014 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1015 /* |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1016 * Set up the socket |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1017 */ |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1018 if (connect (s, (struct sockaddr *) &server, sizeof server) < 0) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1019 { |
79226
8919d6b286e1
(sock_err_message): New function.
Jason Rumney <jasonr@gnu.org>
parents:
78904
diff
changeset
|
1020 sock_err_message ("connect"); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1021 return INVALID_SOCKET; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1022 } |
27305
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
1023 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1024 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
|
1025 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1026 /* |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1027 * Send the authentication |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1028 */ |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1029 auth_string[AUTH_KEY_LENGTH] = '\0'; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1030 |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1031 send_to_emacs (s, "-auth "); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1032 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
|
1033 send_to_emacs (s, " "); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1034 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1035 return s; |
412 | 1036 } |
1037 | |
83590 | 1038 |
1039 /* Returns 1 if PREFIX is a prefix of STRING. */ | |
1040 static int | |
1041 strprefix (char *prefix, char *string) | |
1042 { | |
84681
f44a6d77db08
(DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
84677
diff
changeset
|
1043 return !strncmp (prefix, string, strlen (prefix)); |
83590 | 1044 } |
1045 | |
99334 | 1046 /* Get tty name and type. If successful, return the type in TTY_TYPE |
1047 and the name in TTY_NAME, and return 1. Otherwise, fail if NOABORT | |
1048 is zero, or return 0 if NOABORT is non-zero. */ | |
1049 | |
1050 int | |
1051 find_tty (char **tty_type, char **tty_name, int noabort) | |
1052 { | |
1053 char *type = egetenv ("TERM"); | |
1054 char *name = ttyname (fileno (stdout)); | |
1055 | |
1056 if (!name) | |
1057 { | |
1058 if (noabort) | |
1059 return 0; | |
1060 else | |
1061 { | |
1062 message (TRUE, "%s: could not get terminal name\n", progname); | |
1063 fail (); | |
1064 } | |
1065 } | |
1066 | |
1067 if (!type) | |
1068 { | |
1069 if (noabort) | |
1070 return 0; | |
1071 else | |
1072 { | |
1073 message (TRUE, "%s: please set the TERM variable to your terminal type\n", | |
1074 progname); | |
1075 fail (); | |
1076 } | |
1077 } | |
1078 | |
1079 if (strcmp (type, "eterm") == 0) | |
1080 { | |
1081 if (noabort) | |
1082 return 0; | |
1083 else | |
1084 { | |
1085 /* This causes nasty, MULTI_KBOARD-related input lockouts. */ | |
1086 message (TRUE, "%s: opening a frame in an Emacs term buffer" | |
1087 " is not supported\n", progname); | |
1088 fail (); | |
1089 } | |
1090 } | |
1091 | |
1092 *tty_name = name; | |
1093 *tty_type = type; | |
1094 return 1; | |
1095 } | |
1096 | |
83590 | 1097 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1098 #if !defined (NO_SOCKETS_IN_FILE_SYSTEM) |
412 | 1099 |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1100 /* Three possibilities: |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1101 2 - can't be `stat'ed (sets errno) |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1102 1 - isn't owned by us |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1103 0 - success: none of the above */ |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1104 |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1105 static int |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
1106 socket_status (char *socket_name) |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1107 { |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1108 struct stat statbfr; |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1109 |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1110 if (stat (socket_name, &statbfr) == -1) |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1111 return 2; |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1112 |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1113 if (statbfr.st_uid != geteuid ()) |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1114 return 1; |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1115 |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1116 return 0; |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1117 } |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1118 |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1119 |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83019
diff
changeset
|
1120 /* 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
|
1121 Useful for SIGWINCH. */ |
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83019
diff
changeset
|
1122 |
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
|
1123 SIGTYPE |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
1124 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
|
1125 { |
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
|
1126 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
|
1127 |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82994
diff
changeset
|
1128 if (emacs_pid) |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
1129 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
|
1130 |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
1131 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
|
1132 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
|
1133 } |
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
|
1134 |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1135 /* 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
|
1136 now resume our tty frame. */ |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1137 |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1138 SIGTYPE |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1139 handle_sigcont (int signalnum) |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1140 { |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1141 int old_errno = errno; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1142 |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1143 if (tcgetpgrp (1) == getpgrp ()) |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1144 { |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1145 /* We are in the foreground. */ |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1146 send_to_emacs (emacs_socket, "-resume \n"); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1147 } |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1148 else |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1149 { |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1150 /* We are in the background; cancel the continue. */ |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1151 kill (getpid (), SIGSTOP); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1152 } |
83348
afade4ccd30c
Fix broken emacsclient resume on Solaris (by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
1153 |
afade4ccd30c
Fix broken emacsclient resume on Solaris (by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents:
83332
diff
changeset
|
1154 signal (signalnum, handle_sigcont); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1155 errno = old_errno; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1156 } |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1157 |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1158 /* 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
|
1159 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
|
1160 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
|
1161 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
|
1162 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
|
1163 |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1164 SIGTYPE |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1165 handle_sigtstp (int signalnum) |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1166 { |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1167 int old_errno = errno; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1168 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
|
1169 |
83611
a5651b79b31b
* emacsclient.c (handle_sigtstp): Use the new name for the
Dan Nicolaescu <dann@ics.uci.edu>
parents:
83607
diff
changeset
|
1170 if (emacs_socket) |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1171 send_to_emacs (emacs_socket, "-suspend \n"); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1172 |
87965
e66c061f4966
(set_tcp_socket): Don't send a "\n" after the authentication string;
Juanma Barranquero <lekktu@gmail.com>
parents:
87724
diff
changeset
|
1173 /* 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
|
1174 changing the handler and resignalling. */ |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1175 sigprocmask (SIG_BLOCK, NULL, &set); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1176 sigdelset (&set, signalnum); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1177 signal (signalnum, SIG_DFL); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1178 kill (getpid (), signalnum); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1179 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
|
1180 signal (signalnum, handle_sigtstp); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1181 |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1182 errno = old_errno; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1183 } |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1184 |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1185 |
83025
c66ebcc29777
Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents:
83019
diff
changeset
|
1186 /* 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
|
1187 |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82994
diff
changeset
|
1188 void |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82994
diff
changeset
|
1189 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
|
1190 { |
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
|
1191 /* 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
|
1192 signal (SIGWINCH, pass_signal_to_emacs); |
83012
4aa172a45af1
Fix C-g handling with multiple ttys.
Karoly Lorentey <lorentey@elte.hu>
parents:
83010
diff
changeset
|
1193 |
4aa172a45af1
Fix C-g handling with multiple ttys.
Karoly Lorentey <lorentey@elte.hu>
parents:
83010
diff
changeset
|
1194 /* 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
|
1195 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
|
1196 normal input event on secondary terminals. */ |
4aa172a45af1
Fix C-g handling with multiple ttys.
Karoly Lorentey <lorentey@elte.hu>
parents:
83010
diff
changeset
|
1197 #if 0 |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
82995
diff
changeset
|
1198 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
|
1199 signal (SIGQUIT, pass_signal_to_emacs); |
83012
4aa172a45af1
Fix C-g handling with multiple ttys.
Karoly Lorentey <lorentey@elte.hu>
parents:
83010
diff
changeset
|
1200 #endif |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1201 |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1202 signal (SIGCONT, handle_sigcont); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1203 signal (SIGTSTP, handle_sigtstp); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1204 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
|
1205 } |
27305
4161adef5fd3
Add option -a EDITOR and environment variable
Gerd Moellmann <gerd@gnu.org>
parents:
26083
diff
changeset
|
1206 |
412 | 1207 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1208 HSOCKET |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
1209 set_local_socket (void) |
412 | 1210 { |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1211 HSOCKET s; |
412 | 1212 struct sockaddr_un server; |
1213 | |
42176
1f5dbeefa536
Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents:
39723
diff
changeset
|
1214 /* |
412 | 1215 * Open up an AF_UNIX socket in this person's home directory |
1216 */ | |
1217 | |
1218 if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) | |
1219 { | |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
1220 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
|
1221 return INVALID_SOCKET; |
412 | 1222 } |
42176
1f5dbeefa536
Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents:
39723
diff
changeset
|
1223 |
412 | 1224 server.sun_family = AF_UNIX; |
25261
89be69860eeb
(main): Move the dynamic allocation of
Karl Heuer <kwzh@gnu.org>
parents:
24652
diff
changeset
|
1225 |
493 | 1226 { |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1227 int sock_status = 0; |
53646
8c55b1b400d5
(main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53543
diff
changeset
|
1228 int default_sock = !socket_name; |
83010 | 1229 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
|
1230 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
|
1231 char *tmpdir; |
53734
132739917566
(main): Don't use the hostname in the socket name.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53693
diff
changeset
|
1232 |
109315
8f3464b85afb
Use strchr, strrchr instead of index, rindex
Andreas Schwab <schwab@linux-m68k.org>
parents:
109115
diff
changeset
|
1233 if (socket_name && !strchr (socket_name, '/') |
8f3464b85afb
Use strchr, strrchr instead of index, rindex
Andreas Schwab <schwab@linux-m68k.org>
parents:
109115
diff
changeset
|
1234 && !strchr (socket_name, '\\')) |
8f3464b85afb
Use strchr, strrchr instead of index, rindex
Andreas Schwab <schwab@linux-m68k.org>
parents:
109115
diff
changeset
|
1235 { |
8f3464b85afb
Use strchr, strrchr instead of index, rindex
Andreas Schwab <schwab@linux-m68k.org>
parents:
109115
diff
changeset
|
1236 /* socket_name is a file name component. */ |
83031 | 1237 server_name = socket_name; |
1238 socket_name = NULL; | |
1239 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
|
1240 } |
24084
c0b0893dd5a6
(main): Eliminate arbitrary limit on length of system_name.
Richard M. Stallman <rms@gnu.org>
parents:
23412
diff
changeset
|
1241 |
53646
8c55b1b400d5
(main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53543
diff
changeset
|
1242 if (default_sock) |
52479
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
1243 { |
99209
01e8c1513572
* server.el, emacsclient.c: Use TMPDIR (default /tmp) instead of hardcoded /tmp.
Juanma Barranquero <lekktu@gmail.com>
parents:
98676
diff
changeset
|
1244 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
|
1245 if (!tmpdir) |
01e8c1513572
* server.el, emacsclient.c: Use TMPDIR (default /tmp) instead of hardcoded /tmp.
Juanma Barranquero <lekktu@gmail.com>
parents:
98676
diff
changeset
|
1246 tmpdir = "/tmp"; |
99215
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
1247 socket_name = alloca (strlen (tmpdir) + strlen (server_name) |
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
1248 + 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
|
1249 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
|
1250 tmpdir, (int) geteuid (), server_name); |
52479
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
1251 } |
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
1252 |
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
1253 if (strlen (socket_name) < sizeof (server.sun_path)) |
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
1254 strcpy (server.sun_path, socket_name); |
bc2610a13fbf
(socket_name): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
1255 else |
53646
8c55b1b400d5
(main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53543
diff
changeset
|
1256 { |
87669
b8b050fde307
Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents:
87668
diff
changeset
|
1257 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>
diff
changeset
|
1258 progname, socket_name); |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
1259 fail (); |
53646
8c55b1b400d5
(main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53543
diff
changeset
|
1260 } |
412 | 1261 |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1262 /* 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
|
1263 sock_status = socket_status (server.sun_path); |
53543
fec82b542db2
(main): Save errno from socket_status.
Andreas Schwab <schwab@suse.de>
parents:
53497
diff
changeset
|
1264 saved_errno = errno; |
53646
8c55b1b400d5
(main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53543
diff
changeset
|
1265 if (sock_status && default_sock) |
493 | 1266 { |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1267 /* 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
|
1268 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
|
1269 associated with the name. This is reminiscent of the logic |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1270 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
|
1271 |
79232
7970215aa6e5
Add a wrapper for getenv so it also checks the registry on Windows.
Juanma Barranquero <lekktu@gmail.com>
parents:
79226
diff
changeset
|
1272 char *user_name = (char *) egetenv ("LOGNAME"); |
53693
04e9ebd16fcd
(main): Restore errno from saved_errno,
Richard M. Stallman <rms@gnu.org>
parents:
53646
diff
changeset
|
1273 |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1274 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
|
1275 user_name = (char *) egetenv ("USER"); |
42176
1f5dbeefa536
Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents:
39723
diff
changeset
|
1276 |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1277 if (user_name) |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1278 { |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1279 struct passwd *pw = getpwnam (user_name); |
53693
04e9ebd16fcd
(main): Restore errno from saved_errno,
Richard M. Stallman <rms@gnu.org>
parents:
53646
diff
changeset
|
1280 |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1281 if (pw && (pw->pw_uid != geteuid ())) |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1282 { |
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1283 /* We're running under su, apparently. */ |
99215
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
1284 socket_name = alloca (strlen (tmpdir) + strlen (server_name) |
e0e326adf3bc
* emacsclient.c (EXTRA_SPACE): New macro.
Juanma Barranquero <lekktu@gmail.com>
parents:
99209
diff
changeset
|
1285 + 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
|
1286 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
|
1287 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
|
1288 |
8c55b1b400d5
(main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53543
diff
changeset
|
1289 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
|
1290 strcpy (server.sun_path, socket_name); |
8c55b1b400d5
(main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53543
diff
changeset
|
1291 else |
8c55b1b400d5
(main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53543
diff
changeset
|
1292 { |
87669
b8b050fde307
Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents:
87668
diff
changeset
|
1293 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
|
1294 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
|
1295 exit (EXIT_FAILURE); |
53646
8c55b1b400d5
(main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53543
diff
changeset
|
1296 } |
8c55b1b400d5
(main): Stop if socket name too long.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53543
diff
changeset
|
1297 |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1298 sock_status = socket_status (server.sun_path); |
83010 | 1299 saved_errno = errno; |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1300 } |
53693
04e9ebd16fcd
(main): Restore errno from saved_errno,
Richard M. Stallman <rms@gnu.org>
parents:
53646
diff
changeset
|
1301 else |
04e9ebd16fcd
(main): Restore errno from saved_errno,
Richard M. Stallman <rms@gnu.org>
parents:
53646
diff
changeset
|
1302 errno = saved_errno; |
27474
ed3668c0295a
(socket_status): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
27305
diff
changeset
|
1303 } |
493 | 1304 } |
42176
1f5dbeefa536
Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents:
39723
diff
changeset
|
1305 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1306 switch (sock_status) |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1307 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1308 case 1: |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1309 /* 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>
diff
changeset
|
1310 we are root. */ |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1311 if (0 != geteuid ()) |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1312 { |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1313 message (TRUE, "%s: Invalid socket owner\n", progname); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1314 return INVALID_SOCKET; |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1315 } |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1316 break; |
42176
1f5dbeefa536
Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents:
39723
diff
changeset
|
1317 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1318 case 2: |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1319 /* `stat' failed */ |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1320 if (saved_errno == ENOENT) |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1321 message (TRUE, |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1322 "%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
|
1323 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
|
1324 progname); |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1325 else |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1326 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
|
1327 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>
diff
changeset
|
1328 return INVALID_SOCKET; |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1329 } |
493 | 1330 } |
412 | 1331 |
3595
e10f7473d2e3
* emacsserver.c (main): When we're passing a `struct sockaddr_un'
Jim Blandy <jimb@redhat.com>
parents:
1031
diff
changeset
|
1332 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
|
1333 < 0) |
412 | 1334 { |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
1335 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
|
1336 return INVALID_SOCKET; |
412 | 1337 } |
15758
7e712d42d371
(main) [HAVE_SOCKETS]: Use two separate stdio
Richard M. Stallman <rms@gnu.org>
parents:
14610
diff
changeset
|
1338 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1339 return s; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1340 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1341 #endif /* ! NO_SOCKETS_IN_FILE_SYSTEM */ |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1342 |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1343 HSOCKET |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1344 set_socket (int no_exit_if_error) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1345 { |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1346 HSOCKET s; |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1347 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1348 INITIALIZE (); |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1349 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1350 #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
|
1351 /* 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
|
1352 if (socket_name) |
412 | 1353 { |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1354 s = set_local_socket (); |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1355 if ((s != INVALID_SOCKET) || no_exit_if_error) |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1356 return s; |
87668
98943cbe28fb
Daniel Hackney <dan at haxney.org> (tiny change)
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
1357 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>
diff
changeset
|
1358 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
|
1359 exit (EXIT_FAILURE); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1360 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1361 #endif |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1362 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1363 /* 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
|
1364 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
|
1365 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
|
1366 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1367 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
|
1368 { |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1369 s = set_tcp_socket (); |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1370 if ((s != INVALID_SOCKET) || no_exit_if_error) |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1371 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
|
1372 |
87669
b8b050fde307
Add missing final newlines to message calls.
Glenn Morris <rgm@gnu.org>
parents:
87668
diff
changeset
|
1373 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>
diff
changeset
|
1374 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
|
1375 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
|
1376 } |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1377 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1378 #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
|
1379 /* 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
|
1380 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
|
1381 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
|
1382 return s; |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1383 #endif |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1384 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1385 /* 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
|
1386 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
|
1387 s = set_tcp_socket (); |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1388 if ((s != INVALID_SOCKET) || no_exit_if_error) |
73765
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1389 return s; |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1390 |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1391 /* No implicit or explicit socket, and no alternate editor. */ |
74118
bee73d83d967
Include <stdarg.h>.
Juanma Barranquero <lekktu@gmail.com>
parents:
73978
diff
changeset
|
1392 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
|
1393 #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
|
1394 "\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
|
1395 #endif |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1396 "\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
|
1397 \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
|
1398 progname); |
bcb5c0f9a466
(longopts) [! NO_SOCKETS_IN_FILE_SYSTEM]: Don't show option --socket-name.
Juanma Barranquero <lekktu@gmail.com>
parents:
73657
diff
changeset
|
1399 exit (EXIT_FAILURE); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1400 } |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1401 |
74729
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1402 #ifdef WINDOWSNT |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1403 FARPROC set_fg; /* Pointer to AllowSetForegroundWindow. */ |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1404 FARPROC get_wc; /* Pointer to RealGetWindowClassA. */ |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1405 |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1406 BOOL CALLBACK |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
1407 w32_find_emacs_process (HWND hWnd, LPARAM lParam) |
74729
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1408 { |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1409 DWORD pid; |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1410 char class[6]; |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1411 |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1412 /* Reject any window not of class "Emacs". */ |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1413 if (! get_wc (hWnd, class, sizeof (class)) |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1414 || strcmp (class, "Emacs")) |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1415 return TRUE; |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1416 |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1417 /* 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
|
1418 (void) GetWindowThreadProcessId (hWnd, &pid); |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1419 |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1420 /* Not the one we're looking for. */ |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1421 if (pid != (DWORD) emacs_pid) return TRUE; |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1422 |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1423 /* OK, let's raise it. */ |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1424 set_fg (emacs_pid); |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1425 |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1426 /* Stop enumeration. */ |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1427 return FALSE; |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1428 } |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1429 |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1430 /* |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1431 * 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
|
1432 * 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
|
1433 */ |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1434 void |
109480
d12162869c07
Convert some more functions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109315
diff
changeset
|
1435 w32_give_focus (void) |
74729
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1436 { |
103641
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1437 HANDLE user32; |
74729
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1438 |
75956
6ef0c279b18c
Comment changes and clarifications.
Juanma Barranquero <lekktu@gmail.com>
parents:
75348
diff
changeset
|
1439 /* 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
|
1440 if (!emacs_pid) return; |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1441 |
103641
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1442 user32 = GetModuleHandle ("user32.dll"); |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1443 |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1444 if (!user32) |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1445 return; |
74729
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1446 |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1447 /* 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
|
1448 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
|
1449 AllowSetForegroundWindow. Unfortunately, older Windows (W95, W98 and |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1450 NT) lack this function, so we have to check its availability. */ |
103641
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1451 if ((set_fg = GetProcAddress (user32, "AllowSetForegroundWindow")) |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1452 && (get_wc = GetProcAddress (user32, "RealGetWindowClassA"))) |
74729
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1453 EnumWindows (w32_find_emacs_process, (LPARAM) 0); |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1454 } |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1455 #endif |
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1456 |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1457 /* Start the emacs daemon and try to connect to it. */ |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1458 |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1459 void |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1460 start_daemon_and_retry_set_socket (void) |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1461 { |
100318
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
1462 #ifndef WINDOWSNT |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1463 pid_t dpid; |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1464 int status; |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1465 |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1466 dpid = fork (); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1467 |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1468 if (dpid > 0) |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1469 { |
100485
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1470 pid_t w; |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1471 w = waitpid (dpid, &status, WUNTRACED | WCONTINUED); |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1472 |
100485
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1473 if ((w == -1) || !WIFEXITED (status) || WEXITSTATUS(status)) |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1474 { |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1475 message (TRUE, "Error: Could not start the Emacs daemon\n"); |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1476 exit (EXIT_FAILURE); |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1477 } |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1478 |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1479 /* Try connecting, the daemon should have started by now. */ |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1480 message (TRUE, "Emacs daemon should have started, trying to connect again\n"); |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1481 if ((emacs_socket = set_socket (1)) == INVALID_SOCKET) |
100485
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1482 { |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1483 message (TRUE, "Error: Cannot connect even after starting the Emacs daemon\n"); |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1484 exit (EXIT_FAILURE); |
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1485 } |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1486 } |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1487 else if (dpid < 0) |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1488 { |
100485
fd10c7ef5447
* emacs.c (main): Print and error and exit when no data is read
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100418
diff
changeset
|
1489 fprintf (stderr, "Error: Cannot fork!\n"); |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1490 exit (1); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1491 } |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1492 else |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1493 { |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1494 char *d_argv[] = {"emacs", "--daemon", 0 }; |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1495 if (socket_name != NULL) |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1496 { |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1497 /* Pass --daemon=socket_name as argument. */ |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1498 char *deq = "--daemon="; |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1499 char *daemon_arg = alloca (strlen (deq) |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1500 + strlen (socket_name) + 1); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1501 strcpy (daemon_arg, deq); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1502 strcat (daemon_arg, socket_name); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1503 d_argv[1] = daemon_arg; |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1504 } |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1505 execvp ("emacs", d_argv); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1506 message (TRUE, "%s: error starting emacs daemon\n", progname); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1507 } |
100318
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
1508 #endif /* WINDOWSNT */ |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1509 } |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1510 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1511 int |
109111
52b76722152a
Convert function definitions to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
108828
diff
changeset
|
1512 main (int argc, char **argv) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1513 { |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1514 int i, rl, needlf = 0; |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1515 char *cwd, *str; |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1516 char string[BUFSIZ+1]; |
100318
00d91c609c41
(EMACS_DAEMON): Remove definition.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100314
diff
changeset
|
1517 int null_socket_name, null_server_file, start_daemon_if_needed; |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1518 |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1519 main_argv = argv; |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1520 progname = argv[0]; |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1521 |
103641
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1522 #ifdef WINDOWSNT |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1523 /* On Windows 7 and later, we need to explicitly associate emacsclient |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1524 with emacs so the UI behaves sensibly. */ |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1525 w32_set_user_model_id (); |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1526 #endif |
48d529d3a5a4
bug#1849 - Windows 7 Taskbar Support
Jason Rumney <jasonr@gnu.org>
parents:
103026
diff
changeset
|
1527 |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1528 /* Process options. */ |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1529 decode_options (argc, argv); |
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1530 |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1531 if ((argc - optind < 1) && !eval && current_frame) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1532 { |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1533 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>
diff
changeset
|
1534 "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>
diff
changeset
|
1535 progname, progname); |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1536 exit (EXIT_FAILURE); |
412 | 1537 } |
1538 | |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1539 /* If alternate_editor is the empty string, start the emacs daemon |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1540 in case of failure to connect. */ |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1541 start_daemon_if_needed = (alternate_editor |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1542 && (alternate_editor[0] == '\0')); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1543 if (start_daemon_if_needed) |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1544 { |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1545 /* set_socket changes the values for socket_name and |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1546 server_file, we need to reset them, if they were NULL before |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1547 for the second call to set_socket. */ |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1548 null_socket_name = (socket_name == NULL); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1549 null_server_file = (server_file == NULL); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1550 } |
15758
7e712d42d371
(main) [HAVE_SOCKETS]: Use two separate stdio
Richard M. Stallman <rms@gnu.org>
parents:
14610
diff
changeset
|
1551 |
100312
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1552 if ((emacs_socket = set_socket (alternate_editor |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1553 || start_daemon_if_needed)) == INVALID_SOCKET) |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1554 if (start_daemon_if_needed) |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1555 { |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1556 /* Reset socket_name and server_file if they were NULL |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1557 before the set_socket call. */ |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1558 if (null_socket_name) |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1559 socket_name = NULL; |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1560 if (null_server_file) |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1561 server_file = NULL; |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1562 |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1563 start_daemon_and_retry_set_socket (); |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1564 } |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1565 else |
6da82f7dfa67
* misc.texi (emacsclient Options): Describe what an empty string
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100154
diff
changeset
|
1566 fail (); |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1567 |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1568 cwd = get_current_dir_name (); |
412 | 1569 if (cwd == 0) |
1570 { | |
1571 /* 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>
diff
changeset
|
1572 message (TRUE, "%s: %s\n", progname, |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1573 "Cannot get current working directory"); |
82988
f82e3a6f5ccb
A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents:
82987
diff
changeset
|
1574 fail (); |
412 | 1575 } |
1576 | |
74342
c6cb776ffbb7
(emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents:
74341
diff
changeset
|
1577 #ifdef WINDOWSNT |
74729
303099bc66d9
[WINDOWSNT] (set_fg, get_wc): New variables.
Juanma Barranquero <lekktu@gmail.com>
parents:
74645
diff
changeset
|
1578 w32_give_focus (); |
74342
c6cb776ffbb7
(emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents:
74341
diff
changeset
|
1579 #endif |
c6cb776ffbb7
(emacs_pid): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents:
74341
diff
changeset
|
1580 |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1581 /* 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
|
1582 if (!current_frame) |
51eb0aa362f3
Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
83371
diff
changeset
|
1583 { |
51eb0aa362f3
Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
83371
diff
changeset
|
1584 extern char **environ; |
51eb0aa362f3
Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
83371
diff
changeset
|
1585 int i; |
51eb0aa362f3
Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
83371
diff
changeset
|
1586 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
|
1587 { |
51eb0aa362f3
Store client's environment in terminal parameters, not server parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
83371
diff
changeset
|
1588 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
|
1589 char *value = strchr (name, '='); |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1590 send_to_emacs (emacs_socket, "-env "); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1591 quote_argument (emacs_socket, environ[i]); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1592 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
|
1593 } |
83499
0fe580113f72
Set `default-directory' in *scratch* to the current directory of emacsclient.
Karoly Lorentey <lorentey@elte.hu>
parents:
83468
diff
changeset
|
1594 } |
102471
02f766280fad
* server.el (server-process-filter): Use expand-file-name rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101397
diff
changeset
|
1595 send_to_emacs (emacs_socket, "-dir "); |
02f766280fad
* server.el (server-process-filter): Use expand-file-name rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101397
diff
changeset
|
1596 quote_argument (emacs_socket, cwd); |
02f766280fad
* server.el (server-process-filter): Use expand-file-name rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101397
diff
changeset
|
1597 send_to_emacs (emacs_socket, "/"); |
02f766280fad
* server.el (server-process-filter): Use expand-file-name rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101397
diff
changeset
|
1598 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
|
1599 |
83246
5bc762f84335
Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents:
83165
diff
changeset
|
1600 retry: |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
1601 if (nowait) |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1602 send_to_emacs (emacs_socket, "-nowait "); |
16061
a1290c4159b5
(quote_file_name): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16030
diff
changeset
|
1603 |
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
|
1604 if (current_frame) |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1605 send_to_emacs (emacs_socket, "-current-frame "); |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
1606 |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
1607 if (display) |
412 | 1608 { |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1609 send_to_emacs (emacs_socket, "-display "); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1610 quote_argument (emacs_socket, display); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1611 send_to_emacs (emacs_socket, " "); |
52635
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1612 } |
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1613 |
108828
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
1614 if (parent_id) |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
1615 { |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
1616 send_to_emacs (emacs_socket, "-parent-id "); |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
1617 quote_argument (emacs_socket, parent_id); |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
1618 send_to_emacs (emacs_socket, " "); |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
1619 } |
87dad1e1c860
Add --parent-id argument to emacsclient.
Chong Yidong <cyd@stupidchicken.com>
parents:
107737
diff
changeset
|
1620 |
99254
8cade16f7427
(main): If using the current frame, send tty information to Emacs in
Chong Yidong <cyd@stupidchicken.com>
parents:
99215
diff
changeset
|
1621 /* 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
|
1622 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
|
1623 frame is available. */ |
99297
4069e1395eca
(main): Don't force sending tty when in eval mode.
Andreas Schwab <schwab@suse.de>
parents:
99254
diff
changeset
|
1624 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
|
1625 { |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1626 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
|
1627 |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1628 if (find_tty (&tty_type, &tty_name, !tty)) |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1629 { |
83590 | 1630 #if !defined (NO_SOCKETS_IN_FILE_SYSTEM) |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1631 init_signals (); |
83590 | 1632 #endif |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1633 send_to_emacs (emacs_socket, "-tty "); |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1634 quote_argument (emacs_socket, tty_name); |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1635 send_to_emacs (emacs_socket, " "); |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1636 quote_argument (emacs_socket, tty_type); |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1637 send_to_emacs (emacs_socket, " "); |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1638 } |
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
|
1639 } |
83043
78a785f205ea
Added -w option to emacsclient for opening a new X frame.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1640 |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1641 if (!current_frame && !tty) |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1642 send_to_emacs (emacs_socket, "-window-system "); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1643 |
52635
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1644 if ((argc - optind > 0)) |
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1645 { |
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1646 for (i = optind; i < argc; i++) |
412 | 1647 { |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1648 |
52635
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1649 if (eval) |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1650 { |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1651 /* Don't prepend cwd or anything like that. */ |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1652 send_to_emacs (emacs_socket, "-eval "); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1653 quote_argument (emacs_socket, argv[i]); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1654 send_to_emacs (emacs_socket, " "); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1655 continue; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1656 } |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1657 |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1658 if (*argv[i] == '+') |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1659 { |
52635
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1660 char *p = argv[i] + 1; |
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1661 while (isdigit ((unsigned char) *p) || *p == ':') p++; |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1662 if (*p == 0) |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1663 { |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1664 send_to_emacs (emacs_socket, "-position "); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1665 quote_argument (emacs_socket, argv[i]); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1666 send_to_emacs (emacs_socket, " "); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1667 continue; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1668 } |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1669 } |
102474
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1670 #ifdef WINDOWSNT |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1671 else if (! file_name_absolute_p (argv[i]) |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1672 && (isalpha (argv[i][0]) && argv[i][1] == ':')) |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1673 /* Windows can have a different default directory for each |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1674 drive, so the cwd passed via "-dir" is not sufficient |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1675 to account for that. |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1676 If the user uses <drive>:<relpath>, we hence need to be |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1677 careful to expand <relpath> with the default directory |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1678 corresponding to <drive>. */ |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1679 { |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1680 char *filename = (char *) xmalloc (MAX_PATH); |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1681 DWORD size; |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1682 |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1683 size = GetFullPathName (argv[i], MAX_PATH, filename, NULL); |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1684 if (size > 0 && size < MAX_PATH) |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1685 argv[i] = filename; |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1686 else |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1687 free (filename); |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1688 } |
10dc40769985
* emacsclient.c (main): Revert part of last change,
Juanma Barranquero <lekktu@gmail.com>
parents:
102471
diff
changeset
|
1689 #endif |
52635
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1690 |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1691 send_to_emacs (emacs_socket, "-file "); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1692 quote_argument (emacs_socket, argv[i]); |
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1693 send_to_emacs (emacs_socket, " "); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1694 } |
412 | 1695 } |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1696 else if (eval) |
52635
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1697 { |
99333
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1698 /* Read expressions interactively. */ |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1699 while ((str = fgets (string, BUFSIZ, stdin))) |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1700 { |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1701 send_to_emacs (emacs_socket, "-eval "); |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1702 quote_argument (emacs_socket, str); |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1703 } |
a999ab783eff
(window_system): Delete redundant variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
99311
diff
changeset
|
1704 send_to_emacs (emacs_socket, " "); |
52635
9963e9da5850
(quote_file_name): Print the result instead of
Eli Zaretskii <eliz@gnu.org>
parents:
52532
diff
changeset
|
1705 } |
55442
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
53813
diff
changeset
|
1706 |
83603
54df157e987d
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83601
diff
changeset
|
1707 send_to_emacs (emacs_socket, "\n"); |
412 | 1708 |
83165
ed82e09208c9
Fix --no-wait in emacsclient (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents:
83121
diff
changeset
|
1709 /* Wait for an answer. */ |
ed82e09208c9
Fix --no-wait in emacsclient (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents:
83121
diff
changeset
|
1710 if (!eval && !tty && !nowait) |
47647
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
1711 { |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
1712 printf ("Waiting for Emacs..."); |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
1713 needlf = 2; |
5498210ad40d
Remove SYSV support.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47515
diff
changeset
|
1714 } |
412 | 1715 fflush (stdout); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1716 fsync (1); |
412 | 1717 |
47515
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
1718 /* 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
|
1719 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
|
1720 { |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1721 char *p; |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1722 string[rl] = '\0'; |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1723 |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1724 p = string + strlen (string) - 1; |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1725 while (p > string && *p == '\n') |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1726 *p-- = 0; |
412 | 1727 |
84667
f2c11a35b0e3
(current_frame): Change the default.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
83666
diff
changeset
|
1728 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
|
1729 { |
83246
5bc762f84335
Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents:
83165
diff
changeset
|
1730 /* -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
|
1731 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
|
1732 } |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1733 else if (strprefix ("-window-system-unsupported ", string)) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1734 { |
83246
5bc762f84335
Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents:
83165
diff
changeset
|
1735 /* -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
|
1736 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
|
1737 nowait = 0; |
5bc762f84335
Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents:
83165
diff
changeset
|
1738 tty = 1; |
5bc762f84335
Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents:
83165
diff
changeset
|
1739 goto retry; |
5bc762f84335
Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents:
83165
diff
changeset
|
1740 } |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1741 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
|
1742 { |
83246
5bc762f84335
Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents:
83165
diff
changeset
|
1743 /* -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>
diff
changeset
|
1744 str = unquote_argument (string + strlen ("-print ")); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1745 if (needlf) |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1746 printf ("\n"); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1747 printf ("%s", str); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1748 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
|
1749 } |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1750 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
|
1751 { |
83246
5bc762f84335
Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents:
83165
diff
changeset
|
1752 /* -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>
diff
changeset
|
1753 str = unquote_argument (string + strlen ("-error ")); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1754 if (needlf) |
83043
78a785f205ea
Added -w option to emacsclient for opening a new X frame.
Karoly Lorentey <lorentey@elte.hu>
parents:
83037
diff
changeset
|
1755 printf ("\n"); |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1756 fprintf (stderr, "*ERROR*: %s", str); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1757 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
|
1758 } |
84677
421e6c54ace8
(main) [SIGSTOP]: Change conditional from WINDOWSNT.
Jason Rumney <jasonr@gnu.org>
parents:
84667
diff
changeset
|
1759 #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
|
1760 else if (strprefix ("-suspend ", string)) |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1761 { |
83246
5bc762f84335
Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents:
83165
diff
changeset
|
1762 /* -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
|
1763 if (needlf) |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1764 printf ("\n"); |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1765 needlf = 0; |
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1766 kill (0, SIGSTOP); |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82994
diff
changeset
|
1767 } |
83590 | 1768 #endif |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82994
diff
changeset
|
1769 else |
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82994
diff
changeset
|
1770 { |
83246
5bc762f84335
Prevent emacsclient errors when Emacs is compiled without X support.
Karoly Lorentey <lorentey@elte.hu>
parents:
83165
diff
changeset
|
1771 /* Unknown command. */ |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1772 if (needlf) |
82995
039bd6989d29
Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents:
82994
diff
changeset
|
1773 printf ("\n"); |
83548
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1774 printf ("*ERROR*: Unknown message: %s", string); |
c71725faff1a
Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
1775 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
|
1776 } |
47515
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
1777 } |
42176
1f5dbeefa536
Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents:
39723
diff
changeset
|
1778 |
47515
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
1779 if (needlf) |
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
1780 printf ("\n"); |
6ee937dcfe16
(quote_file_name): Quote \n.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
42412
diff
changeset
|
1781 fflush (stdout); |
83065
a871be7b26a5
Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents:
83064
diff
changeset
|
1782 fsync (1); |
42176
1f5dbeefa536
Include "config.h", not <../src/config.h>.
Pavel Janík <Pavel@Janik.cz>
parents:
39723
diff
changeset
|
1783 |
83601
8365dbf64d14
(emacs_socket): Rename from s.
Jason Rumney <jasonr@gnu.org>
parents:
83600
diff
changeset
|
1784 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
|
1785 return EXIT_SUCCESS; |
412 | 1786 } |
1787 | |
73617
7af864af10b6
[WINDOWSNT]: Define HAVE_INET_SOCKETS.
Juanma Barranquero <lekktu@gmail.com>
parents:
73601
diff
changeset
|
1788 #endif /* HAVE_SOCKETS && HAVE_INET_SOCKETS */ |
73562
368665ce6f35
Add support for TCP sockets.
Juanma Barranquero <lekktu@gmail.com>
parents:
72005
diff
changeset
|
1789 |
5527
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1790 |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1791 #ifndef HAVE_STRERROR |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1792 char * |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1793 strerror (errnum) |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1794 int errnum; |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1795 { |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1796 extern char *sys_errlist[]; |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1797 extern int sys_nerr; |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1798 |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1799 if (errnum >= 0 && errnum < sys_nerr) |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1800 return sys_errlist[errnum]; |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1801 return (char *) "Unknown error"; |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1802 } |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1803 |
51451a050975
[! HAVE_STRERROR] (strerror): Define the function.
Roland McGrath <roland@gnu.org>
parents:
5522
diff
changeset
|
1804 #endif /* ! HAVE_STRERROR */ |
52401 | 1805 |
1806 /* arch-tag: f39bb9c4-73eb-477e-896d-50832e2ca9a7 | |
1807 (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
|
1808 |
a47704955f8d
Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
53813
diff
changeset
|
1809 /* emacsclient.c ends here */ |