# HG changeset patch # User Stefan Monnier # Date 1207253139 0 # Node ID 1cee153604e62c96f9b0a92e13710089b8ac97e9 # Parent 0cdd5c9c63c2cd6dcc79d1a8e5e1644bbb7a843d (archive-mode-map): Obey mouse-1-click-follows-link. (archive-try-jka-compr): New function. (archive-set-buffer-as-visiting-file): Use it. diff -r 0cdd5c9c63c2 -r 1cee153604e6 lisp/ChangeLog --- a/lisp/ChangeLog Thu Apr 03 20:03:31 2008 +0000 +++ b/lisp/ChangeLog Thu Apr 03 20:05:39 2008 +0000 @@ -1,5 +1,9 @@ 2008-04-03 Stefan Monnier + * arc-mode.el (archive-mode-map): Obey mouse-1-click-follows-link. + (archive-try-jka-compr): New function. + (archive-set-buffer-as-visiting-file): Use it. + * tar-mode.el (tar-mode-map): Obey mouse-1-click-follows-link. 2008-04-03 Chong Yidong diff -r 0cdd5c9c63c2 -r 1cee153604e6 lisp/arc-mode.el --- a/lisp/arc-mode.el Thu Apr 03 20:03:31 2008 +0000 +++ b/lisp/arc-mode.el Thu Apr 03 20:05:39 2008 +0000 @@ -358,6 +358,8 @@ (define-key map "M" 'archive-chmod-entry) (define-key map "G" 'archive-chgrp-entry) (define-key map "O" 'archive-chown-entry) + ;; Let mouse-1 follow the link. + (define-key map [follow-link] 'mouse-face) (if (fboundp 'command-remapping) (progn @@ -892,6 +894,26 @@ ;; ------------------------------------------------------------------------- ;;; Section: Member extraction +(defun archive-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)) + (erase-buffer) + (let ((coding-system-for-read 'no-conversion)) + (insert-file-contents tmpfile))) + (delete-file tmpfile))))) + (defun archive-file-name-handler (op &rest args) (or (eq op 'file-exists-p) (let ((file-name-handler-alist nil)) @@ -921,13 +943,12 @@ (car (find-operation-coding-system 'insert-file-contents (cons filename (current-buffer)) t)))))) - (if (and (not coding-system-for-read) - (not enable-multibyte-characters)) - (setq coding - (coding-system-change-text-conversion coding 'raw-text))) - (if (and coding - (not (eq coding 'no-conversion))) - (decode-coding-region (point-min) (point-max) coding) + (unless (or coding-system-for-read + enable-multibyte-characters) + (setq coding + (coding-system-change-text-conversion coding 'raw-text))) + (unless (memq coding '(nil no-conversion)) + (decode-coding-region (point-min) (point-max) coding) (setq last-coding-system-used coding)) (set-buffer-modified-p nil) (kill-local-variable 'buffer-file-coding-system) @@ -999,6 +1020,7 @@ (progn (set-buffer-modified-p nil) (kill-buffer buffer)) + (archive-try-jka-compr) ;Pretty ugly hack :-( (archive-set-buffer-as-visiting-file ename) (goto-char (point-min)) (rename-buffer bufname) @@ -2088,7 +2110,7 @@ (with-current-buffer destbuf ;; Do it within the `widen'. (insert-buffer-substring archivebuf from (+ from size))) - (set-buffer-multibyte t) + (set-buffer-multibyte 'to) ;; Inform the caller that the call succeeded. t)))))