]> code.delx.au - gnu-emacs/blobdiff - lisp/server.el
(dirtrack-list): Fix typos in docstring.
[gnu-emacs] / lisp / server.el
index 3a8bede9f951d1ad550904fe307405375624de02..48ff50f3dbcce2d3e5b4b62c8ab00105504a6d78 100644 (file)
@@ -23,8 +23,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
@@ -123,7 +123,7 @@ If it is a frame, use the frame's selected window.
 It is not meaningful to set this to a specific frame or window with Custom.
 Only programs can do so."
   :group 'server
-  :version "21.4"
+  :version "22.1"
   :type '(choice (const :tag "Use selected window"
                        :match (lambda (widget value)
                                 (not (functionp value)))
@@ -282,7 +282,7 @@ Server mode runs a process that accepts commands from the
 `emacsclient' program.  See `server-start' and Info node `Emacs server'."
   :global t
   :group 'server
-  :version "21.4"
+  :version "22.1"
   ;; Fixme: Should this check for an existing server socket and do
   ;; nothing if there is one (for multiple Emacs sessions)?
   (server-start (not server-mode)))
@@ -305,6 +305,7 @@ PROC is the server process.  Format of STRING is \"PATH PATH PATH... \\n\"."
          client nowait eval
          (files nil)
          (lineno 1)
+         (tmp-frame nil) ; Sometimes used to embody the selected display.
          (columnno 0))
       ;; Remove this line from STRING.
       (setq string (substring string (match-end 0)))
@@ -319,16 +320,16 @@ PROC is the server process.  Format of STRING is \"PATH PATH PATH... \\n\"."
            (let ((display (server-unquote-arg (match-string 1 request))))
              (setq request (substring request (match-end 0)))
              (condition-case err
-                 (server-select-display display)
+                 (setq tmp-frame (server-select-display display))
                (error (process-send-string proc (nth 1 err))
                       (setq request "")))))
           ;; ARG is a line number option.
           ((string-match "\\`\\+[0-9]+\\'" arg)
-           (setq lineno (string-to-int (substring arg 1))))
+           (setq lineno (string-to-number (substring arg 1))))
           ;; ARG is line number:column option.
           ((string-match "\\`+\\([0-9]+\\):\\([0-9]+\\)\\'" arg)
-           (setq lineno (string-to-int (match-string 1 arg))
-                 columnno (string-to-int (match-string 2 arg))))
+           (setq lineno (string-to-number (match-string 1 arg))
+                 columnno (string-to-number (match-string 2 arg))))
           (t
            ;; Undo the quoting that emacsclient does
            ;; for certain special characters.
@@ -342,7 +343,12 @@ PROC is the server process.  Format of STRING is \"PATH PATH PATH... \\n\"."
                    (with-temp-buffer
                      (let ((standard-output (current-buffer)))
                        (pp v)
-                       (process-send-region proc (point-min) (point-max))))))
+                       ;; Suppress the error rose when the pipe to PROC is closed.
+                       (condition-case err
+                           (process-send-region proc (point-min) (point-max))
+                         (file-error nil)
+                         (error nil))
+                       ))))
              ;; ARG is a file name.
              ;; Collapse multiple slashes to single slashes.
              (setq arg (command-line-normalize-file-name arg))
@@ -366,7 +372,9 @@ PROC is the server process.  Format of STRING is \"PATH PATH PATH... \\n\"."
          (run-hooks 'server-switch-hook)
          (unless nowait
            (message (substitute-command-keys
-                     "When done with a buffer, type \\[server-edit]")))))))
+                     "When done with a buffer, type \\[server-edit]")))))
+      ;; Avoid preserving the connection after the last real frame is deleted.
+      (if tmp-frame (delete-frame tmp-frame))))
   ;; Save for later any partial line that remains.
   (when (> (length string) 0)
     (process-put proc 'previous-string string)))
@@ -617,13 +625,15 @@ Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it."
              ;; a minibuffer/dedicated-window (if there's no other).
              (error (pop-to-buffer next-buffer)))))))))
 
-(global-set-key "\C-x#" 'server-edit)
+(define-key ctl-x-map "#" 'server-edit)
 
 (defun server-unload-hook ()
   (server-start t)
   (remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)
   (remove-hook 'kill-emacs-query-functions 'server-kill-emacs-query-function)
   (remove-hook 'kill-buffer-hook 'server-kill-buffer))
+
+(add-hook 'server-unload-hook 'server-unload-hook)
 \f
 (provide 'server)