diff options
| -rw-r--r-- | lisp/ChangeLog | 8 | ||||
| -rw-r--r-- | lisp/server.el | 74 |
2 files changed, 47 insertions, 35 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1b0e40ef29c..d9ff7e63911 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2009-02-07 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 2 | |||
| 3 | * server.el (server-execute): Enable quit. | ||
| 4 | |||
| 1 | 2009-02-07 Andreas Schwab <schwab@suse.de> | 5 | 2009-02-07 Andreas Schwab <schwab@suse.de> |
| 2 | 6 | ||
| 3 | * image-mode.el (image-mode): Always set image-type. | 7 | * image-mode.el (image-mode): Always set image-type. |
| @@ -19,8 +23,8 @@ | |||
| 19 | 23 | ||
| 20 | * mail/rmailedit.el (rmail-cease-edit): narrow-to-region before | 24 | * mail/rmailedit.el (rmail-cease-edit): narrow-to-region before |
| 21 | extracting mail message headers. Use encode-coding-region instead | 25 | extracting mail message headers. Use encode-coding-region instead |
| 22 | of insert-buffer-substring for re-encoding edited message. Add | 26 | of insert-buffer-substring for re-encoding edited message. |
| 23 | qp/b64 encoding only after text was encoded. | 27 | Add qp/b64 encoding only after text was encoded. |
| 24 | 28 | ||
| 25 | 2009-02-07 Eli Zaretskii <eliz@gnu.org> | 29 | 2009-02-07 Eli Zaretskii <eliz@gnu.org> |
| 26 | 30 | ||
diff --git a/lisp/server.el b/lisp/server.el index 5f7cc50e35a..7f6eeed9311 100644 --- a/lisp/server.el +++ b/lisp/server.el | |||
| @@ -1036,40 +1036,48 @@ The following commands are accepted by the client: | |||
| 1036 | (error (server-return-error proc err)))) | 1036 | (error (server-return-error proc err)))) |
| 1037 | 1037 | ||
| 1038 | (defun server-execute (proc files nowait commands dontkill frame tty-name) | 1038 | (defun server-execute (proc files nowait commands dontkill frame tty-name) |
| 1039 | (condition-case err | 1039 | ;; This is run from timers and process-filters, i.e. "asynchronously". |
| 1040 | (let* ((buffers | 1040 | ;; But w.r.t the user, this is not really asynchronous since the timer |
| 1041 | (when files | 1041 | ;; is run after 0s and the process-filter is run in response to the |
| 1042 | (run-hooks 'pre-command-hook) | 1042 | ;; user running `emacsclient'. So it is OK to override the |
| 1043 | (prog1 (server-visit-files files proc nowait) | 1043 | ;; inhibit-quit flag, which is good since `commands' (as well as |
| 1044 | (run-hooks 'post-command-hook))))) | 1044 | ;; find-file-noselect via the major-mode) can run arbitrary code, |
| 1045 | 1045 | ;; including code that needs to wait. | |
| 1046 | (mapc 'funcall (nreverse commands)) | 1046 | (with-local-quit |
| 1047 | 1047 | (condition-case err | |
| 1048 | ;; Delete the client if necessary. | 1048 | (let* ((buffers |
| 1049 | (cond | 1049 | (when files |
| 1050 | (nowait | 1050 | (run-hooks 'pre-command-hook) |
| 1051 | ;; Client requested nowait; return immediately. | 1051 | (prog1 (server-visit-files files proc nowait) |
| 1052 | (server-log "Close nowait client" proc) | 1052 | (run-hooks 'post-command-hook))))) |
| 1053 | (server-delete-client proc)) | 1053 | |
| 1054 | ((and (not dontkill) (null buffers)) | 1054 | (mapc 'funcall (nreverse commands)) |
| 1055 | ;; This client is empty; get rid of it immediately. | 1055 | |
| 1056 | (server-log "Close empty client" proc) | 1056 | ;; Delete the client if necessary. |
| 1057 | (server-delete-client proc))) | 1057 | (cond |
| 1058 | (cond | 1058 | (nowait |
| 1059 | ((or isearch-mode (minibufferp)) | 1059 | ;; Client requested nowait; return immediately. |
| 1060 | nil) | 1060 | (server-log "Close nowait client" proc) |
| 1061 | ((and frame (null buffers)) | 1061 | (server-delete-client proc)) |
| 1062 | (message "%s" (substitute-command-keys | 1062 | ((and (not dontkill) (null buffers)) |
| 1063 | "When done with this frame, type \\[delete-frame]"))) | 1063 | ;; This client is empty; get rid of it immediately. |
| 1064 | ((not (null buffers)) | 1064 | (server-log "Close empty client" proc) |
| 1065 | (server-switch-buffer (car buffers) nil (cdr (car files))) | 1065 | (server-delete-client proc))) |
| 1066 | (run-hooks 'server-switch-hook) | 1066 | (cond |
| 1067 | (unless nowait | 1067 | ((or isearch-mode (minibufferp)) |
| 1068 | nil) | ||
| 1069 | ((and frame (null buffers)) | ||
| 1068 | (message "%s" (substitute-command-keys | 1070 | (message "%s" (substitute-command-keys |
| 1069 | "When done with a buffer, type \\[server-edit]"))))) | 1071 | "When done with this frame, type \\[delete-frame]"))) |
| 1070 | (when (and frame (null tty-name)) | 1072 | ((not (null buffers)) |
| 1071 | (server-unselect-display frame))) | 1073 | (server-switch-buffer (car buffers) nil (cdr (car files))) |
| 1072 | (error (server-return-error proc err)))) | 1074 | (run-hooks 'server-switch-hook) |
| 1075 | (unless nowait | ||
| 1076 | (message "%s" (substitute-command-keys | ||
| 1077 | "When done with a buffer, type \\[server-edit]"))))) | ||
| 1078 | (when (and frame (null tty-name)) | ||
| 1079 | (server-unselect-display frame))) | ||
| 1080 | (error (server-return-error proc err))))) | ||
| 1073 | 1081 | ||
| 1074 | (defun server-return-error (proc err) | 1082 | (defun server-return-error (proc err) |
| 1075 | (ignore-errors | 1083 | (ignore-errors |