summaryrefslogtreecommitdiff
path: root/lisp/tar-mode.el
diff options
context:
space:
mode:
authorJuri Linkov <juri@linkov.net>2019-02-03 23:00:29 +0200
committerJuri Linkov <juri@linkov.net>2019-02-03 23:00:29 +0200
commit4633b0ef3ff7fc8ac013e4236edf782fb3cadfb4 (patch)
tree86b978e4f2cd9f5fc9c6620a24b015856b004b0d /lisp/tar-mode.el
parentb32ac17c32486d8fce0fb9ecd5e09fe324448d3d (diff)
downloademacs-4633b0ef3ff7fc8ac013e4236edf782fb3cadfb4.tar.gz
* lisp/tar-mode.el (tar-extract): Call tar--try-jka-compr (bug#34251)
* lisp/tar-mode.el (tar--try-jka-compr): New function copied from archive-try-jka-compr. * lisp/arc-mode.el (archive-try-jka-compr): Set buffer-multibyte to t instead of let-binding coding-system-for-read to 'no-conversion. * test/data/decompress/tg.tar.gz: * test/data/decompress/zg.zip: New fixtures. * test/lisp/arc-mode-tests.el (arc-mode-test-zip-extract-gz): * test/lisp/tar-mode-tests.el (tar-mode-test-tar-extract-gz): New tests. * test/lisp/vc/diff-mode-tests.el (diff-mode-test-font-lock) (diff-mode-test-font-lock-syntax-one-line): Skip unless shell and diff executables are found.
Diffstat (limited to 'lisp/tar-mode.el')
-rw-r--r--lisp/tar-mode.el21
1 files changed, 21 insertions, 0 deletions
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el
index 5b83d173b4a..c5382d3f3d1 100644
--- a/lisp/tar-mode.el
+++ b/lisp/tar-mode.el
@@ -852,6 +852,26 @@ actually appear on disk when you save the tar-file's buffer."
(goto-char (posn-point (event-end event)))
(tar-extract))
+(defun tar--try-jka-compr ()
+ (when (and auto-compression-mode
+ (jka-compr-get-compression-info buffer-file-name))
+ (let* ((basename (file-name-nondirectory buffer-file-name))
+ (tmpname (if (string-match ":\\([^:]+\\)\\'" basename)
+ (match-string 1 basename) basename))
+ (tmpfile (make-temp-file (file-name-sans-extension tmpname)
+ nil
+ (file-name-extension tmpname 'period))))
+ (unwind-protect
+ (progn
+ (let ((coding-system-for-write 'no-conversion)
+ ;; Don't re-compress this data just before decompressing it.
+ (jka-compr-inhibit t))
+ (write-region (point-min) (point-max) tmpfile nil 'quiet))
+ (set-buffer-multibyte t)
+ (erase-buffer)
+ (insert-file-contents tmpfile))
+ (delete-file tmpfile)))))
+
(defun tar-file-name-handler (op &rest args)
"Helper function for `tar-extract'."
(or (eq op 'file-exists-p)
@@ -931,6 +951,7 @@ actually appear on disk when you save the tar-file's buffer."
(setq buffer-file-name new-buffer-file-name)
(setq buffer-file-truename
(abbreviate-file-name buffer-file-name))
+ (tar--try-jka-compr) ;Pretty ugly hack :-(
;; Force buffer-file-coding-system to what
;; decode-coding-region actually used.
(set-buffer-file-coding-system last-coding-system-used t)