From: Lars Ingebrigtsen Date: Sun, 17 Jul 2022 10:12:24 +0000 (+0200) Subject: Make `C' in over tramp work in archive mode X-Git-Tag: emacs-29.0.90~1447^2~883 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2500ab089423df818557c5e9426e334dfbec0dbf;p=emacs.git Make `C' in over tramp work in archive mode * lisp/arc-mode.el (archive-copy-file): Make `C' in over tramp work (bug#56574). --- diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index dbb8c202091..632ae578523 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -1087,11 +1087,17 @@ NEW-NAME." (let* ((descr (archive-get-descr)) (archive (buffer-file-name)) (extractor (archive-name "extract")) - (ename (archive--file-desc-ext-file-name descr))) - (with-temp-buffer - (set-buffer-multibyte nil) - (archive--extract-file extractor archive ename) - (write-region (point-min) (point-max) write-to))))))) + (ename (archive--file-desc-ext-file-name descr)) + ;; If the archive is remote, we have to copy it to a + ;; local file first to make extraction work. + (copy (archive-maybe-copy archive))) + (unwind-protect + (with-temp-buffer + (set-buffer-multibyte nil) + (archive--extract-file extractor copy ename) + (write-region (point-min) (point-max) write-to)) + (unless (equal copy archive) + (delete-file copy)))))))) (defun archive-extract (&optional other-window-p event) "In archive mode, extract this entry of the archive into its own buffer."