* fix error handling (with errors in the proc-filter context)

This commit is contained in:
djcb 2012-07-24 01:33:52 +03:00
parent d92ad056e1
commit fd65b992d5
2 changed files with 16 additions and 15 deletions

View File

@ -65,14 +65,15 @@ the length (in hex).")
(list (concat "--muhome=" mu4e-mu-home)))))) (list (concat "--muhome=" mu4e-mu-home))))))
(setq mu4e~proc-buf "") (setq mu4e~proc-buf "")
(setq mu4e~proc-process (apply 'start-process (setq mu4e~proc-process (apply 'start-process
mu4e~proc-name mu4e~proc-name mu4e~proc-name mu4e~proc-name
mu4e-mu-binary args)) mu4e-mu-binary args))
;; register a function for (:info ...) sexps ;; register a function for (:info ...) sexps
(when mu4e~proc-process (unless mu4e~proc-process
(set-process-query-on-exit-flag mu4e~proc-process nil) (mu4e-error "Failed to start the mu4e backend"))
(set-process-coding-system mu4e~proc-process 'binary 'utf-8-unix) (set-process-query-on-exit-flag mu4e~proc-process nil)
(set-process-filter mu4e~proc-process 'mu4e~proc-filter) (set-process-coding-system mu4e~proc-process 'binary 'utf-8-unix)
(set-process-sentinel mu4e~proc-process 'mu4e~proc-sentinel)))) (set-process-filter mu4e~proc-process 'mu4e~proc-filter)
(set-process-sentinel mu4e~proc-process 'mu4e~proc-sentinel)))
(defun mu4e~proc-kill () (defun mu4e~proc-kill ()
"Kill the mu server process." "Kill the mu server process."
@ -275,18 +276,18 @@ terminates."
(cond (cond
((eq code 9) (message nil)) ((eq code 9) (message nil))
;;(message "the mu server process has been stopped")) ;;(message "the mu server process has been stopped"))
(t (mu4e-message (format "mu server process received signal %d" code))))) (t (error (format "mu server process received signal %d" code)))))
((eq status 'exit) ((eq status 'exit)
(cond (cond
((eq code 0) ((eq code 0)
(message nil)) ;; don't do anything (message nil)) ;; don't do anything
((eq code 11) ((eq code 11)
(mu4e-message "Database is locked by another process")) (error "Database is locked by another process"))
((eq code 19) ((eq code 19)
(mu4e-message "Database empty; try indexing some messages")) (error "Database empty; try indexing some messages"))
(t (mu4e-message "mu server process ended with exit code %d" code)))) (t (error "mu server process ended with exit code %d" code))))
(t (t
(mu4e-message "Something bad happened to the mu server process"))))) (error "Something bad happened to the mu server process")))))
(defun mu4e~proc-send-command (frm &rest args) (defun mu4e~proc-send-command (frm &rest args)
"Send as command to the mu server process; start the process if needed." "Send as command to the mu server process; start the process if needed."

View File

@ -525,9 +525,10 @@ process."
(defun mu4e-error-handler (errcode errmsg) (defun mu4e-error-handler (errcode errmsg)
"Handler function for showing an error." "Handler function for showing an error."
;; don't use mu4e-error here; it's running in the process filter ctx
(case errcode (case errcode
(4 (mu4e-error "No matches for this search query.")) (4 (error "No matches for this search query."))
(t (mu4e-error "Error %d: %s" errcode errmsg)))) (t (error "Error %d: %s" errcode errmsg))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -625,7 +626,6 @@ FUNC (if non-nil) afterwards."
;; better to check for specific features ;; better to check for specific features
(unless (>= emacs-major-version 23) (unless (>= emacs-major-version 23)
(mu4e-error "Emacs >= 23.x is required for mu4e")) (mu4e-error "Emacs >= 23.x is required for mu4e"))
;; set up the 'pong' handler func ;; set up the 'pong' handler func
(lexical-let ((func func)) (lexical-let ((func func))
(setq mu4e-pong-func (setq mu4e-pong-func