From: Stefan Monnier Date: Tue, 22 Nov 2011 15:18:56 +0000 (-0500) Subject: * lisp/server.el (server-eval-and-print): Allow C-g. X-Git-Tag: emacs-pretest-24.0.92~84 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=28109f49967302bec7f1a96e8460c75244f55419;p=emacs.git * lisp/server.el (server-eval-and-print): Allow C-g. Fixes: debbugs:6585 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 37ecd3e6852..b30f9dcfab5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2011-11-22 Stefan Monnier + + * server.el (server-eval-and-print): Allow C-g (bug#6585). + 2011-11-22 Glenn Morris * mail/rmailmm.el (test-rmail-mime-handler) diff --git a/lisp/server.el b/lisp/server.el index bc989c55ed1..e02f63a8268 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -685,7 +685,14 @@ Server mode runs a process that accepts commands from the (defun server-eval-and-print (expr proc) "Eval EXPR and send the result back to client PROC." - (let ((v (eval (car (read-from-string expr))))) + ;; While we're running asynchronously (from a process filter), it is likely + ;; that the emacsclient command was run in response to a user + ;; action, so the user probably knows that Emacs is processing this + ;; emacsclient request, so if we get a C-g it's likely that the user + ;; intended it to interrupt us rather than interrupt whatever Emacs + ;; was doing before it started handling the process filter. + ;; Hence `with-local-quit' (bug#6585). + (let ((v (with-local-quit (eval (car (read-from-string expr)))))) (when proc (with-temp-buffer (let ((standard-output (current-buffer)))