X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/4382021fc15f8a52c9dd12bacb7c75dbeb562302..b336bfcdf39f1e4d35bff4a7bd01d3b4bca8f516:/lisp/jka-cmpr-hook.el diff --git a/lisp/jka-cmpr-hook.el b/lisp/jka-cmpr-hook.el index b13ca7181e..da8512d7fb 100644 --- a/lisp/jka-cmpr-hook.el +++ b/lisp/jka-cmpr-hook.el @@ -1,7 +1,7 @@ ;;; jka-cmpr-hook.el --- preloaded code to enable jka-compr.el ;; Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2002, 2003, -;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: jka@ece.cmu.edu (Jay K. Adams) ;; Maintainer: FSF @@ -9,10 +9,10 @@ ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -20,9 +20,7 @@ ;; 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, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -73,10 +71,11 @@ Otherwise, it is nil.") (defun jka-compr-build-file-regexp () + (purecopy (mapconcat 'jka-compr-info-regexp jka-compr-compression-info-list - "\\|")) + "\\|"))) ;; Functions for accessing the return value of jka-compr-get-compression-info (defun jka-compr-info-regexp (info) (aref info 0)) @@ -97,7 +96,7 @@ The determination as to which compression scheme, if any, to use is based on the filename itself and `jka-compr-compression-info-list'." (catch 'compression-info (let ((case-fold-search nil)) - (mapcar + (mapc (function (lambda (x) (and (string-match (jka-compr-info-regexp x) filename) (throw 'compression-info x)))) @@ -179,14 +178,29 @@ options through Custom does this automatically." ;; I have this defined so that .Z files are assumed to be in unix ;; compress format; and .gz files, in gzip format, and .bz2 files in bzip fmt. + +;; FIXME? It seems ugly that one has to add "\\(~\\|\\.~[0-9]+~\\)?" to +;; all the regexps here, in order to match backup files etc. +;; It's trivial to modify jka-compr-get-compression-info to match +;; regexps against file-name-sans-versions, but this regexp is also +;; used to build a file-name-handler-alist entry. +;; find-file-name-handler does not use file-name-sans-versions. +;; Perhaps it should, +;; http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg00812.html, +;; but it's used all over the place and there are probably other ramifications. +;; One could modify jka-compr-build-file-regexp to add the backup regexp, +;; but jka-compr-compression-info-list is a defcustom to which +;; anything could be added, so it's easiest to leave things as they are. (defcustom jka-compr-compression-info-list ;;[regexp ;; compr-message compr-prog compr-args ;; uncomp-message uncomp-prog uncomp-args - ;; can-append auto-mode-flag strip-extension-flag file-magic-bytes] + ;; can-append strip-extension-flag file-magic-bytes] + (mapcar 'purecopy '(["\\.Z\\(~\\|\\.~[0-9]+~\\)?\\'" "compressing" "compress" ("-c") - "uncompressing" "uncompress" ("-c") + ;; gzip is more common than uncompress. It can only read, not write. + "uncompressing" "gzip" ("-c" "-q" "-d") nil t "\037\235"] ;; Formerly, these had an additional arg "-c", but that fails with ;; "Version 0.1pl2, 29-Aug-97." (RedHat 5.1 GNU/Linux) and @@ -195,11 +209,11 @@ options through Custom does this automatically." "bzip2ing" "bzip2" nil "bunzip2ing" "bzip2" ("-d") nil t "BZh"] - ["\\.tbz\\'" + ["\\.tbz2?\\'" "bzip2ing" "bzip2" nil "bunzip2ing" "bzip2" ("-d") nil nil "BZh"] - ["\\.tgz\\'" + ["\\.\\(?:tgz\\|svgz\\|sifz\\)\\(~\\|\\.~[0-9]+~\\)?\\'" "compressing" "gzip" ("-c" "-q") "uncompressing" "gzip" ("-c" "-q" "-d") t nil "\037\213"] @@ -207,13 +221,17 @@ options through Custom does this automatically." "compressing" "gzip" ("-c" "-q") "uncompressing" "gzip" ("-c" "-q" "-d") t t "\037\213"] + ["\\.xz\\(~\\|\\.~[0-9]+~\\)?\\'" + "XZ compressing" "xz" ("-c" "-q") + "XZ uncompressing" "xz" ("-c" "-q" "-d") + t t "\3757zXZ\0"] ;; dzip is gzip with random access. Its compression program can't ;; read/write stdin/out, so .dz files can only be viewed without ;; saving, having their contents decompressed with gzip. ["\\.dz\\'" nil nil nil "uncompressing" "gzip" ("-c" "-q" "-d") - nil t "\037\213"]) + nil t "\037\213"])) "List of vectors that describe available compression techniques. Each element, which describes a compression technique, is a vector of @@ -274,7 +292,7 @@ variables. Setting this through Custom does that automatically." :group 'jka-compr) (defcustom jka-compr-mode-alist-additions - (list (cons "\\.tgz\\'" 'tar-mode) (cons "\\.tbz\\'" 'tar-mode)) + (list (cons (purecopy "\\.tgz\\'") 'tar-mode) (cons (purecopy "\\.tbz2?\\'") 'tar-mode)) "List of pairs added to `auto-mode-alist' when installing jka-compr. Uninstalling jka-compr removes all pairs from `auto-mode-alist' that installing added. @@ -287,7 +305,7 @@ variables. Setting this through Custom does that automatically." :set 'jka-compr-set :group 'jka-compr) -(defcustom jka-compr-load-suffixes '(".gz") +(defcustom jka-compr-load-suffixes (list (purecopy ".gz")) "List of compression related suffixes to try when loading files. Enabling Auto Compression mode appends this list to `load-file-rep-suffixes', which see. Disabling Auto Compression mode removes all suffixes