aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Fitzsimmons2014-11-13 02:35:54 -0500
committerThomas Fitzsimmons2014-11-13 02:41:00 -0500
commit81d0909b70991e95be2993d7793c11a9e8a535ee (patch)
treea86653cabb23d3c15f36a150a98dda0948216fa6
parent78602273d2c377c1c844e2f412e3d1769ae87aff (diff)
downloademacs-81d0909b70991e95be2993d7793c11a9e8a535ee.tar.gz
emacs-81d0909b70991e95be2993d7793c11a9e8a535ee.zip
Restore former eudc-expand-inline settings after a nonlocal exit
* net/eudc.el (eudc-expand-inline): Always restore former server and protocol.
-rw-r--r--lisp/ChangeLog5
-rw-r--r--lisp/net/eudc.el146
2 files changed, 77 insertions, 74 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d7bef5138f8..d395f2e3af6 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,10 @@
12014-11-13 Thomas Fitzsimmons <fitzsim@fitzsim.org> 12014-11-13 Thomas Fitzsimmons <fitzsim@fitzsim.org>
2 2
3 * net/eudc.el (eudc-expand-inline): Always restore former server
4 and protocol.
5
62014-11-13 Thomas Fitzsimmons <fitzsim@fitzsim.org>
7
3 * net/eudcb-ldap.el: Don't nag the user in case a default base is 8 * net/eudcb-ldap.el: Don't nag the user in case a default base is
4 provided by the LDAP system configuration file. 9 provided by the LDAP system configuration file.
5 10
diff --git a/lisp/net/eudc.el b/lisp/net/eudc.el
index 2a215810ede..352ce74c892 100644
--- a/lisp/net/eudc.el
+++ b/lisp/net/eudc.el
@@ -856,80 +856,78 @@ see `eudc-inline-expansion-servers'"
856 (> (length servers) eudc-max-servers-to-query)) 856 (> (length servers) eudc-max-servers-to-query))
857 (setcdr (nthcdr (1- eudc-max-servers-to-query) servers) nil)) 857 (setcdr (nthcdr (1- eudc-max-servers-to-query) servers) nil))
858 858
859 (condition-case signal 859 (unwind-protect
860 (progn 860 (condition-case signal
861 (setq response 861 (progn
862 (catch 'found 862 (setq response
863 ;; Loop on the servers 863 (catch 'found
864 (while servers 864 ;; Loop on the servers
865 (eudc-set-server (eudc-caar servers) (eudc-cdar servers) t) 865 (while servers
866 866 (eudc-set-server (eudc-caar servers) (eudc-cdar servers) t)
867 ;; Determine which formats apply in the query-format list 867
868 (setq query-formats 868 ;; Determine which formats apply in the query-format list
869 (or 869 (setq query-formats
870 (eudc-extract-n-word-formats eudc-inline-query-format 870 (or
871 (length query-words)) 871 (eudc-extract-n-word-formats eudc-inline-query-format
872 (if (null eudc-protocol-has-default-query-attributes) 872 (length query-words))
873 '(name)))) 873 (if (null eudc-protocol-has-default-query-attributes)
874 874 '(name))))
875 ;; Loop on query-formats 875
876 (while query-formats 876 ;; Loop on query-formats
877 (setq response 877 (while query-formats
878 (eudc-query 878 (setq response
879 (eudc-format-query query-words (car query-formats)) 879 (eudc-query
880 (eudc-translate-attribute-list 880 (eudc-format-query query-words (car query-formats))
881 (cdr eudc-inline-expansion-format)))) 881 (eudc-translate-attribute-list
882 (if response 882 (cdr eudc-inline-expansion-format))))
883 (throw 'found response)) 883 (if response
884 (setq query-formats (cdr query-formats))) 884 (throw 'found response))
885 (setq servers (cdr servers))) 885 (setq query-formats (cdr query-formats)))
886 ;; No more servers to try... no match found 886 (setq servers (cdr servers)))
887 nil)) 887 ;; No more servers to try... no match found
888 888 nil))
889 889
890 (if (null response) 890
891 (error "No match") 891 (if (null response)
892 892 (error "No match")
893 ;; Process response through eudc-inline-expansion-format 893
894 (while response 894 ;; Process response through eudc-inline-expansion-format
895 (setq response-string (apply 'format 895 (while response
896 (car eudc-inline-expansion-format) 896 (setq response-string (apply 'format
897 (mapcar (function 897 (car eudc-inline-expansion-format)
898 (lambda (field) 898 (mapcar (function
899 (or (cdr (assq field (car response))) 899 (lambda (field)
900 ""))) 900 (or (cdr (assq field (car response)))
901 (eudc-translate-attribute-list 901 "")))
902 (cdr eudc-inline-expansion-format))))) 902 (eudc-translate-attribute-list
903 (if (> (length response-string) 0) 903 (cdr eudc-inline-expansion-format)))))
904 (setq response-strings 904 (if (> (length response-string) 0)
905 (cons response-string response-strings))) 905 (setq response-strings
906 (setq response (cdr response))) 906 (cons response-string response-strings)))
907 907 (setq response (cdr response)))
908 (if (or 908
909 (and replace (not eudc-expansion-overwrites-query)) 909 (if (or
910 (and (not replace) eudc-expansion-overwrites-query)) 910 (and replace (not eudc-expansion-overwrites-query))
911 (kill-ring-save beg end)) 911 (and (not replace) eudc-expansion-overwrites-query))
912 (cond 912 (kill-ring-save beg end))
913 ((or (= (length response-strings) 1) 913 (cond
914 (null eudc-multiple-match-handling-method) 914 ((or (= (length response-strings) 1)
915 (eq eudc-multiple-match-handling-method 'first)) 915 (null eudc-multiple-match-handling-method)
916 (delete-region beg end) 916 (eq eudc-multiple-match-handling-method 'first))
917 (insert (car response-strings))) 917 (delete-region beg end)
918 ((eq eudc-multiple-match-handling-method 'select) 918 (insert (car response-strings)))
919 (eudc-select response-strings beg end)) 919 ((eq eudc-multiple-match-handling-method 'select)
920 ((eq eudc-multiple-match-handling-method 'all) 920 (eudc-select response-strings beg end))
921 (delete-region beg end) 921 ((eq eudc-multiple-match-handling-method 'all)
922 (insert (mapconcat 'identity response-strings ", "))) 922 (delete-region beg end)
923 ((eq eudc-multiple-match-handling-method 'abort) 923 (insert (mapconcat 'identity response-strings ", ")))
924 (error "There is more than one match for the query")))) 924 ((eq eudc-multiple-match-handling-method 'abort)
925 (or (and (equal eudc-server eudc-former-server) 925 (error "There is more than one match for the query")))))
926 (equal eudc-protocol eudc-former-protocol)) 926 (error
927 (eudc-set-server eudc-former-server eudc-former-protocol t))) 927 (signal (car signal) (cdr signal))))
928 (error 928 (or (and (equal eudc-server eudc-former-server)
929 (or (and (equal eudc-server eudc-former-server) 929 (equal eudc-protocol eudc-former-protocol))
930 (equal eudc-protocol eudc-former-protocol)) 930 (eudc-set-server eudc-former-server eudc-former-protocol t)))))
931 (eudc-set-server eudc-former-server eudc-former-protocol t))
932 (signal (car signal) (cdr signal))))))
933 931
934;;;###autoload 932;;;###autoload
935(defun eudc-query-form (&optional get-fields-from-server) 933(defun eudc-query-form (&optional get-fields-from-server)