X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/2b0739e5600ecc9caa45c06e7ac39e2392205f2b..c22256a16ee314e5dc0bbe7620ff0a735ef55be0:/lisp/uncompress.el diff --git a/lisp/uncompress.el b/lisp/uncompress.el index a44590a3af..53439190a1 100644 --- a/lisp/uncompress.el +++ b/lisp/uncompress.el @@ -1,6 +1,6 @@ ;;; uncompress.el --- auto-decompression hook for visiting .Z files -;; Copyright (C) 1992 Free Software Foundation, Inc. +;; Copyright (C) 1992, 1994 Free Software Foundation, Inc. ;; Maintainer: FSF @@ -17,16 +17,19 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to -;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; This package can be used to arrange for automatic uncompress of -;; files packed with the UNIX compress(1) utility when they are visited. +;; compressed files when they are visited. ;; All that's necessary is to load it. This can conveniently be done from ;; your .emacs file. +;; M-x auto-compression-mode is a more modern replacement for this package. + ;;; Code: ;; When we are about to make a backup file, @@ -34,26 +37,49 @@ ;; so that making the backup can work properly. ;; This is used as a write-file-hook. +(defvar uncompress-program "gunzip" + "Program to use for uncompression.") + (defun uncompress-backup-file () (and buffer-file-name make-backup-files (not buffer-backed-up) (not (file-exists-p buffer-file-name)) - (call-process "uncompress" nil nil nil buffer-file-name)) + (call-process uncompress-program nil nil nil buffer-file-name)) nil) (or (assoc "\\.Z$" auto-mode-alist) (setq auto-mode-alist (cons '("\\.Z$" . uncompress-while-visiting) auto-mode-alist))) +(or (assoc "\\.gz$" auto-mode-alist) + (setq auto-mode-alist + (cons '("\\.gz$" . uncompress-while-visiting) auto-mode-alist))) +(or (assoc "\\.tgz$" auto-mode-alist) + (setq auto-mode-alist + (cons '("\\.tgz$" . uncompress-while-visiting) auto-mode-alist))) (defun uncompress-while-visiting () - "Temporary \"major mode\" used for .Z files, to uncompress the contents. + "Temporary \"major mode\" used for .Z and .gz files, to uncompress them. It then selects a major mode from the uncompressed file name and contents." (if (and (not (null buffer-file-name)) (string-match "\\.Z$" buffer-file-name)) (set-visited-file-name - (substring buffer-file-name 0 (match-beginning 0)))) + (substring buffer-file-name 0 (match-beginning 0))) + (if (and (not (null buffer-file-name)) + (string-match "\\.gz$" buffer-file-name)) + (set-visited-file-name + (substring buffer-file-name 0 (match-beginning 0))) + (if (and (not (null buffer-file-name)) + (string-match "\\.tgz$" buffer-file-name)) + (set-visited-file-name + (concat (substring buffer-file-name 0 (match-beginning 0)) ".tar"))))) (message "Uncompressing...") - (let ((buffer-read-only nil)) - (shell-command-on-region (point-min) (point-max) "uncompress" t)) + (let ((buffer-read-only nil) + (coding-system-for-write 'no-conversion) + (coding-system-for-read + (car (find-operation-coding-system + 'insert-file-contents + buffer-file-name t)))) + (shell-command-on-region (point-min) (point-max) uncompress-program t)) + (goto-char (point-min)) (message "Uncompressing...done") (set-buffer-modified-p nil) (make-local-variable 'write-file-hooks) @@ -69,13 +95,19 @@ It then selects a major mode from the uncompressed file name and contents." "Hook to read and uncompress the compressed version of a file." ;; Just pretend we had visited the compressed file, ;; and uncompress-while-visiting will do the rest. - (if (file-exists-p (concat buffer-file-name ".Z")) - (progn - (setq buffer-file-name (concat buffer-file-name ".Z")) - (insert-file-contents buffer-file-name t) - (goto-char (point-min)) - (setq error nil) - t))) + (let (name) + (if (file-exists-p (setq name (concat buffer-file-name ".Z"))) + (setq buffer-file-name name) + (if (file-exists-p (setq name (concat buffer-file-name ".gz"))) + (setq buffer-file-name name))) + (if (eq name buffer-file-name) + (progn + (insert-file-contents buffer-file-name t) + (goto-char (point-min)) + ;; No need for this, because error won't be set to t + ;; if this function returns t. + ;; (setq error nil) + t)))) (provide 'uncompress)