diff options
author | Juri Linkov <juri@linkov.net> | 2019-02-03 23:00:29 +0200 |
---|---|---|
committer | Juri Linkov <juri@linkov.net> | 2019-02-03 23:00:29 +0200 |
commit | 4633b0ef3ff7fc8ac013e4236edf782fb3cadfb4 (patch) | |
tree | 86b978e4f2cd9f5fc9c6620a24b015856b004b0d /lisp/tar-mode.el | |
parent | b32ac17c32486d8fce0fb9ecd5e09fe324448d3d (diff) | |
download | emacs-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.el | 21 |
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) |