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