annotate lisp/jka-compr.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents 5b31557e355c
children e6ea4d9f64f3 62afea0771d8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13337
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 13067
diff changeset
1 ;;; jka-compr.el --- reading/writing/loading compressed files
84acc3adcd63 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 13067
diff changeset
2
54521
36922d8fd700 (jka-compr-compression-info-list): Add tbz and dz.
Juri Linkov <juri@jurta.org>
parents: 53477
diff changeset
3 ;; Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: jka@ece.cmu.edu (Jay K. Adams)
17976
852464ce5d6a Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17441
diff changeset
6 ;; Maintainer: FSF
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: data
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
13514
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
9 ;; This file is part of GNU Emacs.
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
10
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
14 ;; any later version.
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
15
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
19 ;; GNU General Public License for more details.
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
20
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
24 ;; Boston, MA 02111-1307, USA.
13514
0e46e8075a1d (auto-compression-mode): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 13337
diff changeset
25
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 34732
diff changeset
26 ;;; Commentary:
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
28 ;; This package implements low-level support for reading, writing,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
29 ;; and loading compressed files. It hooks into the low-level file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
30 ;; I/O functions (including write-region and insert-file-contents) so
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
31 ;; that they automatically compress or uncompress a file if the file
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
32 ;; appears to need it (based on the extension of the file name).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
33 ;; Packages like Rmail, VM, GNUS, and Info should be able to work
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
34 ;; with compressed files without modification.
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
37 ;; INSTRUCTIONS:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
38 ;;
32497
447210134c3b Doc fix.
Miles Bader <miles@gnu.org>
parents: 32317
diff changeset
39 ;; To use jka-compr, invoke the command `auto-compression-mode' (which
447210134c3b Doc fix.
Miles Bader <miles@gnu.org>
parents: 32317
diff changeset
40 ;; see), or customize the variable of the same name. Its operation
447210134c3b Doc fix.
Miles Bader <miles@gnu.org>
parents: 32317
diff changeset
41 ;; should be transparent to the user (except for messages appearing when
447210134c3b Doc fix.
Miles Bader <miles@gnu.org>
parents: 32317
diff changeset
42 ;; a file is being compressed or uncompressed).
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
43 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
44 ;; The variable, jka-compr-compression-info-list can be used to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
45 ;; customize jka-compr to work with other compression programs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
46 ;; The default value of this variable allows jka-compr to work with
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
47 ;; Unix compress and gzip.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
48 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
49 ;; If you are concerned about the stderr output of gzip and other
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
50 ;; compression/decompression programs showing up in your buffers, you
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
51 ;; should set the discard-error flag in the compression-info-list.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
52 ;; This will cause the stderr of all programs to be discarded.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
53 ;; However, it also causes emacs to call compression/uncompression
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
54 ;; programs through a shell (which is specified by jka-compr-shell).
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
55 ;; This may be a drag if, on your system, starting up a shell is
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
56 ;; slow.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
57 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
58 ;; If you don't want messages about compressing and decompressing
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
59 ;; to show up in the echo area, you can set the compress-name and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
60 ;; decompress-name fields of the jka-compr-compression-info-list to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
61 ;; nil.
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
64 ;; APPLICATION NOTES:
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
65 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
66 ;; crypt++
45720
c145c11ef3b3 Fix a typo in a comment.
Eli Zaretskii <eliz@gnu.org>
parents: 42461
diff changeset
67 ;; jka-compr can coexist with crypt++ if you take all the decompression
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
68 ;; entries out of the crypt-encoding-list. Clearly problems will arise if
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
69 ;; you have two programs trying to compress/decompress files. jka-compr
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
70 ;; will not "work with" crypt++ in the following sense: you won't be able to
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
71 ;; decode encrypted compressed files--that is, files that have been
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
72 ;; compressed then encrypted (in that order). Theoretically, crypt++ and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
73 ;; jka-compr could properly handle a file that has been encrypted then
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
74 ;; compressed, but there is little point in trying to compress an encrypted
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
75 ;; file.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
76 ;;
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
79 ;; ACKNOWLEDGMENTS
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
80 ;;
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
81 ;; jka-compr is a V19 adaptation of jka-compr for V18 of Emacs. Many people
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
82 ;; have made helpful suggestions, reported bugs, and even fixed bugs in
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
83 ;; jka-compr. I recall the following people as being particularly helpful.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
84 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
85 ;; Jean-loup Gailly
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
86 ;; David Hughes
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
87 ;; Richard Pieri
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
88 ;; Daniel Quinlan
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
89 ;; Chris P. Ross
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
90 ;; Rick Sladkey
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
91 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
92 ;; Andy Norman's ange-ftp was the inspiration for the original jka-compr for
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
93 ;; Version 18 of Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
94 ;;
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
95 ;; After I had made progress on the original jka-compr for V18, I learned of a
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
96 ;; package written by Kazushi Jam Marukawa, called jam-zcat, that did exactly
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
97 ;; what I was trying to do. I looked over the jam-zcat source code and
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
98 ;; probably got some ideas from it.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13900
diff changeset
99 ;;
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;;; Code:
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102
17411
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16940
diff changeset
103 (defcustom jka-compr-shell "sh"
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 "*Shell to be used for calling compression programs.
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 The value of this variable only matters if you want to discard the
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 stderr of a compression/decompression program (see the documentation
17411
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16940
diff changeset
107 for `jka-compr-compression-info-list')."
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16940
diff changeset
108 :type 'string
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16940
diff changeset
109 :group 'jka-compr)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
111 (defvar jka-compr-use-shell
21633
185e8e424ee9 (jka-compr-use-shell) [ms-dos, windows-nt]: Do not use a shell.
Richard M. Stallman <rms@gnu.org>
parents: 20893
diff changeset
112 (not (memq system-type '(ms-dos windows-nt))))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
114 (defvar jka-compr-really-do-compress nil
60781
4dec7a239cfa (jka-compr-really-do-compress): Make variable buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 54521
diff changeset
115 "Non-nil in a buffer whose visited file was uncompressed on visiting it.
4dec7a239cfa (jka-compr-really-do-compress): Make variable buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 54521
diff changeset
116 This means compress the data on writing the file, even if the
4dec7a239cfa (jka-compr-really-do-compress): Make variable buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 54521
diff changeset
117 data appears to be compressed already.")
4dec7a239cfa (jka-compr-really-do-compress): Make variable buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 54521
diff changeset
118 (make-variable-buffer-local 'jka-compr-really-do-compress)
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
119 (put 'jka-compr-really-do-compress 'permanent-local t)
7617
edc853e14f7b (jka-compr-op-table, jka-compr-file-name-handler-entry): Move defvars.
Richard M. Stallman <rms@gnu.org>
parents: 7616
diff changeset
120
15083
285482e8df41 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
121 ;;; Functions for accessing the return value of jka-compr-get-compression-info
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 (defun jka-compr-info-regexp (info) (aref info 0))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 (defun jka-compr-info-compress-message (info) (aref info 1))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (defun jka-compr-info-compress-program (info) (aref info 2))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 (defun jka-compr-info-compress-args (info) (aref info 3))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 (defun jka-compr-info-uncompress-message (info) (aref info 4))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (defun jka-compr-info-uncompress-program (info) (aref info 5))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (defun jka-compr-info-uncompress-args (info) (aref info 6))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 (defun jka-compr-info-can-append (info) (aref info 7))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 (defun jka-compr-info-strip-extension (info) (aref info 8))
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
131 (defun jka-compr-info-file-magic-bytes (info) (aref info 9))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 (defun jka-compr-get-compression-info (filename)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 "Return information about the compression scheme of FILENAME.
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 The determination as to which compression scheme, if any, to use is
7066
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
137 based on the filename itself and `jka-compr-compression-info-list'."
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 (catch 'compression-info
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (let ((case-fold-search nil))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (mapcar
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (function (lambda (x)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (and (string-match (jka-compr-info-regexp x) filename)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 (throw 'compression-info x))))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 jka-compr-compression-info-list)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 nil)))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (put 'compression-error 'error-conditions '(compression-error file-error error))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150
11635
b56f6afa16ec (jka-compr-write-region): Handle the append
Richard M. Stallman <rms@gnu.org>
parents: 11621
diff changeset
151 (defvar jka-compr-acceptable-retval-list '(0 2 141))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 (defun jka-compr-error (prog args infile message &optional errfile)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 (let ((errbuf (get-buffer-create " *jka-compr-error*"))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 (curbuf (current-buffer)))
16940
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
158 (with-current-buffer errbuf
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
159 (widen) (erase-buffer)
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
160 (insert (format "Error while executing \"%s %s < %s\"\n\n"
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
161 prog
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
162 (mapconcat 'identity args " ")
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
163 infile))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164
16940
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
165 (and errfile
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
166 (insert-file-contents errfile)))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 (display-buffer errbuf))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168
16940
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
169 (signal 'compression-error
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
170 (list "Opening input file" (format "error %s" message) infile)))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
171
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
172
40782
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
173 (defcustom jka-compr-dd-program "/bin/dd"
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
174 "How to invoke `dd'."
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
175 :type 'string
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
176 :group 'jka-compr)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178
6041
649926e9c1a8 (jka-compr-partial-uncompress): Make dd give you
Richard M. Stallman <rms@gnu.org>
parents: 6002
diff changeset
179 (defvar jka-compr-dd-blocksize 256)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (defun jka-compr-partial-uncompress (prog message args infile beg len)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 "Call program PROG with ARGS args taking input from INFILE.
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 Fourth and fifth args, BEG and LEN, specify which part of the output
8065
31eb7a0e2763 (jka-compr-partial-uncompress): Handle the case where
Richard M. Stallman <rms@gnu.org>
parents: 7976
diff changeset
185 to keep: LEN chars starting BEG chars from the beginning."
40782
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
186 (let ((start (point))
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
187 (prefix beg))
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
188 (if (and jka-compr-use-shell jka-compr-dd-program)
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
189 ;; Put the uncompression output through dd
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
190 ;; to discard the part we don't want.
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
191 (let ((skip (/ beg jka-compr-dd-blocksize))
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
192 (err-file (jka-compr-make-temp-name))
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
193 count)
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
194 ;; Update PREFIX based on the text that we won't read in.
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
195 (setq prefix (- beg (* skip jka-compr-dd-blocksize))
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
196 count (and len (1+ (/ (+ len prefix) jka-compr-dd-blocksize))))
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
197 (unwind-protect
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
198 (or (memq (call-process
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
199 jka-compr-shell infile t nil "-c"
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
200 (format
42231
054cf5ce349b (jka-compr-partial-uncompress): Use null-device instead of a literal
Eli Zaretskii <eliz@gnu.org>
parents: 41102
diff changeset
201 "%s %s 2> %s | %s bs=%d skip=%d %s 2> %s"
40782
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
202 prog
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
203 (mapconcat 'identity args " ")
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
204 err-file
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
205 jka-compr-dd-program
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
206 jka-compr-dd-blocksize
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
207 skip
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
208 ;; dd seems to be unreliable about
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
209 ;; providing the last block. So, always
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
210 ;; read one more than you think you need.
42231
054cf5ce349b (jka-compr-partial-uncompress): Use null-device instead of a literal
Eli Zaretskii <eliz@gnu.org>
parents: 41102
diff changeset
211 (if count (format "count=%d" (1+ count)) "")
054cf5ce349b (jka-compr-partial-uncompress): Use null-device instead of a literal
Eli Zaretskii <eliz@gnu.org>
parents: 41102
diff changeset
212 null-device))
40782
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
213 jka-compr-acceptable-retval-list)
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
214 (jka-compr-error prog args infile message err-file))
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
215 (jka-compr-delete-temp-file err-file)))
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
216 ;; Run the uncompression program directly.
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
217 ;; We get the whole file and must delete what we don't want.
3a4d800ced48 (jka-compr-partial-uncompress): Support an alternative of not using dd.
Richard M. Stallman <rms@gnu.org>
parents: 39829
diff changeset
218 (jka-compr-call-process prog message infile t nil args))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219
8065
31eb7a0e2763 (jka-compr-partial-uncompress): Handle the case where
Richard M. Stallman <rms@gnu.org>
parents: 7976
diff changeset
220 ;; Delete the stuff after what we want, if there is any.
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 (and
6041
649926e9c1a8 (jka-compr-partial-uncompress): Make dd give you
Richard M. Stallman <rms@gnu.org>
parents: 6002
diff changeset
222 len
8065
31eb7a0e2763 (jka-compr-partial-uncompress): Handle the case where
Richard M. Stallman <rms@gnu.org>
parents: 7976
diff changeset
223 (< (+ start prefix len) (point))
6041
649926e9c1a8 (jka-compr-partial-uncompress): Make dd give you
Richard M. Stallman <rms@gnu.org>
parents: 6002
diff changeset
224 (delete-region (+ start prefix len) (point)))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225
8065
31eb7a0e2763 (jka-compr-partial-uncompress): Handle the case where
Richard M. Stallman <rms@gnu.org>
parents: 7976
diff changeset
226 ;; Delete the stuff before what we want.
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (delete-region start (+ start prefix))))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 (defun jka-compr-call-process (prog message infile output temp args)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 (if jka-compr-use-shell
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232
18879
8b226efb9a8b (jka-compr-insert-file-contents): Bind coding-system-for-read.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
233 (let ((err-file (jka-compr-make-temp-name))
18906
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
234 (coding-system-for-read (or coding-system-for-read 'undecided))
22360
09dbe38a603f (jka-compr-write-region): Ensure
Karl Heuer <kwzh@gnu.org>
parents: 22194
diff changeset
235 (coding-system-for-write 'no-conversion))
18879
8b226efb9a8b (jka-compr-insert-file-contents): Bind coding-system-for-read.
Richard M. Stallman <rms@gnu.org>
parents: 17976
diff changeset
236
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 (unwind-protect
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 (or (memq
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 (call-process jka-compr-shell infile
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 (if (stringp output) nil output)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 nil
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 "-c"
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (format "%s %s 2> %s %s"
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 prog
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (mapconcat 'identity args " ")
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 err-file
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 (if (stringp output)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 (concat "> " output)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 "")))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 jka-compr-acceptable-retval-list)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (jka-compr-error prog args infile message err-file))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 (jka-compr-delete-temp-file err-file)))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256
53477
79093b308520 * progmodes/idlwave.el (idlwave-make-tags):
Eli Zaretskii <eliz@is.elta.co.il>
parents: 53304
diff changeset
257 (or (eq 0
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 (apply 'call-process
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 prog
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 infile
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 (if (stringp output) temp output)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 nil
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 args))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 (jka-compr-error prog args infile message))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 (and (stringp output)
16940
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
267 (with-current-buffer temp
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 (write-region (point-min) (point-max) output)
16940
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
269 (erase-buffer)))))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 ;;; Support for temp files. Much of this was inspired if not lifted
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 ;;; from ange-ftp.
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274
17411
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16940
diff changeset
275 (defcustom jka-compr-temp-name-template
22100
eb3f36cc775f (jka-compr-temp-name-template): Use temporary-file-directory.
Richard M. Stallman <rms@gnu.org>
parents: 22090
diff changeset
276 (expand-file-name "jka-com" temporary-file-directory)
17441
41a10d128e3b (jka-compr-temp-name-template): Fix editing error.
Richard M. Stallman <rms@gnu.org>
parents: 17411
diff changeset
277 "Prefix added to all temp files created by jka-compr.
17411
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16940
diff changeset
278 There should be no more than seven characters after the final `/'."
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16940
diff changeset
279 :type 'string
f0ff96a35eb8 Add defgroup's; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16940
diff changeset
280 :group 'jka-compr)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 (defun jka-compr-make-temp-name (&optional local-copy)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 "This routine will return the name of a new file."
26039
fb6b9c37cdc4 Use make-temp-file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 25285
diff changeset
284 (make-temp-file jka-compr-temp-name-template))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285
26039
fb6b9c37cdc4 Use make-temp-file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 25285
diff changeset
286 (defalias 'jka-compr-delete-temp-file 'delete-file)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (defun jka-compr-write-region (start end file &optional append visit)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 (let* ((filename (expand-file-name file))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 (visit-file (if (stringp visit) (expand-file-name visit) filename))
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
292 (info (jka-compr-get-compression-info visit-file))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
293 (magic (and info (jka-compr-info-file-magic-bytes info))))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294
42461
c28b5df30ea0 (jka-compr-write-region): If START = nil, use whole buf.
Richard M. Stallman <rms@gnu.org>
parents: 42231
diff changeset
295 ;; If START is nil, use the whole buffer.
c28b5df30ea0 (jka-compr-write-region): If START = nil, use whole buf.
Richard M. Stallman <rms@gnu.org>
parents: 42231
diff changeset
296 (if (null start)
c28b5df30ea0 (jka-compr-write-region): If START = nil, use whole buf.
Richard M. Stallman <rms@gnu.org>
parents: 42231
diff changeset
297 (setq start 1 end (1+ (buffer-size))))
c28b5df30ea0 (jka-compr-write-region): If START = nil, use whole buf.
Richard M. Stallman <rms@gnu.org>
parents: 42231
diff changeset
298
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
299 ;; If we uncompressed this file when visiting it,
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
300 ;; then recompress it when writing it
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
301 ;; even if the contents look compressed already.
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
302 (if (and jka-compr-really-do-compress
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
303 (eq start 1)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
304 (eq end (1+ (buffer-size))))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
305 (setq magic nil))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
307 (if (and info
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
308 ;; If the contents to be written out
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
309 ;; are properly compressed already,
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
310 ;; don't try to compress them over again.
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
311 (not (and magic
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
312 (equal (if (stringp start)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
313 (substring start 0 (min (length start)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
314 (length magic)))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
315 (buffer-substring start
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
316 (min end
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
317 (+ start (length magic)))))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
318 magic))))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
319 (let ((can-append (jka-compr-info-can-append info))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
320 (compress-program (jka-compr-info-compress-program info))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
321 (compress-message (jka-compr-info-compress-message info))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
322 (compress-args (jka-compr-info-compress-args info))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
323 (base-name (file-name-nondirectory visit-file))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
324 temp-file temp-buffer
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
325 ;; we need to leave `last-coding-system-used' set to its
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
326 ;; value after calling write-region the first time, so
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
327 ;; that `basic-save-buffer' sees the right value.
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
328 (coding-system-used last-coding-system-used))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329
54521
36922d8fd700 (jka-compr-compression-info-list): Add tbz and dz.
Juri Linkov <juri@jurta.org>
parents: 53477
diff changeset
330 (or compress-program
36922d8fd700 (jka-compr-compression-info-list): Add tbz and dz.
Juri Linkov <juri@jurta.org>
parents: 53477
diff changeset
331 (error "No compression program defined"))
36922d8fd700 (jka-compr-compression-info-list): Add tbz and dz.
Juri Linkov <juri@jurta.org>
parents: 53477
diff changeset
332
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
333 (setq temp-buffer (get-buffer-create " *jka-compr-wr-temp*"))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
334 (with-current-buffer temp-buffer
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
335 (widen) (erase-buffer))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
337 (if (and append
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
338 (not can-append)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
339 (file-exists-p filename))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
341 (let* ((local-copy (file-local-copy filename))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
342 (local-file (or local-copy filename)))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
343
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
344 (setq temp-file local-file))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
345
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
346 (setq temp-file (jka-compr-make-temp-name)))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
348 (and
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
349 compress-message
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
350 (message "%s %s..." compress-message base-name))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
351
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
352 (jka-compr-run-real-handler 'write-region
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
353 (list start end temp-file t 'dont))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
354 ;; save value used by the real write-region
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
355 (setq coding-system-used last-coding-system-used)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
357 ;; Here we must read the output of compress program as is
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
358 ;; without any code conversion.
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
359 (let ((coding-system-for-read 'no-conversion))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
360 (jka-compr-call-process compress-program
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
361 (concat compress-message
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
362 " " base-name)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
363 temp-file
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
364 temp-buffer
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
365 nil
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
366 compress-args))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
368 (with-current-buffer temp-buffer
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
369 (let ((coding-system-for-write 'no-conversion))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
370 (if (memq system-type '(ms-dos windows-nt))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
371 (setq buffer-file-type t) )
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
372 (jka-compr-run-real-handler 'write-region
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
373 (list (point-min) (point-max)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
374 filename
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
375 (and append can-append) 'dont))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
376 (erase-buffer)) )
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
378 (jka-compr-delete-temp-file temp-file)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
379
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
380 (and
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
381 compress-message
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
382 (message "%s %s...done" compress-message base-name))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
384 (cond
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
385 ((eq visit t)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
386 (setq buffer-file-name filename)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
387 (setq jka-compr-really-do-compress t)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
388 (set-visited-file-modtime))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
389 ((stringp visit)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
390 (setq buffer-file-name visit)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
391 (let ((buffer-file-name filename))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
392 (set-visited-file-modtime))))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
394 (and (or (eq visit t)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
395 (eq visit nil)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
396 (stringp visit))
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
397 (message "Wrote %s" visit-file))
22360
09dbe38a603f (jka-compr-write-region): Ensure
Karl Heuer <kwzh@gnu.org>
parents: 22194
diff changeset
398
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
399 ;; ensure `last-coding-system-used' has an appropriate value
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
400 (setq last-coding-system-used coding-system-used)
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
401
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
402 nil)
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
403
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
404 (jka-compr-run-real-handler 'write-region
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
405 (list start end filename append visit)))))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407
6218
f4d5338c2142 (jka-compr-insert-file-contents): Handle 5th arg.
Richard M. Stallman <rms@gnu.org>
parents: 6041
diff changeset
408 (defun jka-compr-insert-file-contents (file &optional visit beg end replace)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 (barf-if-buffer-read-only)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 (and (or beg end)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 visit
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 (error "Attempt to visit less than an entire file"))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 (let* ((filename (expand-file-name file))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 (info (jka-compr-get-compression-info filename)))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 (if info
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 (let ((uncompress-message (jka-compr-info-uncompress-message info))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 (uncompress-program (jka-compr-info-uncompress-program info))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 (uncompress-args (jka-compr-info-uncompress-args info))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 (base-name (file-name-nondirectory filename))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 (notfound nil)
7976
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
425 (local-copy
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
426 (jka-compr-run-real-handler 'file-local-copy (list filename)))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 local-file
49377
e5099d153f94 (jka-compr-insert-file-contents): Read a process
Kenichi Handa <handa@m17n.org>
parents: 47180
diff changeset
428 size start)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 (setq local-file (or local-copy filename))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 (and
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 visit
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 (setq buffer-file-name filename))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 (unwind-protect ; to make sure local-copy gets deleted
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (progn
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
439
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (and
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 uncompress-message
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (message "%s %s..." uncompress-message base-name))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 (condition-case error-code
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445
49377
e5099d153f94 (jka-compr-insert-file-contents): Read a process
Kenichi Handa <handa@m17n.org>
parents: 47180
diff changeset
446 (let ((coding-system-for-read 'no-conversion))
8774
ade4b542a74c (jka-compr-compression-info-list): Expand regular
Richard M. Stallman <rms@gnu.org>
parents: 8593
diff changeset
447 (if replace
ade4b542a74c (jka-compr-compression-info-list): Expand regular
Richard M. Stallman <rms@gnu.org>
parents: 8593
diff changeset
448 (goto-char (point-min)))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 (setq start (point))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 (if (or beg end)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (jka-compr-partial-uncompress uncompress-program
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 (concat uncompress-message
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 " " base-name)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 uncompress-args
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 local-file
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 (or beg 0)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 (if (and beg end)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 (- end beg)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 end))
11621
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
460 ;; If visiting, bind off buffer-file-name so that
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
461 ;; file-locking will not ask whether we should
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
462 ;; really edit the buffer.
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
463 (let ((buffer-file-name
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
464 (if visit nil buffer-file-name)))
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
465 (jka-compr-call-process uncompress-program
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
466 (concat uncompress-message
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
467 " " base-name)
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
468 local-file
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
469 t
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
470 nil
710b5ce824c2 (jka-compr-insert-file-contents): When visiting,
Richard M. Stallman <rms@gnu.org>
parents: 11296
diff changeset
471 uncompress-args)))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 (setq size (- (point) start))
8774
ade4b542a74c (jka-compr-compression-info-list): Expand regular
Richard M. Stallman <rms@gnu.org>
parents: 8593
diff changeset
473 (if replace
51284
55a88703765d (jka-compr-insert-file-contents):
Richard M. Stallman <rms@gnu.org>
parents: 49597
diff changeset
474 (delete-region (point) (point-max)))
8774
ade4b542a74c (jka-compr-compression-info-list): Expand regular
Richard M. Stallman <rms@gnu.org>
parents: 8593
diff changeset
475 (goto-char start))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 (error
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 (if (and (eq (car error-code) 'file-error)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 (eq (nth 3 error-code) local-file))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 (if visit
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 (setq notfound error-code)
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
481 (signal 'file-error
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 (cons "Opening input file"
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 (nthcdr 2 error-code))))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 (signal (car error-code) (cdr error-code))))))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 (and
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 local-copy
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 (file-exists-p local-copy)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 (delete-file local-copy)))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490
53304
b9463f85fb04 (jka-compr-insert-file-contents): Avoid error when
Andreas Schwab <schwab@suse.de>
parents: 52401
diff changeset
491 (unless notfound
b9463f85fb04 (jka-compr-insert-file-contents): Avoid error when
Andreas Schwab <schwab@suse.de>
parents: 52401
diff changeset
492 (decode-coding-inserted-region
b9463f85fb04 (jka-compr-insert-file-contents): Avoid error when
Andreas Schwab <schwab@suse.de>
parents: 52401
diff changeset
493 (point) (+ (point) size)
b9463f85fb04 (jka-compr-insert-file-contents): Avoid error when
Andreas Schwab <schwab@suse.de>
parents: 52401
diff changeset
494 (jka-compr-byte-compiler-base-file-name file)
b9463f85fb04 (jka-compr-insert-file-contents): Avoid error when
Andreas Schwab <schwab@suse.de>
parents: 52401
diff changeset
495 visit beg end replace))
49377
e5099d153f94 (jka-compr-insert-file-contents): Read a process
Kenichi Handa <handa@m17n.org>
parents: 47180
diff changeset
496
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 (and
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 visit
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 (progn
7976
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
500 (unlock-buffer)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 (setq buffer-file-name filename)
26987
af30e0897839 (jka-compr-info-file-magic-bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents: 26039
diff changeset
502 (setq jka-compr-really-do-compress t)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (set-visited-file-modtime)))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
504
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 (and
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 uncompress-message
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 (message "%s %s...done" uncompress-message base-name))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 (and
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 visit
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 notfound
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 (signal 'file-error
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 (cons "Opening input file" (nth 2 notfound))))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514
22484
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
515 ;; This is done in insert-file-contents after we return.
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
516 ;; That is a little weird, but better to go along with it now
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
517 ;; than to change it now.
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
518
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
519 ;;; ;; Run the functions that insert-file-contents would.
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
520 ;;; (let ((p after-insert-file-functions)
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
521 ;;; (insval size))
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
522 ;;; (while p
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
523 ;;; (setq insval (funcall (car p) size))
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
524 ;;; (if insval
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
525 ;;; (progn
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
526 ;;; (or (integerp insval)
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
527 ;;; (signal 'wrong-type-argument
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
528 ;;; (list 'integerp insval)))
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
529 ;;; (setq size insval)))
661650f543ee (jka-compr-insert-file-contents): Don't run
Richard M. Stallman <rms@gnu.org>
parents: 22360
diff changeset
530 ;;; (setq p (cdr p))))
8774
ade4b542a74c (jka-compr-compression-info-list): Expand regular
Richard M. Stallman <rms@gnu.org>
parents: 8593
diff changeset
531
54521
36922d8fd700 (jka-compr-compression-info-list): Add tbz and dz.
Juri Linkov <juri@jurta.org>
parents: 53477
diff changeset
532 (or (jka-compr-info-compress-program info)
36922d8fd700 (jka-compr-compression-info-list): Add tbz and dz.
Juri Linkov <juri@jurta.org>
parents: 53477
diff changeset
533 (message "You can't save this buffer because compression program is not defined"))
36922d8fd700 (jka-compr-compression-info-list): Add tbz and dz.
Juri Linkov <juri@jurta.org>
parents: 53477
diff changeset
534
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 (list filename size))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536
7976
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
537 (jka-compr-run-real-handler 'insert-file-contents
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
538 (list file visit beg end replace)))))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (defun jka-compr-file-local-copy (file)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 (let* ((filename (expand-file-name file))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 (info (jka-compr-get-compression-info filename)))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 (if info
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 (let ((uncompress-message (jka-compr-info-uncompress-message info))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 (uncompress-program (jka-compr-info-uncompress-program info))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 (uncompress-args (jka-compr-info-uncompress-args info))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 (base-name (file-name-nondirectory filename))
7976
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
551 (local-copy
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
552 (jka-compr-run-real-handler 'file-local-copy (list filename)))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 (temp-file (jka-compr-make-temp-name t))
11635
b56f6afa16ec (jka-compr-write-region): Handle the append
Richard M. Stallman <rms@gnu.org>
parents: 11621
diff changeset
554 (temp-buffer (get-buffer-create " *jka-compr-flc-temp*"))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 (notfound nil)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 local-file)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 (setq local-file (or local-copy filename))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 (unwind-protect
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561
16940
6d680b18a47b (jka-compr-error): Use with-current-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 16630
diff changeset
562 (with-current-buffer temp-buffer
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
563
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 (and
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 uncompress-message
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 (message "%s %s..." uncompress-message base-name))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
567
18906
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
568 ;; Here we must read the output of uncompress program
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
569 ;; and write it to TEMP-FILE without any code
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
570 ;; conversion. An appropriate code conversion (if
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
571 ;; necessary) is done by the later I/O operation
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
572 ;; (e.g. load).
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
573 (let ((coding-system-for-read 'no-conversion)
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
574 (coding-system-for-write 'no-conversion))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575
18906
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
576 (jka-compr-call-process uncompress-program
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
577 (concat uncompress-message
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
578 " " base-name)
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
579 local-file
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
580 t
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
581 nil
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
582 uncompress-args)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583
18906
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
584 (and
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
585 uncompress-message
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
586 (message "%s %s...done" uncompress-message base-name))
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
587
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
588 (write-region
67642fb78fc4 Fix previous changes.
Kenichi Handa <handa@m17n.org>
parents: 18879
diff changeset
589 (point-min) (point-max) temp-file nil 'dont)))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 (and
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 local-copy
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 (file-exists-p local-copy)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (delete-file local-copy))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (kill-buffer temp-buffer))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 temp-file)
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
599
7976
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
600 (jka-compr-run-real-handler 'file-local-copy (list filename)))))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 ;;; Support for loading compressed files.
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 (defun jka-compr-load (file &optional noerror nomessage nosuffix)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 "Documented as original."
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 (let* ((local-copy (jka-compr-file-local-copy file))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 (load-file (or local-copy file)))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 (unwind-protect
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611
7976
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
612 (let (inhibit-file-name-operation
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
613 inhibit-file-name-handlers)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 (or nomessage
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 (message "Loading %s..." file))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616
12758
a285eaa710ac (jka-compr-load): Bind load-force-doc-strings.
Richard M. Stallman <rms@gnu.org>
parents: 11635
diff changeset
617 (let ((load-force-doc-strings t))
a285eaa710ac (jka-compr-load): Bind load-force-doc-strings.
Richard M. Stallman <rms@gnu.org>
parents: 11635
diff changeset
618 (load load-file noerror t t))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 (or nomessage
27512
b7020186895e (jka-compr-load): Fix up load-history.
Dave Love <fx@gnu.org>
parents: 26987
diff changeset
620 (message "Loading %s...done." file))
b7020186895e (jka-compr-load): Fix up load-history.
Dave Love <fx@gnu.org>
parents: 26987
diff changeset
621 ;; Fix up the load history to point at the right library.
b7020186895e (jka-compr-load): Fix up load-history.
Dave Love <fx@gnu.org>
parents: 26987
diff changeset
622 (let ((l (assoc load-file load-history)))
b7020186895e (jka-compr-load): Fix up load-history.
Dave Love <fx@gnu.org>
parents: 26987
diff changeset
623 ;; Remove .gz and .elc?.
b7020186895e (jka-compr-load): Fix up load-history.
Dave Love <fx@gnu.org>
parents: 26987
diff changeset
624 (while (file-name-extension file)
b7020186895e (jka-compr-load): Fix up load-history.
Dave Love <fx@gnu.org>
parents: 26987
diff changeset
625 (setq file (file-name-sans-extension file)))
b7020186895e (jka-compr-load): Fix up load-history.
Dave Love <fx@gnu.org>
parents: 26987
diff changeset
626 (setcar l file)))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 (jka-compr-delete-temp-file local-copy))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 t))
12922
e171a85fd6b0 (jka-compr-byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12758
diff changeset
631
e171a85fd6b0 (jka-compr-byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12758
diff changeset
632 (defun jka-compr-byte-compiler-base-file-name (file)
e171a85fd6b0 (jka-compr-byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12758
diff changeset
633 (let ((info (jka-compr-get-compression-info file)))
e171a85fd6b0 (jka-compr-byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12758
diff changeset
634 (if (and info (jka-compr-info-strip-extension info))
e171a85fd6b0 (jka-compr-byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12758
diff changeset
635 (save-match-data
e171a85fd6b0 (jka-compr-byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12758
diff changeset
636 (substring file 0 (string-match (jka-compr-info-regexp info) file)))
e171a85fd6b0 (jka-compr-byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12758
diff changeset
637 file)))
7976
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
638
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
639 (put 'write-region 'jka-compr 'jka-compr-write-region)
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
640 (put 'insert-file-contents 'jka-compr 'jka-compr-insert-file-contents)
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
641 (put 'file-local-copy 'jka-compr 'jka-compr-file-local-copy)
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
642 (put 'load 'jka-compr 'jka-compr-load)
12922
e171a85fd6b0 (jka-compr-byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12758
diff changeset
643 (put 'byte-compiler-base-file-name 'jka-compr
e171a85fd6b0 (jka-compr-byte-compiler-base-file-name): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12758
diff changeset
644 'jka-compr-byte-compiler-base-file-name)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645
61946
982afd92d8bb Many functions and vars moved to jka-compr-hook.el.
Richard M. Stallman <rms@gnu.org>
parents: 61601
diff changeset
646 ;;;###autoload
20132
b691f68b0757 (jka-compr-inhibit): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 19004
diff changeset
647 (defvar jka-compr-inhibit nil
b691f68b0757 (jka-compr-inhibit): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 19004
diff changeset
648 "Non-nil means inhibit automatic uncompression temporarily.
b691f68b0757 (jka-compr-inhibit): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 19004
diff changeset
649 Lisp programs can bind this to t to do that.
b691f68b0757 (jka-compr-inhibit): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 19004
diff changeset
650 It is not recommended to set this variable permanently to anything but nil.")
b691f68b0757 (jka-compr-inhibit): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 19004
diff changeset
651
61946
982afd92d8bb Many functions and vars moved to jka-compr-hook.el.
Richard M. Stallman <rms@gnu.org>
parents: 61601
diff changeset
652 ;;;###autoload
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 (defun jka-compr-handler (operation &rest args)
7976
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
654 (save-match-data
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
655 (let ((jka-op (get operation 'jka-compr)))
20132
b691f68b0757 (jka-compr-inhibit): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 19004
diff changeset
656 (if (and jka-op (not jka-compr-inhibit))
7976
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
657 (apply jka-op args)
b72b84744a85 Use plists to record handlers.
Richard M. Stallman <rms@gnu.org>
parents: 7617
diff changeset
658 (jka-compr-run-real-handler operation args)))))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659
7066
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
660 ;; If we are given an operation that we don't handle,
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
661 ;; call the Emacs primitive for that operation,
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
662 ;; and manipulate the inhibit variables
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
663 ;; to prevent the primitive from calling our handler again.
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
664 (defun jka-compr-run-real-handler (operation args)
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
665 (let ((inhibit-file-name-handlers
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
666 (cons 'jka-compr-handler
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
667 (and (eq inhibit-file-name-operation operation)
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
668 inhibit-file-name-handlers)))
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
669 (inhibit-file-name-operation operation))
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
670 (apply operation args)))
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
671
62108
5b31557e355c (jka-compr-uninstall): Add autoload cookie.
Eli Zaretskii <eliz@gnu.org>
parents: 61946
diff changeset
672 ;;;###autoload
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 (defun jka-compr-uninstall ()
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 "Uninstall jka-compr.
7066
de9caaa1de09 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 6800
diff changeset
675 This removes the entries in `file-name-handler-alist' and `auto-mode-alist'
11296
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
676 and `inhibit-first-line-modes-suffixes' that were added
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
677 by `jka-compr-installed'."
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
678 ;; Delete from inhibit-first-line-modes-suffixes
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
679 ;; what jka-compr-install added.
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
680 (mapcar
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
681 (function (lambda (x)
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
682 (and (jka-compr-info-strip-extension x)
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
683 (setq inhibit-first-line-modes-suffixes
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
684 (delete (jka-compr-info-regexp x)
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
685 inhibit-first-line-modes-suffixes)))))
c271ed10f874 (jka-compr-install): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 11179
diff changeset
686 jka-compr-compression-info-list)
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 (let* ((fnha (cons nil file-name-handler-alist))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (last fnha))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 (while (cdr last)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 (if (eq (cdr (car (cdr last))) 'jka-compr-handler)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 (setcdr last (cdr (cdr last)))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 (setq last (cdr last))))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 (setq file-name-handler-alist (cdr fnha)))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 (let* ((ama (cons nil auto-mode-alist))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 (last ama)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 entry)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 (while (cdr last)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 (setq entry (car (cdr last)))
9493
0160fca3dee1 (jka-compr-mode-compression-info-list): Add .tgz extension.
Richard M. Stallman <rms@gnu.org>
parents: 9084
diff changeset
704 (if (or (member entry jka-compr-mode-alist-additions)
0160fca3dee1 (jka-compr-mode-compression-info-list): Add .tgz extension.
Richard M. Stallman <rms@gnu.org>
parents: 9084
diff changeset
705 (and (consp (cdr entry))
0160fca3dee1 (jka-compr-mode-compression-info-list): Add .tgz extension.
Richard M. Stallman <rms@gnu.org>
parents: 9084
diff changeset
706 (eq (nth 2 entry) 'jka-compr)))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 (setcdr last (cdr (cdr last)))
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 (setq last (cdr last))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
709
19004
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
710 (setq auto-mode-alist (cdr ama)))
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
711
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
712 (let* ((ama (cons nil file-coding-system-alist))
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
713 (last ama)
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
714 entry)
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
715
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
716 (while (cdr last)
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
717 (setq entry (car (cdr last)))
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
718 (if (member entry jka-compr-added-to-file-coding-system-alist)
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
719 (setcdr last (cdr (cdr last)))
f2ce7e947ec9 (jka-compr-added-to-file-coding-system-alist): New var.
Richard M. Stallman <rms@gnu.org>
parents: 18906
diff changeset
720 (setq last (cdr last))))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49418
diff changeset
721
39829
79ed34b0c0df (jka-compr-load-suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
722 (setq file-coding-system-alist (cdr ama)))
79ed34b0c0df (jka-compr-load-suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
723
79ed34b0c0df (jka-compr-load-suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
724 ;; Remove the suffixes that were added by jka-compr.
79ed34b0c0df (jka-compr-load-suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
725 (let ((suffixes nil)
79ed34b0c0df (jka-compr-load-suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
726 (re (jka-compr-build-file-regexp)))
79ed34b0c0df (jka-compr-load-suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
727 (dolist (suffix load-suffixes)
79ed34b0c0df (jka-compr-load-suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
728 (unless (string-match re suffix)
79ed34b0c0df (jka-compr-load-suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
729 (push suffix suffixes)))
79ed34b0c0df (jka-compr-load-suffixes): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
730 (setq load-suffixes (nreverse suffixes))))
6002
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (provide 'jka-compr)
7507f44b1e5e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51284
diff changeset
734 ;;; arch-tag: 3f15b630-e9a7-46c4-a22a-94afdde86ebc
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 34732
diff changeset
735 ;;; jka-compr.el ends here