>From 29834672b5931226fc5cb2ff7beb707fb980f190 Mon Sep 17 00:00:00 2001 From: Thomas Fitzsimmons Date: Thu, 13 Nov 2014 02:35:54 -0500 Subject: [PATCH 12/16] Restore former eudc-expand-inline settings after a nonlocal exit * net/eudc.el (eudc-expand-inline): Always restore former server and protocol. --- lisp/ChangeLog | 5 ++ lisp/net/eudc.el | 146 +++++++++++++++++++++++++++---------------------------- 2 files changed, 77 insertions(+), 74 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6d48bad..407c6cd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2014-11-13 Thomas Fitzsimmons + * net/eudc.el (eudc-expand-inline): Always restore former server + and protocol. + +2014-11-13 Thomas Fitzsimmons + * net/eudcb-ldap.el: Don't nag the user in case a default base is provided by the LDAP system configuration file. diff --git a/lisp/net/eudc.el b/lisp/net/eudc.el index 2a21581..352ce74 100644 --- a/lisp/net/eudc.el +++ b/lisp/net/eudc.el @@ -856,80 +856,78 @@ see `eudc-inline-expansion-servers'" (> (length servers) eudc-max-servers-to-query)) (setcdr (nthcdr (1- eudc-max-servers-to-query) servers) nil)) - (condition-case signal - (progn - (setq response - (catch 'found - ;; Loop on the servers - (while servers - (eudc-set-server (eudc-caar servers) (eudc-cdar servers) t) - - ;; Determine which formats apply in the query-format list - (setq query-formats - (or - (eudc-extract-n-word-formats eudc-inline-query-format - (length query-words)) - (if (null eudc-protocol-has-default-query-attributes) - '(name)))) - - ;; Loop on query-formats - (while query-formats - (setq response - (eudc-query - (eudc-format-query query-words (car query-formats)) - (eudc-translate-attribute-list - (cdr eudc-inline-expansion-format)))) - (if response - (throw 'found response)) - (setq query-formats (cdr query-formats))) - (setq servers (cdr servers))) - ;; No more servers to try... no match found - nil)) - - - (if (null response) - (error "No match") - - ;; Process response through eudc-inline-expansion-format - (while response - (setq response-string (apply 'format - (car eudc-inline-expansion-format) - (mapcar (function - (lambda (field) - (or (cdr (assq field (car response))) - ""))) - (eudc-translate-attribute-list - (cdr eudc-inline-expansion-format))))) - (if (> (length response-string) 0) - (setq response-strings - (cons response-string response-strings))) - (setq response (cdr response))) - - (if (or - (and replace (not eudc-expansion-overwrites-query)) - (and (not replace) eudc-expansion-overwrites-query)) - (kill-ring-save beg end)) - (cond - ((or (= (length response-strings) 1) - (null eudc-multiple-match-handling-method) - (eq eudc-multiple-match-handling-method 'first)) - (delete-region beg end) - (insert (car response-strings))) - ((eq eudc-multiple-match-handling-method 'select) - (eudc-select response-strings beg end)) - ((eq eudc-multiple-match-handling-method 'all) - (delete-region beg end) - (insert (mapconcat 'identity response-strings ", "))) - ((eq eudc-multiple-match-handling-method 'abort) - (error "There is more than one match for the query")))) - (or (and (equal eudc-server eudc-former-server) - (equal eudc-protocol eudc-former-protocol)) - (eudc-set-server eudc-former-server eudc-former-protocol t))) - (error - (or (and (equal eudc-server eudc-former-server) - (equal eudc-protocol eudc-former-protocol)) - (eudc-set-server eudc-former-server eudc-former-protocol t)) - (signal (car signal) (cdr signal)))))) + (unwind-protect + (condition-case signal + (progn + (setq response + (catch 'found + ;; Loop on the servers + (while servers + (eudc-set-server (eudc-caar servers) (eudc-cdar servers) t) + + ;; Determine which formats apply in the query-format list + (setq query-formats + (or + (eudc-extract-n-word-formats eudc-inline-query-format + (length query-words)) + (if (null eudc-protocol-has-default-query-attributes) + '(name)))) + + ;; Loop on query-formats + (while query-formats + (setq response + (eudc-query + (eudc-format-query query-words (car query-formats)) + (eudc-translate-attribute-list + (cdr eudc-inline-expansion-format)))) + (if response + (throw 'found response)) + (setq query-formats (cdr query-formats))) + (setq servers (cdr servers))) + ;; No more servers to try... no match found + nil)) + + + (if (null response) + (error "No match") + + ;; Process response through eudc-inline-expansion-format + (while response + (setq response-string (apply 'format + (car eudc-inline-expansion-format) + (mapcar (function + (lambda (field) + (or (cdr (assq field (car response))) + ""))) + (eudc-translate-attribute-list + (cdr eudc-inline-expansion-format))))) + (if (> (length response-string) 0) + (setq response-strings + (cons response-string response-strings))) + (setq response (cdr response))) + + (if (or + (and replace (not eudc-expansion-overwrites-query)) + (and (not replace) eudc-expansion-overwrites-query)) + (kill-ring-save beg end)) + (cond + ((or (= (length response-strings) 1) + (null eudc-multiple-match-handling-method) + (eq eudc-multiple-match-handling-method 'first)) + (delete-region beg end) + (insert (car response-strings))) + ((eq eudc-multiple-match-handling-method 'select) + (eudc-select response-strings beg end)) + ((eq eudc-multiple-match-handling-method 'all) + (delete-region beg end) + (insert (mapconcat 'identity response-strings ", "))) + ((eq eudc-multiple-match-handling-method 'abort) + (error "There is more than one match for the query"))))) + (error + (signal (car signal) (cdr signal)))) + (or (and (equal eudc-server eudc-former-server) + (equal eudc-protocol eudc-former-protocol)) + (eudc-set-server eudc-former-server eudc-former-protocol t))))) ;;;###autoload (defun eudc-query-form (&optional get-fields-from-server) -- 1.8.1.4