Commit | Line | Data |
---|---|---|
974b73e8 KL |
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) |