summaryrefslogtreecommitdiff
path: root/lisp/files-x.el
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2018-07-09 16:03:49 +0200
committerMichael Albinus <michael.albinus@gmx.de>2018-07-09 16:03:49 +0200
commit917158f8c91121572f38d641096e171540d0bac2 (patch)
tree43710ad9b429f9a425db9d2d161aff2606b47124 /lisp/files-x.el
parent848f0f73e98dfa8f32ffbcf7c2e0ea37ce123959 (diff)
downloademacs-917158f8c91121572f38d641096e171540d0bac2.tar.gz
Fix Bug#32090
* lisp/files-x.el (connection-local-normalize-criteria): Do not use PROPERTIES anymore. (connection-local-get-profiles): Rewrite, in order to accept any property as optional. (Bug#32090) (connection-local-set-profiles): Adapt ´connection-local-normalize-criteria' call. * test/lisp/files-x-tests.el (files-x-test-connection-local-set-profiles) (files-x-test-hack-connection-local-variables-apply): Extend tests.
Diffstat (limited to 'lisp/files-x.el')
-rw-r--r--lisp/files-x.el37
1 files changed, 19 insertions, 18 deletions
diff --git a/lisp/files-x.el b/lisp/files-x.el
index 74ea77678ec..2a52792222d 100644
--- a/lisp/files-x.el
+++ b/lisp/files-x.el
@@ -578,31 +578,33 @@ strings. All properties are optional; if CRITERIA is nil, it
always applies.
PROFILES is a list of connection profiles (symbols).")
-(defsubst connection-local-normalize-criteria (criteria &rest properties)
- "Normalize plist CRITERIA according to PROPERTIES.
-Return a new ordered plist list containing only property names from PROPERTIES."
- (delq
- nil
+(defsubst connection-local-normalize-criteria (criteria)
+ "Normalize plist CRITERIA according to properties.
+Return a reordered plist."
+ (apply
+ 'append
(mapcar
(lambda (property)
(when (and (plist-member criteria property) (plist-get criteria property))
(list property (plist-get criteria property))))
- properties)))
+ '(:application :protocol :user :machine))))
(defsubst connection-local-get-profiles (criteria)
"Return the connection profiles list for CRITERIA.
CRITERIA is a plist identifying a connection and the application
using this connection, see `connection-local-criteria-alist'."
- (or (cdr
- (assoc
- (connection-local-normalize-criteria
- criteria :application :protocol :user :machine)
- connection-local-criteria-alist))
- ;; Try it without :application.
- (cdr
- (assoc
- (connection-local-normalize-criteria criteria :protocol :user :machine)
- connection-local-criteria-alist))))
+ (let (profiles)
+ (dolist (crit-alist connection-local-criteria-alist)
+ (let ((crit criteria)
+ (match t))
+ (while (and crit match)
+ (when (plist-member (car crit-alist) (car crit))
+ (setq match (equal (plist-get (car crit-alist) (car crit))
+ (plist-get criteria (car crit)))))
+ (setq crit (cddr crit)))
+ (when match
+ (setq profiles (append profiles (cdr crit-alist))))))
+ (delete-dups profiles)))
;;;###autoload
(defun connection-local-set-profiles (criteria &rest profiles)
@@ -621,8 +623,7 @@ variables for a connection profile are defined using
(dolist (profile profiles)
(unless (assq profile connection-local-profile-alist)
(error "No such connection profile `%s'" (symbol-name profile))))
- (let* ((criteria (connection-local-normalize-criteria
- criteria :application :protocol :user :machine))
+ (let* ((criteria (connection-local-normalize-criteria criteria))
(slot (assoc criteria connection-local-criteria-alist)))
(if slot
(setcdr slot (delete-dups (append (cdr slot) profiles)))