aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2009-02-07 16:24:36 +0000
committerStefan Monnier2009-02-07 16:24:36 +0000
commit7197f5de6fc84b7da74183e2b87eab9bb593fe5c (patch)
tree48a591616d3eddc9174db089b6617b4676e6e012
parentd2e9b790b7512af4044eb3f4b7b467f0ec54e2a0 (diff)
downloademacs-7197f5de6fc84b7da74183e2b87eab9bb593fe5c.tar.gz
emacs-7197f5de6fc84b7da74183e2b87eab9bb593fe5c.zip
(server-execute): Enable quit.
-rw-r--r--lisp/ChangeLog8
-rw-r--r--lisp/server.el74
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 @@
12009-02-07 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * server.el (server-execute): Enable quit.
4
12009-02-07 Andreas Schwab <schwab@suse.de> 52009-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
252009-02-07 Eli Zaretskii <eliz@gnu.org> 292009-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