emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 81d0909 12/17: Restore former eudc-expand-inline se


From: Stefan Monnier
Subject: [Emacs-diffs] master 81d0909 12/17: Restore former eudc-expand-inline settings after a nonlocal exit
Date: Fri, 23 Jan 2015 22:20:34 +0000

branch: master
commit 81d0909b70991e95be2993d7793c11a9e8a535ee
Author: Thomas Fitzsimmons <address@hidden>
Commit: Thomas Fitzsimmons <address@hidden>

    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 d7bef51..d395f2e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,10 @@
 2014-11-13  Thomas Fitzsimmons  <address@hidden>
 
+       * net/eudc.el (eudc-expand-inline): Always restore former server
+       and protocol.
+
+2014-11-13  Thomas Fitzsimmons  <address@hidden>
+
        * 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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]