]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve Tramp backward compatibility
authorMichael Albinus <michael.albinus@gmx.de>
Mon, 23 Oct 2017 12:05:49 +0000 (14:05 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Mon, 23 Oct 2017 12:05:49 +0000 (14:05 +0200)
* lisp/net/tramp-compat.el (tramp-compat-tramp-file-name-slots):
New defmacro.
* lisp/net/tramp.el (with-parsed-tramp-file-name): Use it.

lisp/net/tramp-compat.el
lisp/net/tramp.el

index 214ad040a17f16789d56b403b6e2bd2681805958..9326f7b186457ca93a346deeac97d310a2c2d60c 100644 (file)
@@ -235,6 +235,12 @@ If NAME is a remote file name, the local part of NAME is unquoted."
        ((eq tramp-syntax 'sep) 'separate)
        (t tramp-syntax)))
 
+;; `cl-struct-slot-info' has been introduced with Emacs 25.
+(defmacro tramp-compat-tramp-file-name-slots ()
+  (if (fboundp 'cl-struct-slot-info)
+      `(cdr (mapcar 'car (cl-struct-slot-info 'tramp-file-name)))
+    `(cdr (mapcar 'car (get 'tramp-file-name 'cl-struct-slots)))))
+
 (provide 'tramp-compat)
 
 ;;; TODO:
index 3d6934783f530e3831c00816d1a05fe5372d3a48..5a59dd622dd4ec69d1705734634995c086209336 100644 (file)
@@ -1760,9 +1760,7 @@ If VAR is nil, then we bind `v' to the structure and `method', `user',
                    `(,(if var (intern (format "%s-%s" var elem)) elem)
                      (,(intern (format "tramp-file-name-%s" elem))
                       ,(or var 'v))))
-                 (eval-and-compile
-                   (cdr
-                    (mapcar 'car (cl-struct-slot-info 'tramp-file-name)))))))
+                `,(tramp-compat-tramp-file-name-slots))))
     `(let* ((,(or var 'v) (tramp-dissect-file-name ,filename))
             ,@bindings)
        ;; We don't know which of those vars will be used, so we bind them all,