Mercurial > emacs
comparison lisp/server.el @ 10961:88cba63f2a9b
(server-buffer-done): Return a list
(NEXT-BUFFER KILLED). KILLED is t if we killed the buffer.
(server-edit): Values from server-done is now list of
args for server-switch-buffer.
(server-switch-buffer): Likewise.
(server-switch-buffer): New optional arg KILLED-ONE.
Avoid the other-buffer at the end in that case.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 11 Mar 1995 20:32:48 +0000 |
parents | 44d98e169823 |
children | e6bdaaa6ce1b |
comparison
equal
deleted
inserted
replaced
10960:d6d3905ec550 | 10961:88cba63f2a9b |
---|---|
238 (set-buffer obuf)) | 238 (set-buffer obuf)) |
239 (nconc client client-record))) | 239 (nconc client client-record))) |
240 | 240 |
241 (defun server-buffer-done (buffer) | 241 (defun server-buffer-done (buffer) |
242 "Mark BUFFER as \"done\" for its client(s). | 242 "Mark BUFFER as \"done\" for its client(s). |
243 Buries the buffer, and returns another server buffer | 243 This buries the buffer, then returns a list of the form (NEXT-BUFFER KILLED). |
244 as a suggestion for what to select next." | 244 NEXT-BUFFER is another server buffer, as a suggestion for what to select next, |
245 or nil. KILLED is t if we killed BUFFER (because it was a temp file)." | |
245 (let ((running (eq (process-status server-process) 'run)) | 246 (let ((running (eq (process-status server-process) 'run)) |
246 (next-buffer nil) | 247 (next-buffer nil) |
248 (killed nil) | |
247 (old-clients server-clients)) | 249 (old-clients server-clients)) |
248 (while old-clients | 250 (while old-clients |
249 (let ((client (car old-clients))) | 251 (let ((client (car old-clients))) |
250 (or next-buffer | 252 (or next-buffer |
251 (setq next-buffer (nth 1 (memq buffer client)))) | 253 (setq next-buffer (nth 1 (memq buffer client)))) |
275 (save-excursion | 277 (save-excursion |
276 (set-buffer buffer) | 278 (set-buffer buffer) |
277 (setq server-buffer-clients nil) | 279 (setq server-buffer-clients nil) |
278 (run-hooks 'server-done-hook)) | 280 (run-hooks 'server-done-hook)) |
279 (if (server-temp-file-p buffer) | 281 (if (server-temp-file-p buffer) |
280 (kill-buffer buffer) | 282 (progn (kill-buffer buffer) |
283 (setq killed t)) | |
281 (bury-buffer buffer)))) | 284 (bury-buffer buffer)))) |
282 next-buffer)) | 285 (list next-buffer killed))) |
283 | 286 |
284 (defun server-temp-file-p (buffer) | 287 (defun server-temp-file-p (buffer) |
285 "Return non-nil if BUFFER contains a file considered temporary. | 288 "Return non-nil if BUFFER contains a file considered temporary. |
286 These are files whose names suggest they are repeatedly | 289 These are files whose names suggest they are repeatedly |
287 reused to pass information to another program. | 290 reused to pass information to another program. |
291 (and (buffer-file-name buffer) | 294 (and (buffer-file-name buffer) |
292 (string-match server-temp-file-regexp (buffer-file-name buffer)))) | 295 (string-match server-temp-file-regexp (buffer-file-name buffer)))) |
293 | 296 |
294 (defun server-done () | 297 (defun server-done () |
295 "Offer to save current buffer, mark it as \"done\" for clients. | 298 "Offer to save current buffer, mark it as \"done\" for clients. |
296 Then bury it, and return a suggested buffer to select next." | 299 This buries the buffer, then returns a list of the form (NEXT-BUFFER KILLED). |
300 NEXT-BUFFER is another server buffer, as a suggestion for what to select next, | |
301 or nil. KILLED is t if we killed the BUFFER (because it was a temp file)." | |
297 (let ((buffer (current-buffer))) | 302 (let ((buffer (current-buffer))) |
298 (if server-buffer-clients | 303 (if server-buffer-clients |
299 (progn | 304 (progn |
300 (if (server-temp-file-p buffer) | 305 (if (server-temp-file-p buffer) |
301 ;; For a temp file, save, and do make a non-numeric backup | 306 ;; For a temp file, save, and do make a non-numeric backup |
349 (interactive "P") | 354 (interactive "P") |
350 (if (or arg | 355 (if (or arg |
351 (not server-process) | 356 (not server-process) |
352 (memq (process-status server-process) '(signal exit))) | 357 (memq (process-status server-process) '(signal exit))) |
353 (server-start nil) | 358 (server-start nil) |
354 (server-switch-buffer (server-done)))) | 359 (apply 'server-switch-buffer (server-done)))) |
355 | 360 |
356 (defun server-switch-buffer (next-buffer) | 361 (defun server-switch-buffer (next-buffer &optional killed-one) |
357 "Switch to another buffer, preferably one that has a client. | 362 "Switch to another buffer, preferably one that has a client. |
358 Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it." | 363 Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it." |
364 ;; KILLED-ONE is t in a recursive call | |
365 ;; if we have already killed one temp-file server buffer. | |
366 ;; This means we should avoid the final "switch to some other buffer" | |
367 ;; since we've already effectively done that. | |
359 (cond ((and (windowp server-window) | 368 (cond ((and (windowp server-window) |
360 (window-live-p server-window)) | 369 (window-live-p server-window)) |
361 (select-window server-window)) | 370 (select-window server-window)) |
362 ((framep server-window) | 371 ((framep server-window) |
363 (if (not (frame-live-p server-window)) | 372 (if (not (frame-live-p server-window)) |
376 (buffer-name next-buffer)) | 385 (buffer-name next-buffer)) |
377 (switch-to-buffer next-buffer) | 386 (switch-to-buffer next-buffer) |
378 ;; If NEXT-BUFFER is a dead buffer, | 387 ;; If NEXT-BUFFER is a dead buffer, |
379 ;; remove the server records for it | 388 ;; remove the server records for it |
380 ;; and try the next surviving server buffer. | 389 ;; and try the next surviving server buffer. |
381 (server-switch-buffer | 390 (apply 'server-switch-buffer |
382 (server-buffer-done next-buffer))) | 391 (server-buffer-done next-buffer))) |
383 (if server-clients | 392 (if server-clients |
384 (server-switch-buffer (nth 1 (car server-clients))) | 393 (server-switch-buffer (nth 1 (car server-clients)) killed-one) |
385 (switch-to-buffer (other-buffer))))) | 394 (if (not killed-one) |
395 (switch-to-buffer (other-buffer)))))) | |
386 | 396 |
387 (global-set-key "\C-x#" 'server-edit) | 397 (global-set-key "\C-x#" 'server-edit) |
388 | 398 |
389 (provide 'server) | 399 (provide 'server) |
390 | 400 |