From 7ad6104a17d2cff0be24fecb9eae58a8b41d5139 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sun, 20 Nov 2022 17:58:34 +0100 Subject: [PATCH] Rework tramp-archive autoloads * lisp/net/tramp-archive.el (tramp-archive-autoload-file-name-regexp): Use `tramp-compat-rx'. Protect `tramp-archive-suffixes' and `tramp-archive-compression-suffixes'. (tramp-archive-file-name-handler): Don't autoload. (tramp-register-archive-autoload-file-name-handler): Rename from `tramp-register-archive-file-name-handler'. Adapt callees. --- lisp/net/tramp-archive.el | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el index 646ae864526..5b2af7c6b21 100644 --- a/lisp/net/tramp-archive.el +++ b/lisp/net/tramp-archive.el @@ -183,18 +183,20 @@ It must be supported by libarchive(3).") ;; The definition of `tramp-archive-file-name-regexp' contains calls ;; to `regexp-opt', which cannot be autoloaded while loading ;; loaddefs.el. So we use a macro, which is evaluated only when needed. +;; When tramp-archive.el is unloaded and reloaded, it gripes about +;; missing `tramp-archive{-compression]-suffixes'. We protect this. ;;;###autoload (progn (defmacro tramp-archive-autoload-file-name-regexp () "Regular expression matching archive file names." - `(rx + `(tramp-compat-rx bos ;; This group is used in `tramp-archive-file-name-archive'. (group (+ nonl) ;; Default suffixes ... - "." ,(cons '| tramp-archive-suffixes) + "." ,(cons '| (bound-and-true-p tramp-archive-suffixes)) ;; ... with compression. - (? "." ,(cons '| tramp-archive-compression-suffixes))) + (? "." ,(cons '| (bound-and-true-p tramp-archive-compression-suffixes)))) ;; This group is used in `tramp-archive-file-name-localname'. (group "/" (* nonl)) eos))) @@ -330,10 +332,6 @@ arguments to pass to the OPERATION." (inhibit-file-name-operation operation)) (apply operation args)))) -;; Starting with Emacs 29, `tramp-archive-file-name-handler' is -;; autoloaded. But it must still be in tramp-loaddefs.el for older -;; versions of Emacs. -;;;###autoload(autoload 'tramp-archive-file-name-handler "tramp-archive") ;;;###tramp-autoload (defun tramp-archive-file-name-handler (operation &rest args) "Invoke the file archive related OPERATION. @@ -396,30 +394,30 @@ arguments to pass to the OPERATION." (put #'tramp-archive-autoload-file-name-handler 'tramp-autoload t) ;;;###autoload -(progn (defun tramp-register-archive-file-name-handler () +(progn (defun tramp-register-archive-autoload-file-name-handler () "Add archive file name handler to `file-name-handler-alist'." (when (and tramp-archive-enabled (not - (rassq #'tramp-archive-file-name-handler file-name-handler-alist))) + (rassq 'tramp-archive-file-name-handler file-name-handler-alist))) (add-to-list 'file-name-handler-alist (cons (tramp-archive-autoload-file-name-regexp) #'tramp-archive-autoload-file-name-handler)) (put #'tramp-archive-autoload-file-name-handler 'safe-magic t)))) -(put #'tramp-register-archive-file-name-handler 'tramp-autoload t) +(put #'tramp-register-archive-autoload-file-name-handler 'tramp-autoload t) ;;;###autoload (progn - (add-hook 'after-init-hook #'tramp-register-archive-file-name-handler) + (add-hook 'after-init-hook #'tramp-register-archive-autoload-file-name-handler) (add-hook 'tramp-archive-unload-hook (lambda () (remove-hook - 'after-init-hook #'tramp-register-archive-file-name-handler)))) + 'after-init-hook #'tramp-register-archive-autoload-file-name-handler)))) ;; In older Emacsen (prior 27.1), the autoload above does not exist. ;; So we call it again; it doesn't hurt. -(tramp-register-archive-file-name-handler) +(tramp-register-archive-autoload-file-name-handler) ;; Mark `operations' the handler is responsible for. (put #'tramp-archive-file-name-handler 'operations -- 2.39.5