Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
[bpt/emacs.git] / s.diff
1 --- orig/lisp/server.el
2 +++ mod/lisp/server.el
3 @@ -83,18 +83,54 @@
4 "Emacs running as a server process."
5 :group 'external)
6
7 +(defcustom server-use-tcp nil
8 + "If non-nil, use TCP sockets instead of local sockets."
9 + :set #'(lambda (sym val)
10 + (unless (featurep 'make-network-process '(:family local))
11 + (setq val t)
12 + (unless load-in-progress
13 + (message "Local sockets unsupported, using TCP sockets")))
14 + (when val (random t))
15 + (set-default sym val))
16 + :group 'server
17 + :type 'boolean
18 + :version "22.1")
19 +
20 +(defcustom server-host nil
21 + "The name or IP address to use as host address of the server process.
22 +If set, the server accepts remote connections; otherwise it is local."
23 + :group 'server
24 + :type '(choice
25 + (string :tag "Name or IP address")
26 + (const :tag "Local" nil))
27 + :version "22.1")
28 +(put 'server-host 'risky-local-variable t)
29 +
30 +(defcustom server-auth-dir "~/.emacs.d/server/"
31 + "Directory for server authentication files."
32 + :group 'server
33 + :type 'directory
34 + :version "22.1")
35 +(put 'server-auth-dir 'risky-local-variable t)
36 +
37 +(defcustom server-raise-frame t
38 + "If non-nil, raise frame when switching to a buffer."
39 + :group 'server
40 + :type 'boolean
41 + :version "22.1")
42 +
43 (defcustom server-visit-hook nil
44 - "*Hook run when visiting a file for the Emacs server."
45 + "Hook run when visiting a file for the Emacs server."
46 :group 'server
47 :type 'hook)
48
49 (defcustom server-switch-hook nil
50 - "*Hook run when switching to a buffer for the Emacs server."
51 + "Hook run when switching to a buffer for the Emacs server."
52 :group 'server
53 :type 'hook)
54
55 (defcustom server-done-hook nil
56 - "*Hook run when done editing a buffer for the Emacs server."
57 + "Hook run when done editing a buffer for the Emacs server."
58 :group 'server
59 :type 'hook)
60
61 @@ -113,7 +149,7 @@
62 (put 'server-buffer-clients 'permanent-local t)
63
64 (defcustom server-window nil
65 - "*Specification of the window to use for selecting Emacs server buffers.
66 + "Specification of the window to use for selecting Emacs server buffers.
67 If nil, use the selected window.
68 If it is a function, it should take one argument (a buffer) and
69 display and select it. A common value is `pop-to-buffer'.
70 @@ -132,14 +168,14 @@
71 (function :tag "Other function")))
72
73 (defcustom server-temp-file-regexp "^/tmp/Re\\|/draft$"
74 - "*Regexp matching names of temporary files.
75 + "Regexp matching names of temporary files.
76 These are deleted and reused after each edit by the programs that
77 invoke the Emacs server."
78 :group 'server
79 :type 'regexp)
80
81 (defcustom server-kill-new-buffers t
82 - "*Whether to kill buffers when done with them.
83 + "Whether to kill buffers when done with them.
84 If non-nil, kill a buffer unless it already existed before editing
85 it with Emacs server. If nil, kill only buffers as specified by
86 `server-temp-file-regexp'.
87 @@ -151,7 +187,7 @@
88 :version "21.1")
89
90 (or (assq 'server-buffer-clients minor-mode-alist)
91 - (setq minor-mode-alist (cons '(server-buffer-clients " Server") minor-mode-alist)))
92 + (push '(server-buffer-clients " Server") minor-mode-alist))
93
94 (defvar server-existing-buffer nil
95 "Non-nil means the buffer existed before the server was asked to visit it.
96 @@ -390,11 +426,12 @@
97 (setq dir (directory-file-name dir))
98 (let ((attrs (file-attributes dir)))
99 (unless attrs
100 - (letf (((default-file-modes) ?\700)) (make-directory dir))
101 + (letf (((default-file-modes) ?\700)) (make-directory dir t))
102 (setq attrs (file-attributes dir)))
103 ;; Check that it's safe for use.
104 (unless (and (eq t (car attrs)) (eq (nth 2 attrs) (user-uid))
105 - (zerop (logand ?\077 (file-modes dir))))
106 + (or (eq system-type 'windows-nt)
107 + (zerop (logand ?\077 (file-modes dir)))))
108 (error "The directory %s is unsafe" dir))))
109
110 ;;;###autoload
111 @@ -966,10 +1003,10 @@
112 (let ((version-control nil)
113 (buffer-backed-up nil))
114 (save-buffer))
115 - (if (and (buffer-modified-p)
116 - buffer-file-name
117 - (y-or-n-p (concat "Save file " buffer-file-name "? ")))
118 - (save-buffer)))
119 + (when (and (buffer-modified-p)
120 + buffer-file-name
121 + (y-or-n-p (concat "Save file " buffer-file-name "? ")))
122 + (save-buffer)))
123 (server-buffer-done (current-buffer))))
124
125 ;; Ask before killing a server buffer.
126 @@ -1027,12 +1064,12 @@
127 starts server process and that is all. Invoked by \\[server-edit]."
128 (interactive "P")
129 (cond
130 - ((or arg
131 - (not server-process)
132 - (memq (process-status server-process) '(signal exit)))
133 - (server-mode 1))
134 - (server-clients (apply 'server-switch-buffer (server-done)))
135 - (t (message "No server editing buffers exist"))))
136 + ((or arg
137 + (not server-process)
138 + (memq (process-status server-process) '(signal exit)))
139 + (server-mode 1))
140 + (server-clients (apply 'server-switch-buffer (server-done)))
141 + (t (message "No server editing buffers exist"))))
142
143 (defun server-switch-buffer (&optional next-buffer killed-one)
144 "Switch to another buffer, preferably one that has a client.
145 @@ -1065,21 +1102,19 @@
146 (let ((win (get-buffer-window next-buffer 0)))
147 (if (and win (not server-window))
148 ;; The buffer is already displayed: just reuse the window.
149 - (let ((frame (window-frame win)))
150 - (if (eq (frame-visible-p frame) 'icon)
151 - (raise-frame frame))
152 - (select-window win)
153 - (set-buffer next-buffer))
154 + (progn
155 + (select-window win)
156 + (set-buffer next-buffer))
157 ;; Otherwise, let's find an appropriate window.
158 (cond ((and (windowp server-window)
159 (window-live-p server-window))
160 (select-window server-window))
161 ((framep server-window)
162 - (if (not (frame-live-p server-window))
163 - (setq server-window (make-frame)))
164 + (unless (frame-live-p server-window)
165 + (setq server-window (make-frame)))
166 (select-window (frame-selected-window server-window))))
167 - (if (window-minibuffer-p (selected-window))
168 - (select-window (next-window nil 'nomini 0)))
169 + (when (window-minibuffer-p (selected-window))
170 + (select-window (next-window nil 'nomini 0)))
171 ;; Move to a non-dedicated window, if we have one.
172 (when (window-dedicated-p (selected-window))
173 (select-window
174 @@ -1093,7 +1128,9 @@
175 (switch-to-buffer next-buffer)
176 ;; After all the above, we might still have ended up with
177 ;; a minibuffer/dedicated-window (if there's no other).
178 - (error (pop-to-buffer next-buffer)))))))))
179 + (error (pop-to-buffer next-buffer)))))))
180 + (when server-raise-frame
181 + (select-frame-set-input-focus (window-frame (selected-window))))))
182
183 ;;;###autoload
184 (defun server-save-buffers-kill-terminal (proc &optional arg)