diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2012-03-11 18:54:16 +0100 |
---|---|---|
committer | Andreas Schwab <schwab@linux-m68k.org> | 2012-03-11 18:54:16 +0100 |
commit | ad0bf5b6db5b1d8ea654f62675b2484111594ffc (patch) | |
tree | 70850bfe243cb6484d25e074de2368ee94f98654 /lisp/server.el | |
parent | e29ab36b489e14bda49a2c0e61dac3a7e13e75f1 (diff) | |
download | emacs-ad0bf5b6db5b1d8ea654f62675b2484111594ffc.tar.gz emacs-ad0bf5b6db5b1d8ea654f62675b2484111594ffc.tar.bz2 emacs-ad0bf5b6db5b1d8ea654f62675b2484111594ffc.zip |
* server.el (server-eval-at): Handle non-tcp connections. Decode
result string.
Diffstat (limited to 'lisp/server.el')
-rw-r--r-- | lisp/server.el | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/lisp/server.el b/lisp/server.el index 78b81e0b05b..ed83225eccd 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -1559,34 +1559,39 @@ only these files will be asked to be saved." Returns the result of the evaluation, or signals an error if it cannot contact the specified server. For example: \(server-eval-at \"server\" '(emacs-pid)) -returns the process ID of the Emacs instance running \"server\". -This function requires the use of TCP sockets. " - (or server-use-tcp - (error "This function requires TCP sockets")) - (let ((auth-file (expand-file-name server server-auth-dir)) - (coding-system-for-read 'binary) - (coding-system-for-write 'binary) - address port secret process) - (unless (file-exists-p auth-file) - (error "No such server definition: %s" auth-file)) +returns the process ID of the Emacs instance running \"server\"." + (let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir)) + (server-file (expand-file-name server server-dir)) + (coding-system-for-read 'binary) + (coding-system-for-write 'binary) + address port secret process) + (unless (file-exists-p server-file) + (error "No such server: %s" server)) (with-temp-buffer - (insert-file-contents auth-file) - (unless (looking-at "\\([0-9.]+\\):\\([0-9]+\\)") - (error "Invalid auth file")) - (setq address (match-string 1) - port (string-to-number (match-string 2))) - (forward-line 1) - (setq secret (buffer-substring (point) (line-end-position))) - (erase-buffer) - (unless (setq process (open-network-stream "eval-at" (current-buffer) - address port)) - (error "Unable to contact the server")) - (set-process-query-on-exit-flag process nil) - (process-send-string - process - (concat "-auth " secret " -eval " - (server-quote-arg (format "%S" form)) - "\n")) + (when server-use-tcp + (let ((coding-system-for-read 'no-conversion)) + (insert-file-contents server-file) + (unless (looking-at "\\([0-9.]+\\):\\([0-9]+\\)") + (error "Invalid auth file")) + (setq address (match-string 1) + port (string-to-number (match-string 2))) + (forward-line 1) + (setq secret (buffer-substring (point) (line-end-position))) + (erase-buffer))) + (unless (setq process (make-network-process + :name "eval-at" + :buffer (current-buffer) + :host address + :service (if server-use-tcp port server-file) + :family (if server-use-tcp 'ipv4 'local) + :noquery t)) + (error "Unable to contact the server")) + (if server-use-tcp + (process-send-string process (concat "-auth " secret "\n"))) + (process-send-string process + (concat "-eval " + (server-quote-arg (format "%S" form)) + "\n")) (while (memq (process-status process) '(open run)) (accept-process-output process 0 10)) (goto-char (point-min)) @@ -1600,7 +1605,8 @@ This function requires the use of TCP sockets. " (progn (skip-chars-forward "^\n") (point)))))) (if (not (equal answer "")) - (read (server-unquote-arg answer))))))) + (read (decode-coding-string (server-unquote-arg answer) + 'emacs-internal))))))) (provide 'server) |