diff options
| author | Thomas Fitzsimmons | 2014-11-13 02:35:54 -0500 |
|---|---|---|
| committer | Thomas Fitzsimmons | 2014-11-13 02:41:00 -0500 |
| commit | 81d0909b70991e95be2993d7793c11a9e8a535ee (patch) | |
| tree | a86653cabb23d3c15f36a150a98dda0948216fa6 | |
| parent | 78602273d2c377c1c844e2f412e3d1769ae87aff (diff) | |
| download | emacs-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/ChangeLog | 5 | ||||
| -rw-r--r-- | lisp/net/eudc.el | 146 |
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 @@ | |||
| 1 | 2014-11-13 Thomas Fitzsimmons <fitzsim@fitzsim.org> | 1 | 2014-11-13 Thomas Fitzsimmons <fitzsim@fitzsim.org> |
| 2 | 2 | ||
| 3 | * net/eudc.el (eudc-expand-inline): Always restore former server | ||
| 4 | and protocol. | ||
| 5 | |||
| 6 | 2014-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) |