]> code.delx.au - gnu-emacs/blobdiff - lib-src/emacsclient.c
Merge from emacs--devo--0
[gnu-emacs] / lib-src / emacsclient.c
index a8d3257cde0eb99b2806e707210beb0797cfb8c2..ae7ff12e17d36888c924ccc380f85c0557f3e1a7 100644 (file)
@@ -6,7 +6,7 @@ This file is part of GNU Emacs.
 
 GNU Emacs is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
 any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
@@ -108,8 +108,6 @@ char *(getcwd) ();
 #define VERSION "unspecified"
 #endif
 \f
-#define SEND_STRING(data) (send_to_emacs (emacs_socket, (data)))
-#define SEND_QUOTED(data) (quote_argument (emacs_socket, (data)))
 
 #ifndef EXIT_SUCCESS
 #define EXIT_SUCCESS 0
@@ -460,8 +458,10 @@ decode_options (argc, argv)
 
   if (!tty && display)
     window_system = 1;
+#if !defined (WINDOWSNT) && !defined (HAVE_CARBON)
   else
     tty = 1;
+#endif
 
   /* --no-wait implies --current-frame on ttys when there are file
        arguments or expressions given.  */
@@ -482,27 +482,32 @@ decode_options (argc, argv)
 void
 print_help_and_exit ()
 {
+  /* Spaces and tabs are significant in this message; they're chosen so the
+     message aligns properly both in a tty and in a Windows message box.
+     Please try to preserve them; otherwise the output is very hard to read
+     when using emacsclientw.  */
   message (FALSE,
           "Usage: %s [OPTIONS] FILE...\n\
 Tell the Emacs server to visit the specified files.\n\
 Every FILE can be either just a FILENAME or [+LINE[:COLUMN]] FILENAME.\n\
 \n\
 The following OPTIONS are accepted:\n\
--V, --version           Just print version info and return\n\
--H, --help              Print this usage information message\n\
--t, --tty               Open a new Emacs frame on the current terminal\n\
--c, --current-frame    Do not create a new frame; use the current Emacs frame\n\
--e, --eval              Evaluate the FILE arguments as ELisp expressions\n\
--n, --no-wait           Don't wait for the server to return\n\
--d, --display=DISPLAY   Visit the file in the given display\n"
+-V, --version          Just print version info and return\n\
+-H, --help             Print this usage information message\n\
+-t, --tty              Open a new Emacs frame on the current terminal\n\
+-c, --current-frame    Do not create a new frame;\n\
+                       use the current Emacs frame\n\
+-e, --eval             Evaluate the FILE arguments as ELisp expressions\n\
+-n, --no-wait          Don't wait for the server to return\n\
+-d, --display=DISPLAY  Visit the file in the given display\n"
 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
 "-s, --socket-name=FILENAME\n\
-                        Set filename of the UNIX socket for communication\n"
+                       Set filename of the UNIX socket for communication\n"
 #endif
 "-f, --server-file=FILENAME\n\
-                        Set filename of the TCP authentication file\n\
+                       Set filename of the TCP authentication file\n\
 -a, --alternate-editor=EDITOR\n\
-                        Editor to fallback to if the server is not running\n\
+                       Editor to fallback to if the server is not running\n\
 \n\
 Report bugs to bug-gnu-emacs@gnu.org.\n", progname);
   exit (EXIT_SUCCESS);
@@ -538,7 +543,7 @@ main (argc, argv)
   main_argv = argv;
   progname = argv[0];
   message (TRUE, "%s: Sorry, the Emacs server is supported only\n"
-          "on systems with Berkeley sockets.\n", 
+          "on systems with Berkeley sockets.\n",
           argv[0]);
   fail ();
 }
@@ -551,8 +556,6 @@ main (argc, argv)
 # include <sys/types.h>
 # include <sys/socket.h>
 # include <sys/un.h>
-# include <sys/stat.h>
-# include <errno.h>
 #endif
 
 #define AUTH_KEY_LENGTH      64
@@ -645,7 +648,7 @@ quote_argument (s, str)
     }
   *q++ = 0;
 
-  SEND_STRING (copy);
+  send_to_emacs (s, copy);
 
   free (copy);
 }
@@ -878,9 +881,9 @@ set_tcp_socket ()
    */
   auth_string[AUTH_KEY_LENGTH] = '\0';
 
-  SEND_STRING ("-auth ");
-  SEND_STRING (auth_string);
-  SEND_STRING ("\n");
+  send_to_emacs (s, "-auth ");
+  send_to_emacs (s, auth_string);
+  send_to_emacs (s, "\n");
 
   return s;
 }
@@ -953,7 +956,7 @@ handle_sigcont (int signalnum)
   if (tcgetpgrp (1) == getpgrp ())
     {
       /* We are in the foreground. */
-      SEND_STRING ("-resume \n");
+      send_to_emacs (emacs_socket, "-resume \n");
     }
   else
     {
@@ -976,9 +979,9 @@ handle_sigtstp (int signalnum)
 {
   int old_errno = errno;
   sigset_t set;
-  
-  if (s)
-    SEND_STRING ("-suspend \n");
+
+  if (emacs_socket)
+    send_to_emacs (emacs_socket, "-suspend \n");
 
   /* Unblock this signal and call the default handler by temprarily
      changing the handler and resignalling. */
@@ -1145,9 +1148,9 @@ HSOCKET
 set_socket ()
 {
   HSOCKET s;
-  
+
   INITIALIZE ();
-  
+
 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
   /* Explicit --socket-name argument.  */
   if (socket_name)
@@ -1170,12 +1173,12 @@ set_socket ()
       s = set_tcp_socket ();
       if ((s != INVALID_SOCKET) || alternate_editor)
        return s;
+
       message (TRUE, "%s: error accessing server file \"%s\"",
               progname, server_file);
       exit (EXIT_FAILURE);
     }
-  
+
 #ifndef NO_SOCKETS_IN_FILE_SYSTEM
   /* Implicit local socket.  */
   s = set_local_socket ();
@@ -1298,9 +1301,9 @@ main (argc, argv)
 #endif
 
   /* First of all, send our version number for verification. */
-  SEND_STRING ("-version ");
-  SEND_STRING (VERSION);
-  SEND_STRING (" ");
+  send_to_emacs (emacs_socket, "-version ");
+  send_to_emacs (emacs_socket, VERSION);
+  send_to_emacs (emacs_socket, " ");
 
   /* Send over our environment. */
   if (!current_frame)
@@ -1311,42 +1314,42 @@ main (argc, argv)
         {
           char *name = xstrdup (environ[i]);
           char *value = strchr (name, '=');
-          SEND_STRING ("-env ");
-          SEND_QUOTED (environ[i]);
-          SEND_STRING (" ");
+          send_to_emacs (emacs_socket, "-env ");
+          quote_argument (emacs_socket, environ[i]);
+          send_to_emacs (emacs_socket, " ");
         }
     }
 
   /* Send over our current directory. */
   if (!current_frame)
     {
-      SEND_STRING ("-dir ");          
-      SEND_QUOTED (cwd);
-      SEND_STRING ("/");
-      SEND_STRING (" ");
+      send_to_emacs (emacs_socket, "-dir ");
+      quote_argument (emacs_socket, cwd);
+      send_to_emacs (emacs_socket, "/");
+      send_to_emacs (emacs_socket, " ");
     }
 
  retry:
   if (nowait)
-    SEND_STRING ("-nowait ");
+    send_to_emacs (emacs_socket, "-nowait ");
 
   if (current_frame)
-    SEND_STRING ("-current-frame ");
-  
+    send_to_emacs (emacs_socket, "-current-frame ");
+
   if (display)
     {
-      SEND_STRING ("-display ");
-      SEND_QUOTED (display);
-      SEND_STRING (" ");
+      send_to_emacs (emacs_socket, "-display ");
+      quote_argument (emacs_socket, display);
+      send_to_emacs (emacs_socket, " ");
     }
 
   if (tty)
     {
+      char *type = getenv ("TERM");
       char *tty_name = NULL;
 #ifndef WINDOWSNT
       tty_name = ttyname (fileno (stdin));
 #endif
-      char *type = getenv ("TERM");
 
       if (! tty_name)
         {
@@ -1372,15 +1375,15 @@ main (argc, argv)
       init_signals ();
 #endif
 
-      SEND_STRING ("-tty ");
-      SEND_QUOTED (tty_name);
-      SEND_STRING (" ");
-      SEND_QUOTED (type);
-      SEND_STRING (" ");
+      send_to_emacs (emacs_socket, "-tty ");
+      quote_argument (emacs_socket, tty_name);
+      send_to_emacs (emacs_socket, " ");
+      quote_argument (emacs_socket, type);
+      send_to_emacs (emacs_socket, " ");
     }
 
   if (window_system)
-    SEND_STRING ("-window-system ");
+    send_to_emacs (emacs_socket, "-window-system ");
 
   if ((argc - optind > 0))
     {
@@ -1391,9 +1394,9 @@ main (argc, argv)
          if (eval)
             {
               /* Don't prepend cwd or anything like that.  */
-              SEND_STRING ("-eval ");
-              SEND_QUOTED (argv[i]);
-              SEND_STRING (" ");
+              send_to_emacs (emacs_socket, "-eval ");
+              quote_argument (emacs_socket, argv[i]);
+              send_to_emacs (emacs_socket, " ");
               continue;
             }
 
@@ -1403,9 +1406,9 @@ main (argc, argv)
              while (isdigit ((unsigned char) *p) || *p == ':') p++;
              if (*p == 0)
                 {
-                  SEND_STRING ("-position ");
-                  SEND_QUOTED (argv[i]);
-                  SEND_STRING (" ");
+                  send_to_emacs (emacs_socket, "-position ");
+                  quote_argument (emacs_socket, argv[i]);
+                  send_to_emacs (emacs_socket, " ");
                   continue;
                 }
               else
@@ -1414,14 +1417,14 @@ main (argc, argv)
           else if (! file_name_absolute_p (argv[i]))
             relative = 1;
 
-          SEND_STRING ("-file ");
+          send_to_emacs (emacs_socket, "-file ");
           if (relative)
             {
-              SEND_QUOTED (cwd);
-              SEND_STRING ("/");
+              quote_argument (emacs_socket, cwd);
+              send_to_emacs (emacs_socket, "/");
             }
-          SEND_QUOTED (argv[i]);
-          SEND_STRING (" ");
+          quote_argument (emacs_socket, argv[i]);
+          send_to_emacs (emacs_socket, " ");
         }
     }
   else
@@ -1431,16 +1434,16 @@ main (argc, argv)
           while ((str = fgets (string, BUFSIZ, stdin)))
             {
               if (eval)
-                SEND_STRING ("-eval ");
+                send_to_emacs (emacs_socket, "-eval ");
               else
-                SEND_STRING ("-file ");
-              SEND_QUOTED (str);
+                send_to_emacs (emacs_socket, "-file ");
+              quote_argument (emacs_socket, str);
             }
-          SEND_STRING (" ");
+          send_to_emacs (emacs_socket, " ");
         }
     }
 
-  SEND_STRING ("\n");
+  send_to_emacs (emacs_socket, "\n");
 
   /* Wait for an answer. */
   if (!eval && !tty && !nowait)