annotate lisp/arc-mode.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents b3c0f3ad64d8
children 0a8d7e789bca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1 ;;; arc-mode.el --- simple editing of archives
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
2
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
3 ;; Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
4
17977
727cf56647a4 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 16291
diff changeset
5 ;; Author: Morten Welinder <terra@diku.dk>
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
6 ;; Keywords: archives msdog editing major-mode
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
7 ;; Favourite-brand-of-beer: None, I hate beer.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
8
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
9 ;; This file is part of GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
10
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
14 ;; any later version.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
15
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
19 ;; GNU General Public License for more details.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
20
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
21 ;; You should have received a copy of the GNU General Public License
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
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: 13966
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
24 ;; Boston, MA 02111-1307, USA.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
25
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13966
diff changeset
27
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
28 ;; NAMING: "arc" is short for "archive" and does not refer specifically
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
29 ;; to files whose name end in ".arc"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
30 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
31 ;; This code does not decode any files internally, although it does
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
32 ;; understand the directory level of the archives. For this reason,
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
33 ;; you should expect this code to need more fiddling than tar-mode.el
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
34 ;; (although it at present has fewer bugs :-) In particular, I have
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
35 ;; not tested this under Ms-Dog myself.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
36 ;; -------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
37 ;; INTERACTION: arc-mode.el should play together with
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
38 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
39 ;; * ange-ftp.el: Remote archives (i.e., ones that ange-ftp has brought
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
40 ;; to you) are handled by doing all updates on a local
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
41 ;; copy. When you make changes to a remote file the
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
42 ;; changes will first take effect when the archive buffer
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
43 ;; is saved. You will be warned about this.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
44 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
45 ;; * dos-fns.el: (Part of Emacs 19). You get automatic ^M^J <--> ^J
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
46 ;; conversion.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
47 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
48 ;; arc-mode.el does not work well with crypt++.el; for the archives as
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
49 ;; such this could be fixed (but wouldn't be useful) by declaring such
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
50 ;; archives to be "remote". For the members this is a general Emacs
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
51 ;; problem that 19.29's file formats may fix.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
52 ;; -------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
53 ;; ARCHIVE TYPES: Currently only the archives below are handled, but the
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
54 ;; structure for handling just about anything is in place.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
55 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
56 ;; Arc Lzh Zip Zoo
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
57 ;; --------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
58 ;; View listing Intern Intern Intern Intern
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
59 ;; Extract member Y Y Y Y
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
60 ;; Save changed member Y Y Y Y
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
61 ;; Add new member N N N N
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
62 ;; Delete member Y Y Y Y
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
63 ;; Rename member Y Y N N
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
64 ;; Chmod - Y Y -
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
65 ;; Chown - Y - -
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
66 ;; Chgrp - Y - -
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
67 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
68 ;; Special thanks to Bill Brodie <wbrodie@panix.com> for very useful tips
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
69 ;; on the first released version of this package.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
70 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
71 ;; This code is partly based on tar-mode.el from Emacs.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
72 ;; -------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
73 ;; ARCHIVE STRUCTURES:
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
74 ;; (This is mostly for myself.)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
75 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
76 ;; ARC A series of (header,file). No interactions among members.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
77 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
78 ;; LZH A series of (header,file). Headers are checksummed. No
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
79 ;; interaction among members.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
80 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
81 ;; ZIP A series of (lheader,fil) followed by a "central directory"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
82 ;; which is a series of (cheader) followed by an end-of-
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
83 ;; central-dir record possibly followed by junk. The e-o-c-d
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
84 ;; links to c-d. cheaders link to lheaders which are basically
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
85 ;; cut-down versions of the cheaders.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
86 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
87 ;; ZOO An archive header followed by a series of (header,file).
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
88 ;; Each member header points to the next. The archive is
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
89 ;; terminated by a bogus header with a zero next link.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
90 ;; -------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
91 ;; HOOKS: `foo' means one the the supported archive types.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
92 ;;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
93 ;; archive-mode-hook
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
94 ;; archive-foo-mode-hook
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
95 ;; archive-extract-hooks
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
96
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
97 ;;; Code:
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
98
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
99 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
100 ;; Section: Configuration.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
101
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
102 (defgroup archive nil
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
103 "Simple editing of archives."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
104 :group 'data)
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
105
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
106 (defgroup archive-arc nil
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
107 "ARC-specific options to archive."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
108 :group 'archive)
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
109
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
110 (defgroup archive-lzh nil
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
111 "LZH-specific options to archive."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
112 :group 'archive)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
113
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
114 (defgroup archive-zip nil
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
115 "ZIP-specific options to archive."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
116 :group 'archive)
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
117
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
118 (defgroup archive-zoo nil
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
119 "ZOO-specific options to archive."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
120 :group 'archive)
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
121
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
122 (defcustom archive-tmpdir
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
123 (make-temp-name
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
124 (expand-file-name (if (eq system-type 'ms-dos) "ar" "archive.tmp")
22096
2f9cb89376a6 (archive-tmpdir): Use temporary-file-directory.
Richard M. Stallman <rms@gnu.org>
parents: 22086
diff changeset
125 temporary-file-directory))
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
126 "*Directory for temporary files made by arc-mode.el"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
127 :type 'directory
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
128 :group 'archive)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
129
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
130 (defcustom archive-remote-regexp "^/[^/:]*[^/:.]:"
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
131 "*Regexp recognizing archive files names that are not local.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
132 A non-local file is one whose file name is not proper outside Emacs.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
133 A local copy of the archive will be used when updating."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
134 :type 'regexp
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
135 :group 'archive)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
136
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
137 (defcustom archive-extract-hooks nil
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
138 "*Hooks to run when an archive member has been extracted."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
139 :type 'hook
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
140 :group 'archive)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
141 ;; ------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
142 ;; Arc archive configuration
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
143
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
144 ;; We always go via a local file since there seems to be no reliable way
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
145 ;; to extract to stdout without junk getting added.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
146 (defcustom archive-arc-extract
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
147 '("arc" "x")
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
148 "*Program and its options to run in order to extract an arc file member.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
149 Extraction should happen to the current directory. Archive and member
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
150 name will be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
151 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
152 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
153 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
154 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
155 :group 'archive-arc)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
156
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
157 (defcustom archive-arc-expunge
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
158 '("arc" "d")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
159 "*Program and its options to run in order to delete arc file members.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
160 Archive and member names will be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
161 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
162 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
163 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
164 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
165 :group 'archive-arc)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
166
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
167 (defcustom archive-arc-write-file-member
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
168 '("arc" "u")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
169 "*Program and its options to run in order to update an arc file member.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
170 Archive and member name will be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
171 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
172 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
173 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
174 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
175 :group 'archive-arc)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
176 ;; ------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
177 ;; Lzh archive configuration
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
178
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
179 (defcustom archive-lzh-extract
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
180 '("lha" "pq")
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
181 "*Program and its options to run in order to extract an lzh file member.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
182 Extraction should happen to standard output. Archive and member name will
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
183 be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
184 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
185 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
186 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
187 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
188 :group 'archive-lzh)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
189
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
190 (defcustom archive-lzh-expunge
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
191 '("lha" "d")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
192 "*Program and its options to run in order to delete lzh file members.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
193 Archive and member names will be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
194 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
195 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
196 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
197 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
198 :group 'archive-lzh)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
199
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
200 (defcustom archive-lzh-write-file-member
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
201 '("lha" "a")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
202 "*Program and its options to run in order to update an lzh file member.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
203 Archive and member name will be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
204 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
205 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
206 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
207 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
208 :group 'archive-lzh)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
209 ;; ------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
210 ;; Zip archive configuration
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
211
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
212 (defcustom archive-zip-use-pkzip (memq system-type '(ms-dos windows-nt))
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
213 "*If non-nil then pkzip option are used instead of zip options.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
214 Only set to true for msdog systems!"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
215 :type 'boolean
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
216 :group 'archive-zip)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
217
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
218 (defcustom archive-zip-extract
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
219 (if archive-zip-use-pkzip '("pkunzip" "-e" "-o-") '("unzip" "-qq" "-c"))
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
220 "*Program and its options to run in order to extract a zip file member.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
221 Extraction should happen to standard output. Archive and member name will
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
222 be added. If `archive-zip-use-pkzip' is non-nil then this program is
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
223 expected to extract to a file junking the directory part of the name."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
224 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
225 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
226 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
227 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
228 :group 'archive-zip)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
229
13966
82eeef849f8b (archive-summarize-files): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13539
diff changeset
230 ;; For several reasons the latter behaviour is not desirable in general.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
231 ;; (1) It uses more disk space. (2) Error checking is worse or non-
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
232 ;; existent. (3) It tends to do funny things with other systems' file
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
233 ;; names.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
234
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
235 (defcustom archive-zip-expunge
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
236 (if archive-zip-use-pkzip '("pkzip" "-d") '("zip" "-d" "-q"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
237 "*Program and its options to run in order to delete zip file members.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
238 Archive and member names will be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
239 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
240 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
241 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
242 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
243 :group 'archive-zip)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
244
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
245 (defcustom archive-zip-update
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
246 (if archive-zip-use-pkzip '("pkzip" "-u") '("zip" "-q"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
247 "*Program and its options to run in order to update a zip file member.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
248 Options should ensure that specified directory will be put into the zip
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
249 file. Archive and member name will be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
250 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
251 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
252 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
253 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
254 :group 'archive-zip)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
255
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
256 (defcustom archive-zip-update-case
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
257 (if archive-zip-use-pkzip archive-zip-update '("zip" "-q" "-k"))
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
258 "*Program and its options to run in order to update a case fiddled zip member.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
259 Options should ensure that specified directory will be put into the zip file.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
260 Archive and member name will be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
261 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
262 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
263 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
264 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
265 :group 'archive-zip)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
266
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
267 (defcustom archive-zip-case-fiddle t
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
268 "*If non-nil then zip file members may be down-cased.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
269 This case fiddling will only happen for members created by a system
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
270 that uses caseless file names."
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
271 :type 'boolean
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
272 :group 'archive-zip)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
273 ;; ------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
274 ;; Zoo archive configuration
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
275
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
276 (defcustom archive-zoo-extract
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
277 '("zoo" "xpq")
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
278 "*Program and its options to run in order to extract a zoo file member.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
279 Extraction should happen to standard output. Archive and member name will
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
280 be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
281 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
282 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
283 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
284 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
285 :group 'archive-zoo)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
286
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
287 (defcustom archive-zoo-expunge
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
288 '("zoo" "DqPP")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
289 "*Program and its options to run in order to delete zoo file members.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
290 Archive and member names will be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
291 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
292 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
293 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
294 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
295 :group 'archive-zoo)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
296
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
297 (defcustom archive-zoo-write-file-member
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
298 '("zoo" "a")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
299 "*Program and its options to run in order to update a zoo file member.
19926
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
300 Archive and member name will be added."
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
301 :type '(list (string :tag "Program")
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
302 (repeat :tag "Options"
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
303 :inline t
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
304 (string :format "%v")))
09d355f9877e Customized.
Richard M. Stallman <rms@gnu.org>
parents: 18286
diff changeset
305 :group 'archive-zoo)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
306 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
307 ;; Section: Variables
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
308
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
309 (defvar archive-subtype nil "*Symbol describing archive type.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
310 (defvar archive-file-list-start nil "*Position of first contents line.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
311 (defvar archive-file-list-end nil "*Position just after last contents line.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
312 (defvar archive-proper-file-start nil "*Position of real archive's start.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
313 (defvar archive-read-only nil "*Non-nil if the archive is read-only on disk.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
314 (defvar archive-local-name nil "*Name of local copy of remote archive.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
315 (defvar archive-mode-map nil "*Local keymap for archive mode listings.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
316 (defvar archive-file-name-indent nil "*Column where file names start.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
317
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
318 (defvar archive-remote nil "*Non-nil if the archive is outside file system.")
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
319 (make-variable-buffer-local 'archive-remote)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
320 (put 'archive-remote 'permanent-local t)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
321
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
322 (defvar archive-member-coding-system nil "Coding-system of archive member.")
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
323 (make-variable-buffer-local 'archive-member-coding-system)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
324
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
325 (defvar archive-alternate-display nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
326 "*Non-nil when alternate information is shown.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
327 (make-variable-buffer-local 'archive-alternate-display)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
328 (put 'archive-alternate-display 'permanent-local t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
329
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
330 (defvar archive-superior-buffer nil "*In archive members, points to archive.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
331 (put 'archive-superior-buffer 'permanent-local t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
332
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
333 (defvar archive-subfile-mode nil "*Non-nil in archive member buffers.")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
334 (make-variable-buffer-local 'archive-subfile-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
335 (put 'archive-subfile-mode 'permanent-local t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
336
16291
d62ef382bb03 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16290
diff changeset
337 (defvar archive-files nil
d62ef382bb03 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16290
diff changeset
338 "Vector of file descriptors.
d62ef382bb03 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16290
diff changeset
339 Each descriptor is a vector of the form
d62ef382bb03 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16290
diff changeset
340 [EXT-FILE-NAME INT-FILE-NAME CASE-FIDDLED MODE ...]")
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
341 (make-variable-buffer-local 'archive-files)
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
342
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
343 (defvar archive-lemacs
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
344 (string-match "\\(Lucid\\|Xemacs\\)" emacs-version)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
345 "*Non-nil when running under under Lucid Emacs or Xemacs.")
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
346 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
347 ;; Section: Support functions.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
348
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
349 (defsubst archive-name (suffix)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
350 (intern (concat "archive-" (symbol-name archive-subtype) "-" suffix)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
351
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
352 (defun archive-l-e (str &optional len)
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
353 "Convert little endian string/vector to integer.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
354 Alternatively, first argument may be a buffer position in the current buffer
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
355 in which case a second argument, length, should be supplied."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
356 (if (stringp str)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
357 (setq len (length str))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
358 (setq str (buffer-substring str (+ str len))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
359 (let ((result 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
360 (i 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
361 (while (< i len)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
362 (setq i (1+ i)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
363 result (+ (ash result 8) (aref str (- len i)))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
364 result))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
365
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
366 (defun archive-int-to-mode (mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
367 "Turn an integer like 0700 (i.e., 448) into a mode string like -rwx------"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
368 (let ((str (make-string 10 ?-)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
369 (or (zerop (logand 16384 mode)) (aset str 0 ?d))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
370 (or (zerop (logand 8192 mode)) (aset str 0 ?c)) ; completeness
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
371 (or (zerop (logand 256 mode)) (aset str 1 ?r))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
372 (or (zerop (logand 128 mode)) (aset str 2 ?w))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
373 (or (zerop (logand 64 mode)) (aset str 3 ?x))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
374 (or (zerop (logand 32 mode)) (aset str 4 ?r))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
375 (or (zerop (logand 16 mode)) (aset str 5 ?w))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
376 (or (zerop (logand 8 mode)) (aset str 6 ?x))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
377 (or (zerop (logand 4 mode)) (aset str 7 ?r))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
378 (or (zerop (logand 2 mode)) (aset str 8 ?w))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
379 (or (zerop (logand 1 mode)) (aset str 9 ?x))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
380 (or (zerop (logand 1024 mode)) (aset str 3 (if (zerop (logand 64 mode))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
381 ?S ?s)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
382 (or (zerop (logand 2048 mode)) (aset str 6 (if (zerop (logand 8 mode))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
383 ?S ?s)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
384 str))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
385
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
386 (defun archive-calc-mode (oldmode newmode &optional error)
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
387 "From the integer OLDMODE and the string NEWMODE calculate a new file mode.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
388 NEWMODE may be an octal number including a leading zero in which case it
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
389 will become the new mode.\n
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
390 NEWMODE may also be a relative specification like \"og-rwx\" in which case
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
391 OLDMODE will be modified accordingly just like chmod(2) would have done.\n
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
392 If optional third argument ERROR is non-nil an error will be signaled if
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
393 the mode is invalid. If ERROR is nil then nil will be returned."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
394 (cond ((string-match "^0[0-7]*$" newmode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
395 (let ((result 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
396 (len (length newmode))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
397 (i 1))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
398 (while (< i len)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
399 (setq result (+ (lsh result 3) (aref newmode i) (- ?0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
400 i (1+ i)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
401 (logior (logand oldmode 65024) result)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
402 ((string-match "^\\([agou]+\\)\\([---+=]\\)\\([rwxst]+\\)$" newmode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
403 (let ((who 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
404 (result oldmode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
405 (op (aref newmode (match-beginning 2)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
406 (bits 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
407 (i (match-beginning 3)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
408 (while (< i (match-end 3))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
409 (let ((rwx (aref newmode i)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
410 (setq bits (logior bits (cond ((= rwx ?r) 292)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
411 ((= rwx ?w) 146)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
412 ((= rwx ?x) 73)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
413 ((= rwx ?s) 3072)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
414 ((= rwx ?t) 512)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
415 i (1+ i))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
416 (while (< who (match-end 1))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
417 (let* ((whoc (aref newmode who))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
418 (whomask (cond ((= whoc ?a) 4095)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
419 ((= whoc ?u) 1472)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
420 ((= whoc ?g) 2104)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
421 ((= whoc ?o) 7))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
422 (if (= op ?=)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
423 (setq result (logand result (lognot whomask))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
424 (if (= op ?-)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
425 (setq result (logand result (lognot (logand whomask bits))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
426 (setq result (logior result (logand whomask bits)))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
427 (setq who (1+ who)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
428 result))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
429 (t
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
430 (if error
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
431 (error "Invalid mode specification: %s" newmode)))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
432
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
433 (defun archive-dosdate (date)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
434 "Stringify dos packed DATE record."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
435 (let ((year (+ 1980 (logand (ash date -9) 127)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
436 (month (logand (ash date -5) 15))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
437 (day (logand date 31)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
438 (if (or (> month 12) (< month 1))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
439 ""
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
440 (format "%2d-%s-%d"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
441 day
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
442 (aref ["Jan" "Feb" "Mar" "Apr" "May" "Jun"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
443 "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"] (1- month))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
444 year))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
445
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
446 (defun archive-dostime (time)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
447 "Stringify dos packed TIME record."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
448 (let ((hour (logand (ash time -11) 31))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
449 (minute (logand (ash time -5) 53))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
450 (second (* 2 (logand time 31)))) ; 2 seconds resolution
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
451 (format "%02d:%02d:%02d" hour minute second)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
452
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
453 ;;(defun archive-unixdate (low high)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
454 ;; "Stringify unix (LOW HIGH) date."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
455 ;; (let ((str (current-time-string (cons high low))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
456 ;; (format "%s-%s-%s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
457 ;; (substring str 8 9)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
458 ;; (substring str 4 7)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
459 ;; (substring str 20 24))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
460
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
461 ;;(defun archive-unixtime (low high)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
462 ;; "Stringify unix (LOW HIGH) time."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
463 ;; (let ((str (current-time-string (cons high low))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
464 ;; (substring str 11 19)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
465
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
466 (defun archive-get-lineno ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
467 (if (>= (point) archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
468 (count-lines archive-file-list-start
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
469 (save-excursion (beginning-of-line) (point)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
470 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
471
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
472 (defun archive-get-descr (&optional noerror)
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
473 "Return the descriptor vector for file at point.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
474 Does not signal an error if optional second argument NOERROR is non-nil."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
475 (let ((no (archive-get-lineno)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
476 (if (and (>= (point) archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
477 (< no (length archive-files)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
478 (let ((item (aref archive-files no)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
479 (if (vectorp item)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
480 item
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
481 (if (not noerror)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
482 (error "Entry is not a regular member of the archive"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
483 (if (not noerror)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
484 (error "Line does not describe a member of the archive")))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
485 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
486 ;; Section: the mode definition
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
487
12437
c3597b66e4bf (archive-mode): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 12304
diff changeset
488 ;;;###autoload
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
489 (defun archive-mode (&optional force)
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
490 "Major mode for viewing an archive file in a dired-like way.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
491 You can move around using the usual cursor motion commands.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
492 Letters no longer insert themselves.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
493 Type `e' to pull a file out of the archive and into its own buffer;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
494 or click mouse-2 on the file's line in the archive mode buffer.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
495
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
496 If you edit a sub-file of this archive (as with the `e' command) and
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
497 save it, the contents of that buffer will be saved back into the
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
498 archive.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
499
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
500 \\{archive-mode-map}"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
501 ;; This is not interactive because you shouldn't be turning this
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
502 ;; mode on and off. You can corrupt things that way.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
503 (if (zerop (buffer-size))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
504 ;; At present we cannot create archives from scratch
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
505 (funcall default-major-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
506 (if (and (not force) archive-files) nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
507 (let* ((type (archive-find-type))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
508 (typename (copy-sequence (symbol-name type))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
509 (aset typename 0 (upcase (aref typename 0)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
510 (kill-all-local-variables)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
511 (make-local-variable 'archive-subtype)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
512 (setq archive-subtype type)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
513
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
514 ;; Buffer contains treated image of file before the file contents
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
515 (make-local-variable 'revert-buffer-function)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
516 (setq revert-buffer-function 'archive-mode-revert)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
517 (auto-save-mode 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
518
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
519 ;; Remote archives are not written by a hook.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
520 (if archive-remote nil
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
521 (make-local-variable 'write-contents-hooks)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
522 (add-hook 'write-contents-hooks 'archive-write-file))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
523
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
524 (make-local-variable 'require-final-newline)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
525 (setq require-final-newline nil)
22472
7d99675ff55f (archive-mode): Locally bind local-enable-local-variables, not
Richard M. Stallman <rms@gnu.org>
parents: 22327
diff changeset
526 (make-local-variable 'local-enable-local-variables)
7d99675ff55f (archive-mode): Locally bind local-enable-local-variables, not
Richard M. Stallman <rms@gnu.org>
parents: 22327
diff changeset
527 (setq local-enable-local-variables nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
528
23481
4e3bead33d34 (archive-mode): Locally set file-precious-flag.
Richard M. Stallman <rms@gnu.org>
parents: 23467
diff changeset
529 ;; Prevent loss of data when saving the file.
4e3bead33d34 (archive-mode): Locally set file-precious-flag.
Richard M. Stallman <rms@gnu.org>
parents: 23467
diff changeset
530 (make-local-variable 'file-precious-flag)
4e3bead33d34 (archive-mode): Locally set file-precious-flag.
Richard M. Stallman <rms@gnu.org>
parents: 23467
diff changeset
531 (setq file-precious-flag t)
4e3bead33d34 (archive-mode): Locally set file-precious-flag.
Richard M. Stallman <rms@gnu.org>
parents: 23467
diff changeset
532
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
533 (make-local-variable 'archive-read-only)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
534 ;; Archives which are inside other archives and whose
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
535 ;; names are invalid for this OS, can't be written.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
536 (setq archive-read-only
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
537 (or (not (file-writable-p (buffer-file-name)))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
538 (and archive-subfile-mode
22174
18a455216af7 (archive-file-name-invalid-regexp): Remove.
Eli Zaretskii <eliz@gnu.org>
parents: 22096
diff changeset
539 (string-match file-name-invalid-regexp
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
540 (aref archive-subfile-mode 0)))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
541
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
542 ;; Should we use a local copy when accessing from outside Emacs?
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
543 (make-local-variable 'archive-local-name)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
544
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
545 ;; An archive can contain another archive whose name is invalid
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
546 ;; on local filesystem. Treat such archives as remote.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
547 (or archive-remote
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
548 (setq archive-remote
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
549 (or (string-match archive-remote-regexp (buffer-file-name))
22174
18a455216af7 (archive-file-name-invalid-regexp): Remove.
Eli Zaretskii <eliz@gnu.org>
parents: 22096
diff changeset
550 (string-match file-name-invalid-regexp
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
551 (buffer-file-name)))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
552
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
553 (setq major-mode 'archive-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
554 (setq mode-name (concat typename "-Archive"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
555 ;; Run archive-foo-mode-hook and archive-mode-hook
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
556 (run-hooks (archive-name "mode-hook") 'archive-mode-hook)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
557 (use-local-map archive-mode-map))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
558
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
559 (make-local-variable 'archive-proper-file-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
560 (make-local-variable 'archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
561 (make-local-variable 'archive-file-list-end)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
562 (make-local-variable 'archive-file-name-indent)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
563 (archive-summarize nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
564 (setq buffer-read-only t))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
565
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
566 ;; Archive mode is suitable only for specially formatted data.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
567 (put 'archive-mode 'mode-class 'special)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
568 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
569 ;; Section: Key maps
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
570
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
571 (if archive-mode-map nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
572 (setq archive-mode-map (make-keymap))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
573 (suppress-keymap archive-mode-map)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
574 (define-key archive-mode-map " " 'archive-next-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
575 (define-key archive-mode-map "a" 'archive-alternate-display)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
576 ;;(define-key archive-mode-map "c" 'archive-copy)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
577 (define-key archive-mode-map "d" 'archive-flag-deleted)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
578 (define-key archive-mode-map "\C-d" 'archive-flag-deleted)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
579 (define-key archive-mode-map "e" 'archive-extract)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
580 (define-key archive-mode-map "f" 'archive-extract)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
581 (define-key archive-mode-map "\C-m" 'archive-extract)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
582 (define-key archive-mode-map "g" 'revert-buffer)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
583 (define-key archive-mode-map "h" 'describe-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
584 (define-key archive-mode-map "m" 'archive-mark)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
585 (define-key archive-mode-map "n" 'archive-next-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
586 (define-key archive-mode-map "\C-n" 'archive-next-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
587 (define-key archive-mode-map [down] 'archive-next-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
588 (define-key archive-mode-map "o" 'archive-extract-other-window)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
589 (define-key archive-mode-map "p" 'archive-previous-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
590 (define-key archive-mode-map "\C-p" 'archive-previous-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
591 (define-key archive-mode-map [up] 'archive-previous-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
592 (define-key archive-mode-map "r" 'archive-rename-entry)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
593 (define-key archive-mode-map "u" 'archive-unflag)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
594 (define-key archive-mode-map "\M-\C-?" 'archive-unmark-all-files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
595 (define-key archive-mode-map "v" 'archive-view)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
596 (define-key archive-mode-map "x" 'archive-expunge)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
597 (define-key archive-mode-map "\177" 'archive-unflag-backwards)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
598 (define-key archive-mode-map "E" 'archive-extract-other-window)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
599 (define-key archive-mode-map "M" 'archive-chmod-entry)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
600 (define-key archive-mode-map "G" 'archive-chgrp-entry)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
601 (define-key archive-mode-map "O" 'archive-chown-entry)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
602
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
603 (if archive-lemacs
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
604 (progn
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
605 ;; Not a nice "solution" but it'll have to do
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
606 (define-key archive-mode-map "\C-xu" 'archive-undo)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
607 (define-key archive-mode-map "\C-_" 'archive-undo))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
608 (substitute-key-definition 'undo 'archive-undo
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
609 archive-mode-map global-map))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
610
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
611 (define-key archive-mode-map
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
612 (if archive-lemacs 'button2 [mouse-2]) 'archive-mouse-extract)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
613
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
614 (if archive-lemacs
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
615 () ; out of luck
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
616 ;; Get rid of the Edit menu bar item to save space.
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
617 (define-key archive-mode-map [menu-bar edit] 'undefined)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
618
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
619 (define-key archive-mode-map [menu-bar immediate]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
620 (cons "Immediate" (make-sparse-keymap "Immediate")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
621 (define-key archive-mode-map [menu-bar immediate alternate]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
622 '("Alternate Display" . archive-alternate-display))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
623 (put 'archive-alternate-display 'menu-enable
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
624 '(boundp (archive-name "alternate-display")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
625 (define-key archive-mode-map [menu-bar immediate view]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
626 '("View This File" . archive-view))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
627 (define-key archive-mode-map [menu-bar immediate display]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
628 '("Display in Other Window" . archive-display-other-window))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
629 (define-key archive-mode-map [menu-bar immediate find-file-other-window]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
630 '("Find in Other Window" . archive-extract-other-window))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
631 (define-key archive-mode-map [menu-bar immediate find-file]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
632 '("Find This File" . archive-extract))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
633
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
634 (define-key archive-mode-map [menu-bar mark]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
635 (cons "Mark" (make-sparse-keymap "Mark")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
636 (define-key archive-mode-map [menu-bar mark unmark-all]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
637 '("Unmark All" . archive-unmark-all-files))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
638 (define-key archive-mode-map [menu-bar mark deletion]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
639 '("Flag" . archive-flag-deleted))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
640 (define-key archive-mode-map [menu-bar mark unmark]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
641 '("Unflag" . archive-unflag))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
642 (define-key archive-mode-map [menu-bar mark mark]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
643 '("Mark" . archive-mark))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
644
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
645 (define-key archive-mode-map [menu-bar operate]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
646 (cons "Operate" (make-sparse-keymap "Operate")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
647 (define-key archive-mode-map [menu-bar operate chown]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
648 '("Change Owner..." . archive-chown-entry))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
649 (put 'archive-chown-entry 'menu-enable
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
650 '(fboundp (archive-name "chown-entry")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
651 (define-key archive-mode-map [menu-bar operate chgrp]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
652 '("Change Group..." . archive-chgrp-entry))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
653 (put 'archive-chgrp-entry 'menu-enable
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
654 '(fboundp (archive-name "chgrp-entry")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
655 (define-key archive-mode-map [menu-bar operate chmod]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
656 '("Change Mode..." . archive-chmod-entry))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
657 (put 'archive-chmod-entry 'menu-enable
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
658 '(fboundp (archive-name "chmod-entry")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
659 (define-key archive-mode-map [menu-bar operate rename]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
660 '("Rename to..." . archive-rename-entry))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
661 (put 'archive-rename-entry 'menu-enable
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
662 '(fboundp (archive-name "rename-entry")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
663 ;;(define-key archive-mode-map [menu-bar operate copy]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
664 ;; '("Copy to..." . archive-copy))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
665 (define-key archive-mode-map [menu-bar operate expunge]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
666 '("Expunge Marked Files" . archive-expunge))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
667 ))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
668
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
669 (let* ((item1 '(archive-subfile-mode " Archive"))
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
670 (items (list item1)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
671 (or (member item1 minor-mode-alist)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
672 (setq minor-mode-alist (append items minor-mode-alist))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
673 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
674 (defun archive-find-type ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
675 (widen)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
676 (goto-char (point-min))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
677 ;; The funny [] here make it unlikely that the .elc file will be treated
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
678 ;; as an archive by other software.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
679 (let (case-fold-search)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
680 (cond ((looking-at "[P]K\003\004") 'zip)
20767
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
681 ((looking-at "..-l[hz][0-9ds]-") 'lzh)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
682 ((looking-at "....................[\334]\247\304\375") 'zoo)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
683 ((and (looking-at "\C-z") ; signature too simple, IMHO
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
684 (string-match "\\.[aA][rR][cC]$"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
685 (or buffer-file-name (buffer-name))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
686 'arc)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
687 (t (error "Buffer format not recognized.")))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
688 ;; -------------------------------------------------------------------------
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
689 (defun archive-summarize (&optional shut-up)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
690 "Parse the contents of the archive file in the current buffer.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
691 Place a dired-like listing on the front;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
692 then narrow to it, so that only that listing
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
693 is visible (and the real data of the buffer is hidden).
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
694 Optional argument SHUT-UP, if non-nil, means don't print messages
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
695 when parsing the archive."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
696 (widen)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
697 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
698 (let (buffer-read-only)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
699 (or shut-up
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
700 (message "Parsing archive file..."))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
701 (buffer-disable-undo (current-buffer))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
702 (setq archive-files (funcall (archive-name "summarize")))
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
703 (or shut-up
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
704 (message "Parsing archive file...done."))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
705 (setq archive-proper-file-start (point-marker))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
706 (narrow-to-region (point-min) (point))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
707 (set-buffer-modified-p nil)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
708 (buffer-enable-undo))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
709 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
710 (archive-next-line 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
711
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
712 (defun archive-resummarize ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
713 "Recreate the contents listing of an archive."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
714 (let ((modified (buffer-modified-p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
715 (no (archive-get-lineno))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
716 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
717 (widen)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
718 (delete-region (point-min) archive-proper-file-start)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
719 (archive-summarize t)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
720 (set-buffer-modified-p modified)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
721 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
722 (archive-next-line no)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
723
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
724 (defun archive-summarize-files (files)
16291
d62ef382bb03 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16290
diff changeset
725 "Insert a description of a list of files annotated with proper mouse face."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
726 (setq archive-file-list-start (point-marker))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
727 (setq archive-file-name-indent (if files (aref (car files) 1) 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
728 ;; We don't want to do an insert for each element since that takes too
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
729 ;; long when the archive -- which has to be moved in memory -- is large.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
730 (insert
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
731 (apply
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
732 (function concat)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
733 (mapcar
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
734 (function
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
735 (lambda (fil)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
736 ;; Using `concat' here copies the text also, so we can add
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
737 ;; properties without problems.
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
738 (let ((text (concat (aref fil 0) "\n")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
739 (if archive-lemacs
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
740 () ; out of luck
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
741 (put-text-property (aref fil 1) (aref fil 2)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
742 'mouse-face 'highlight
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
743 text))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
744 text)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
745 files)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
746 (setq archive-file-list-end (point-marker)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
747
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
748 (defun archive-alternate-display ()
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
749 "Toggle alternative display.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
750 To avoid very long lines some archive mode don't show all information.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
751 This function changes the set of information shown for each files."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
752 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
753 (setq archive-alternate-display (not archive-alternate-display))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
754 (archive-resummarize))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
755 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
756 ;; Section: Local archive copy handling
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
757
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
758 (defun archive-unique-fname (fname dir)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
759 "Make sure a file FNAME can be created uniquely in directory DIR.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
760
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
761 If FNAME can be uniquely created in DIR, it is returned unaltered.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
762 If FNAME is something our underlying filesystem can't grok, or if another
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
763 file by that name already exists in DIR, a unique new name is generated
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
764 using `make-temp-name', and the generated name is returned."
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
765 (let ((fullname (expand-file-name fname dir))
22174
18a455216af7 (archive-file-name-invalid-regexp): Remove.
Eli Zaretskii <eliz@gnu.org>
parents: 22096
diff changeset
766 (alien (string-match file-name-invalid-regexp fname)))
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
767 (if (or alien (file-exists-p fullname))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
768 (make-temp-name
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
769 (expand-file-name
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
770 (if (and (eq system-type 'ms-dos) (not (msdos-long-file-names)))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
771 "am"
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
772 "arc-mode.")
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
773 dir))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
774 fullname)))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
775
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
776 (defun archive-maybe-copy (archive)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
777 (let ((coding-system-for-write 'no-conversion))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
778 (if archive-remote
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
779 (let ((start (point-max))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
780 ;; Sometimes ARCHIVE is invalid while its actual name, as
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
781 ;; recorded in its parent archive, is not. For example, an
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
782 ;; archive bar.zip inside another archive foo.zip gets a name
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
783 ;; "foo.zip:bar.zip", which is invalid on DOS/Windows.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
784 ;; So use the actual name if available.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
785 (archive-name
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
786 (or (and archive-subfile-mode (aref archive-subfile-mode 0))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
787 archive)))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
788 (make-directory archive-tmpdir t)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
789 (setq archive-local-name
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
790 (archive-unique-fname archive-name archive-tmpdir))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
791 (save-restriction
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
792 (widen)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
793 (write-region start (point-max) archive-local-name nil 'nomessage))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
794 archive-local-name)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
795 (if (buffer-modified-p) (save-buffer))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
796 archive)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
797
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
798 (defun archive-maybe-update (unchanged)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
799 (if archive-remote
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
800 (let ((name archive-local-name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
801 (modified (buffer-modified-p))
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
802 (coding-system-for-read 'no-conversion)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
803 (lno (archive-get-lineno))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
804 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
805 (if unchanged nil
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
806 (setq archive-files nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
807 (erase-buffer)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
808 (insert-file-contents name)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
809 (archive-mode t)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
810 (goto-char archive-file-list-start)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
811 (archive-next-line lno))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
812 (archive-delete-local name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
813 (if (not unchanged)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
814 (message
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
815 "Buffer `%s' must be saved for changes to take effect"
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
816 (buffer-name (current-buffer))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
817 (set-buffer-modified-p (or modified (not unchanged))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
818
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
819 (defun archive-delete-local (name)
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
820 "Delete file NAME and its parents up to and including `archive-tmpdir'."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
821 (let ((again t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
822 (top (directory-file-name (file-name-as-directory archive-tmpdir))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
823 (condition-case nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
824 (delete-file name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
825 (error nil))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
826 (while again
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
827 (setq name (directory-file-name (file-name-directory name)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
828 (condition-case nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
829 (delete-directory name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
830 (error nil))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
831 (if (string= name top) (setq again nil)))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
832 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
833 ;; Section: Member extraction
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
834
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
835 (defun archive-file-name-handler (op &rest args)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
836 (or (eq op 'file-exists-p)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
837 (let ((file-name-handler-alist nil))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
838 (apply op args))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
839
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
840 (defun archive-set-buffer-as-visiting-file (filename)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
841 "Set the current buffer as if it were visiting FILENAME."
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
842 (save-excursion
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
843 (goto-char (point-min))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
844 (let ((coding
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
845 (or coding-system-for-read
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
846 (and set-auto-coding-function
24381
b3c0f3ad64d8 (archive-set-buffer-as-visiting-file): Save
Eli Zaretskii <eliz@gnu.org>
parents: 23481
diff changeset
847 (save-excursion
b3c0f3ad64d8 (archive-set-buffer-as-visiting-file): Save
Eli Zaretskii <eliz@gnu.org>
parents: 23481
diff changeset
848 (funcall set-auto-coding-function
b3c0f3ad64d8 (archive-set-buffer-as-visiting-file): Save
Eli Zaretskii <eliz@gnu.org>
parents: 23481
diff changeset
849 filename (- (point-max) (point-min)))))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
850 ;; dos-w32.el defines find-operation-coding-system for
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
851 ;; DOS/Windows systems which preserves the coding-system
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
852 ;; of existing files. We want it to act here as if the
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
853 ;; extracted file existed.
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
854 (let ((file-name-handler-alist
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
855 '(("" . archive-file-name-handler))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
856 (car (find-operation-coding-system 'insert-file-contents
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
857 filename t))))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
858 (if (and (not coding-system-for-read)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
859 (not enable-multibyte-characters))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
860 (setq coding
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
861 (coding-system-change-text-conversion coding 'raw-text)))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
862 (if (and coding
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
863 (not (eq coding 'no-conversion)))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
864 (decode-coding-region (point-min) (point-max) coding)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
865 (setq last-coding-system-used coding))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
866 (set-buffer-modified-p nil)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
867 (kill-local-variable 'buffer-file-coding-system)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
868 (after-insert-file-set-buffer-file-coding-system (- (point-max)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
869 (point-min))))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
870
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
871 (defun archive-mouse-extract (event)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
872 "Extract a file whose name you click on."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
873 (interactive "e")
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
874 (mouse-set-point event)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
875 (switch-to-buffer
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
876 (save-excursion
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
877 (archive-extract)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
878 (current-buffer))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
879
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
880 (defun archive-extract (&optional other-window-p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
881 "In archive mode, extract this entry of the archive into its own buffer."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
882 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
883 (let* ((view-p (eq other-window-p 'view))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
884 (descr (archive-get-descr))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
885 (ename (aref descr 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
886 (iname (aref descr 1))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
887 (archive-buffer (current-buffer))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
888 (arcdir default-directory)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
889 (archive (buffer-file-name))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
890 (arcname (file-name-nondirectory archive))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
891 (bufname (concat (file-name-nondirectory iname) " (" arcname ")"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
892 (extractor (archive-name "extract"))
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
893 ;; Members with file names which aren't valid for the
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
894 ;; underlying filesystem, are treated as read-only.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
895 (read-only-p (or archive-read-only
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
896 view-p
22174
18a455216af7 (archive-file-name-invalid-regexp): Remove.
Eli Zaretskii <eliz@gnu.org>
parents: 22096
diff changeset
897 (string-match file-name-invalid-regexp ename)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
898 (buffer (get-buffer bufname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
899 (just-created nil))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
900 (if buffer
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
901 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
902 (setq archive (archive-maybe-copy archive))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
903 (setq buffer (get-buffer-create bufname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
904 (setq just-created t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
905 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
906 (set-buffer buffer)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
907 (setq buffer-file-name
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
908 (expand-file-name (concat arcname ":" iname)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
909 (setq buffer-file-truename
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
910 (abbreviate-file-name buffer-file-name))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
911 ;; Set the default-directory to the dir of the superior buffer.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
912 (setq default-directory arcdir)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
913 (make-local-variable 'archive-superior-buffer)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
914 (setq archive-superior-buffer archive-buffer)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
915 (make-local-variable 'local-write-file-hooks)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
916 (add-hook 'local-write-file-hooks 'archive-write-file-member)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
917 (setq archive-subfile-mode descr)
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
918 (if (and
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
919 (null
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
920 (let (;; We may have to encode file name arguement for
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
921 ;; external programs.
22834
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
922 (coding-system-for-write
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
923 (and enable-multibyte-characters
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
924 file-name-coding-system))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
925 ;; We read an archive member by no-conversion at
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
926 ;; first, then decode appropriately by calling
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
927 ;; archive-set-buffer-as-visiting-file later.
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
928 (coding-system-for-read 'no-conversion))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
929 (condition-case err
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
930 (if (fboundp extractor)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
931 (funcall extractor archive ename)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
932 (archive-*-extract archive ename
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
933 (symbol-value extractor)))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
934 (error
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
935 (ding (message "%s" (error-message-string err)))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
936 nil))))
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
937 just-created)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
938 (progn
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
939 (set-buffer-modified-p nil)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
940 (kill-buffer buffer))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
941 (archive-set-buffer-as-visiting-file ename)
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
942 (goto-char (point-min))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
943 (rename-buffer bufname)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
944 (setq buffer-read-only read-only-p)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
945 (setq buffer-undo-list nil)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
946 (set-buffer-modified-p nil)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
947 (setq buffer-saved-size (buffer-size))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
948 (normal-mode)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
949 ;; Just in case an archive occurs inside another archive.
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
950 (if (eq major-mode 'archive-mode)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
951 (progn
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
952 (setq archive-remote t)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
953 (if read-only-p (setq archive-read-only t))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
954 ;; We will write out the archive ourselves if it is
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
955 ;; part of another archive.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
956 (remove-hook 'write-contents-hooks 'archive-write-file t)))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
957 (run-hooks 'archive-extract-hooks)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
958 (if archive-read-only
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
959 (message "Note: altering this archive is not implemented."))))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
960 (archive-maybe-update t))
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
961 (or (not (buffer-name buffer))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
962 (progn
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
963 (if view-p
22327
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
964 (view-buffer buffer (and just-created 'kill-buffer))
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
965 (if (eq other-window-p 'display)
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
966 (display-buffer buffer)
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
967 (if other-window-p
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
968 (switch-to-buffer-other-window buffer)
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
969 (switch-to-buffer buffer))))))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
970
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
971 (defun archive-*-extract (archive name command)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
972 (let* ((default-directory (file-name-as-directory archive-tmpdir))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
973 (tmpfile (expand-file-name (file-name-nondirectory name)
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
974 default-directory))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
975 exit-status success)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
976 (make-directory (directory-file-name default-directory) t)
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
977 (setq exit-status
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
978 (apply 'call-process
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
979 (car command)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
980 nil
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
981 nil
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
982 nil
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
983 (append (cdr command) (list archive name))))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
984 (cond ((and (numberp exit-status) (= exit-status 0))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
985 (if (not (file-exists-p tmpfile))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
986 (ding (message "`%s': no such file or directory" tmpfile))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
987 (insert-file-contents tmpfile)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
988 (setq success t)))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
989 ((numberp exit-status)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
990 (ding
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
991 (message "`%s' exited with status %d" (car command) exit-status)))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
992 ((stringp exit-status)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
993 (ding (message "`%s' aborted: %s" (car command) exit-status)))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
994 (t
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
995 (ding (message "`%s' failed" (car command)))))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
996 (archive-delete-local tmpfile)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
997 success))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
998
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
999 (defun archive-extract-by-stdout (archive name command)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1000 (apply 'call-process
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1001 (car command)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1002 nil
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1003 t
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1004 nil
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1005 (append (cdr command) (list archive name))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1006
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1007 (defun archive-extract-other-window ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1008 "In archive mode, find this member in another window."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1009 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1010 (archive-extract t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1011
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1012 (defun archive-display-other-window ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1013 "In archive mode, display this member in another window."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1014 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1015 (archive-extract 'display))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1016
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1017 (defun archive-view ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1018 "In archive mode, view the member on this line."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1019 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1020 (archive-extract 'view))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1021
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1022 (defun archive-add-new-member (arcbuf name)
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
1023 "Add current buffer to the archive in ARCBUF naming it NAME."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1024 (interactive
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1025 (list (get-buffer
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1026 (read-buffer "Buffer containing archive: "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1027 ;; Find first archive buffer and suggest that
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1028 (let ((bufs (buffer-list)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1029 (while (and bufs (not (eq (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1030 (set-buffer (car bufs))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1031 major-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1032 'archive-mode)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1033 (setq bufs (cdr bufs)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1034 (if bufs
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1035 (car bufs)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1036 (error "There are no archive buffers")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1037 t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1038 (read-string "File name in archive: "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1039 (if buffer-file-name
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1040 (file-name-nondirectory buffer-file-name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1041 ""))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1042 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1043 (set-buffer arcbuf)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1044 (or (eq major-mode 'archive-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1045 (error "Buffer is not an archive buffer"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1046 (if archive-read-only
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1047 (error "Archive is read-only")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1048 (if (eq arcbuf (current-buffer))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1049 (error "An archive buffer cannot be added to itself"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1050 (if (string= name "")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1051 (error "Archive members may not be given empty names"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1052 (let ((func (save-excursion (set-buffer arcbuf)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1053 (archive-name "add-new-member")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1054 (membuf (current-buffer)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1055 (if (fboundp func)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1056 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1057 (set-buffer arcbuf)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1058 (funcall func buffer-file-name membuf name))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1059 (error "Adding a new member is not supported for this archive type"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1060 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1061 ;; Section: IO stuff
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1062
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1063 (defun archive-write-file-member ()
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1064 (save-excursion
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1065 (save-restriction
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1066 (message "Updating archive...")
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1067 (widen)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1068 (let ((writer (save-excursion (set-buffer archive-superior-buffer)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1069 (archive-name "write-file-member")))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1070 (archive (save-excursion (set-buffer archive-superior-buffer)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1071 (archive-maybe-copy (buffer-file-name)))))
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1072 (if (fboundp writer)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1073 (funcall writer archive archive-subfile-mode)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1074 (archive-*-write-file-member archive
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1075 archive-subfile-mode
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1076 (symbol-value writer)))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1077 (set-buffer-modified-p nil)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1078 (message "Updating archive...done"))
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1079 (set-buffer archive-superior-buffer)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1080 (if (not archive-remote) (revert-buffer) (archive-maybe-update nil))))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1081 ;; Restore the value of last-coding-system-used, so that basic-save-buffer
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1082 ;; won't reset the coding-system of this archive member.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1083 (if (local-variable-p 'archive-member-coding-system)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1084 (setq last-coding-system-used archive-member-coding-system))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1085 t)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1086
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1087 (defun archive-*-write-file-member (archive descr command)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1088 (let* ((ename (aref descr 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1089 (tmpfile (expand-file-name ename archive-tmpdir))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1090 (top (directory-file-name (file-name-as-directory archive-tmpdir)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1091 (default-directory (file-name-as-directory top)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1092 (unwind-protect
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1093 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1094 (make-directory (file-name-directory tmpfile) t)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1095 ;; If the member is itself an archive, write it without
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1096 ;; the dired-like listing we created.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1097 (if (eq major-mode 'archive-mode)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1098 (archive-write-file tmpfile)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1099 (write-region (point-min) (point-max) tmpfile nil 'nomessage))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1100 ;; basic-save-buffer needs last-coding-system-used to have
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1101 ;; the value used to write the file, so save it before any
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1102 ;; further processing clobbers it (we restore it in
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1103 ;; archive-write-file-member, above).
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1104 (setq archive-member-coding-system last-coding-system-used)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1105 (if (aref descr 3)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1106 ;; Set the file modes, but make sure we can read it.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1107 (set-file-modes tmpfile (logior ?\400 (aref descr 3))))
22834
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
1108 (if enable-multibyte-characters
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
1109 (setq ename
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
1110 (encode-coding-string ename file-name-coding-system)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1111 (let ((exitcode (apply 'call-process
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1112 (car command)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1113 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1114 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1115 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1116 (append (cdr command) (list archive ename)))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1117 (if (equal exitcode 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1118 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1119 (error "Updating was unsuccessful (%S)" exitcode))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1120 (archive-delete-local tmpfile))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1121
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1122 (defun archive-write-file (&optional file)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1123 (save-excursion
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1124 (let ((coding-system-for-write 'no-conversion))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1125 (write-region archive-proper-file-start (point-max)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1126 (or file buffer-file-name) nil t)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1127 (set-buffer-modified-p nil))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1128 t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1129 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1130 ;; Section: Marking and unmarking.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1131
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1132 (defun archive-flag-deleted (p &optional type)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1133 "In archive mode, mark this member to be deleted from the archive.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1134 With a prefix argument, mark that many files."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1135 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1136 (or type (setq type ?D))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1137 (beginning-of-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1138 (let ((sign (if (>= p 0) +1 -1))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1139 (modified (buffer-modified-p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1140 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1141 (while (not (zerop p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1142 (if (archive-get-descr t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1143 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1144 (delete-char 1)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1145 (insert type)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1146 (forward-line sign)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1147 (setq p (- p sign)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1148 (set-buffer-modified-p modified))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1149 (archive-next-line 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1150
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1151 (defun archive-unflag (p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1152 "In archive mode, un-mark this member if it is marked to be deleted.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1153 With a prefix argument, un-mark that many files forward."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1154 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1155 (archive-flag-deleted p ? ))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1156
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1157 (defun archive-unflag-backwards (p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1158 "In archive mode, un-mark this member if it is marked to be deleted.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1159 With a prefix argument, un-mark that many members backward."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1160 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1161 (archive-flag-deleted (- p) ? ))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1162
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1163 (defun archive-unmark-all-files ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1164 "Remove all marks."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1165 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1166 (let ((modified (buffer-modified-p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1167 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1168 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1169 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1170 (while (< (point) archive-file-list-end)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1171 (or (= (following-char) ? )
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1172 (progn (delete-char 1) (insert ? )))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1173 (forward-line 1)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1174 (set-buffer-modified-p modified)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1175
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1176 (defun archive-mark (p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1177 "In archive mode, mark this member for group operations.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1178 With a prefix argument, mark that many members.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1179 Use \\[archive-unmark-all-files] to remove all marks."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1180 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1181 (archive-flag-deleted p ?*))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1182
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1183 (defun archive-get-marked (mark &optional default)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1184 (let (files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1185 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1186 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1187 (while (< (point) archive-file-list-end)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1188 (if (= (following-char) mark)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1189 (setq files (cons (archive-get-descr) files)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1190 (forward-line 1)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1191 (or (nreverse files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1192 (and default
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1193 (list (archive-get-descr))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1194 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1195 ;; Section: Operate
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1196
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1197 (defun archive-next-line (p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1198 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1199 (forward-line p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1200 (or (eobp)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1201 (forward-char archive-file-name-indent)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1202
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1203 (defun archive-previous-line (p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1204 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1205 (archive-next-line (- p)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1206
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1207 (defun archive-chmod-entry (new-mode)
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
1208 "Change the protection bits associated with all marked or this member.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1209 The new protection bits can either be specified as an octal number or
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1210 as a relative change like \"g+rw\" as for chmod(2)"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1211 (interactive "sNew mode (octal or relative): ")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1212 (if archive-read-only (error "Archive is read-only"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1213 (let ((func (archive-name "chmod-entry")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1214 (if (fboundp func)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1215 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1216 (funcall func new-mode (archive-get-marked ?* t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1217 (archive-resummarize))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1218 (error "Setting mode bits is not supported for this archive type"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1219
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1220 (defun archive-chown-entry (new-uid)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1221 "Change the owner of all marked or this member."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1222 (interactive "nNew uid: ")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1223 (if archive-read-only (error "Archive is read-only"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1224 (let ((func (archive-name "chown-entry")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1225 (if (fboundp func)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1226 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1227 (funcall func new-uid (archive-get-marked ?* t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1228 (archive-resummarize))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1229 (error "Setting owner is not supported for this archive type"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1230
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1231 (defun archive-chgrp-entry (new-gid)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1232 "Change the group of all marked or this member."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1233 (interactive "nNew gid: ")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1234 (if archive-read-only (error "Archive is read-only"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1235 (let ((func (archive-name "chgrp-entry")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1236 (if (fboundp func)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1237 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1238 (funcall func new-gid (archive-get-marked ?* t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1239 (archive-resummarize))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1240 (error "Setting group is not supported for this archive type"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1241
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1242 (defun archive-expunge ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1243 "Do the flagged deletions."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1244 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1245 (let (files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1246 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1247 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1248 (while (< (point) archive-file-list-end)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1249 (if (= (following-char) ?D)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1250 (setq files (cons (aref (archive-get-descr) 0) files)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1251 (forward-line 1)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1252 (setq files (nreverse files))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1253 (and files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1254 (or (not archive-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1255 (error "Archive is read-only"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1256 (or (yes-or-no-p (format "Really delete %d member%s? "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1257 (length files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1258 (if (null (cdr files)) "" "s")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1259 (error "Operation aborted"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1260 (let ((archive (archive-maybe-copy (buffer-file-name)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1261 (expunger (archive-name "expunge")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1262 (if (fboundp expunger)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1263 (funcall expunger archive files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1264 (archive-*-expunge archive files (symbol-value expunger)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1265 (archive-maybe-update nil)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1266 (if archive-remote
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1267 (archive-resummarize)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1268 (revert-buffer))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1269
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1270 (defun archive-*-expunge (archive files command)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1271 (apply 'call-process
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1272 (car command)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1273 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1274 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1275 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1276 (append (cdr command) (cons archive files))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1277
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1278 (defun archive-rename-entry (newname)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1279 "Change the name associated with this entry in the tar file."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1280 (interactive "sNew name: ")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1281 (if archive-read-only (error "Archive is read-only"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1282 (if (string= newname "")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1283 (error "Archive members may not be given empty names"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1284 (let ((func (archive-name "rename-entry"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1285 (descr (archive-get-descr)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1286 (if (fboundp func)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1287 (progn
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1288 (funcall func (buffer-file-name)
22834
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
1289 (if enable-multibyte-characters
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
1290 (encode-coding-string newname file-name-coding-system)
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
1291 newname)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1292 descr)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1293 (archive-resummarize))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1294 (error "Renaming is not supported for this archive type"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1295
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1296 ;; Revert the buffer and recompute the dired-like listing.
23383
7af3fdca3189 (archive-mode-revert): Arg no-auto-save renamed from no-autosave.
Karl Heuer <kwzh@gnu.org>
parents: 22834
diff changeset
1297 (defun archive-mode-revert (&optional no-auto-save no-confirm)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1298 (let ((no (archive-get-lineno)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1299 (setq archive-files nil)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1300 (let ((revert-buffer-function nil)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1301 (coding-system-for-read 'no-conversion))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1302 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1303 (revert-buffer t t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1304 (archive-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1305 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1306 (archive-next-line no)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1307
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1308 (defun archive-undo ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1309 "Undo in an archive buffer.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1310 This doesn't recover lost files, it just undoes changes in the buffer itself."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1311 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1312 (let (buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1313 (undo)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1314 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1315 ;; Section: Arc Archives
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1316
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1317 (defun archive-arc-summarize ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1318 (let ((p 1)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1319 (totalsize 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1320 (maxlen 8)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1321 files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1322 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1323 (while (and (< (+ p 29) (point-max))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1324 (= (char-after p) ?\C-z)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1325 (> (char-after (1+ p)) 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1326 (let* ((namefld (buffer-substring (+ p 2) (+ p 2 13)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1327 (fnlen (or (string-match "\0" namefld) 13))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1328 (efnname (substring namefld 0 fnlen))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1329 (csize (archive-l-e (+ p 15) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1330 (moddate (archive-l-e (+ p 19) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1331 (modtime (archive-l-e (+ p 21) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1332 (ucsize (archive-l-e (+ p 25) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1333 (fiddle (string= efnname (upcase efnname)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1334 (ifnname (if fiddle (downcase efnname) efnname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1335 (text (format " %8d %-11s %-8s %s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1336 ucsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1337 (archive-dosdate moddate)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1338 (archive-dostime modtime)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1339 ifnname)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1340 (setq maxlen (max maxlen fnlen)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1341 totalsize (+ totalsize ucsize)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1342 visual (cons (vector text
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1343 (- (length text) (length ifnname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1344 (length text))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1345 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1346 files (cons (vector efnname ifnname fiddle nil (1- p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1347 files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1348 p (+ p 29 csize))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1349 (goto-char (point-min))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1350 (let ((dash (concat "- -------- ----------- -------- "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1351 (make-string maxlen ?-)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1352 "\n")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1353 (insert "M Length Date Time File\n"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1354 dash)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1355 (archive-summarize-files (nreverse visual))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1356 (insert dash
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1357 (format " %8d %d file%s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1358 totalsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1359 (length files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1360 (if (= 1 (length files)) "" "s"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1361 "\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1362 (apply 'vector (nreverse files))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1363
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1364 (defun archive-arc-rename-entry (archive newname descr)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1365 (if (string-match "[:\\\\/]" newname)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1366 (error "File names in arc files may not contain a path"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1367 (if (> (length newname) 12)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1368 (error "File names in arc files are limited to 12 characters"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1369 (let ((name (concat newname (substring "\0\0\0\0\0\0\0\0\0\0\0\0\0"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1370 (length newname))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1371 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1372 (save-restriction
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1373 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1374 (widen)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1375 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1376 (goto-char (+ archive-proper-file-start (aref descr 4) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1377 (delete-char 13)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1378 (insert name)))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1379 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1380 ;; Section: Lzh Archives
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1381
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1382 (defun archive-lzh-summarize ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1383 (let ((p 1)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1384 (totalsize 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1385 (maxlen 8)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1386 files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1387 visual)
20767
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1388 (while (progn (goto-char p)
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1389 (looking-at "\\(.\\|\n\\)\\(.\\|\n\\)-l[hz][0-9ds]-"))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1390 (let* ((hsize (char-after p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1391 (csize (archive-l-e (+ p 7) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1392 (ucsize (archive-l-e (+ p 11) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1393 (modtime (archive-l-e (+ p 15) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1394 (moddate (archive-l-e (+ p 17) 2))
20767
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1395 (hdrlvl (char-after (+ p 20)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1396 (fnlen (char-after (+ p 21)))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1397 (efnname (let ((str (buffer-substring (+ p 22) (+ p 22 fnlen))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1398 (if file-name-coding-system
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1399 (decode-coding-string str file-name-coding-system)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1400 (string-as-multibyte str))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1401 (fiddle (string= efnname (upcase efnname)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1402 (ifnname (if fiddle (downcase efnname) efnname))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1403 (width (string-width ifnname))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1404 (p2 (+ p 22 fnlen))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1405 (creator (if (>= (- hsize fnlen) 24) (char-after (+ p2 2)) 0))
20767
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1406 mode modestr uid gid text path prname
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1407 )
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1408 (if (= hdrlvl 0)
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1409 (setq mode (if (= creator ?U) (archive-l-e (+ p2 8) 2) ?\666)
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1410 uid (if (= creator ?U) (archive-l-e (+ p2 10) 2))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1411 gid (if (= creator ?U) (archive-l-e (+ p2 12) 2)))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1412 (if (= creator ?U)
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1413 (let* ((p3 (+ p2 3))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1414 (hsize (archive-l-e p3 2))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1415 (etype (char-after (+ p3 2))))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1416 (while (not (= hsize 0))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1417 (cond
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1418 ((= etype 2) (let ((i (+ p3 3)))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1419 (while (< i (+ p3 hsize))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1420 (setq path (concat path
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1421 (if (= (char-after i)
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1422 255)
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1423 "/"
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1424 (char-to-string
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1425 (char-after i)))))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1426 (setq i (1+ i)))))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1427 ((= etype 80) (setq mode (archive-l-e (+ p3 3) 2)))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1428 ((= etype 81) (progn (setq uid (archive-l-e (+ p3 3) 2))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1429 (setq gid (archive-l-e (+ p3 5) 2))))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1430 )
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1431 (setq p3 (+ p3 hsize))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1432 (setq hsize (archive-l-e p3 2))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1433 (setq etype (char-after (+ p3 2)))))))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1434 (setq prname (if path (concat path ifnname) ifnname))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1435 (setq modestr (if mode (archive-int-to-mode mode) "??????????"))
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1436 (setq text (if archive-alternate-display
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1437 (format " %8d %5S %5S %s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1438 ucsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1439 (or uid "?")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1440 (or gid "?")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1441 ifnname)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1442 (format " %10s %8d %-11s %-8s %s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1443 modestr
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1444 ucsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1445 (archive-dosdate moddate)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1446 (archive-dostime modtime)
20767
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1447 ifnname)))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1448 (setq maxlen (max maxlen width)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1449 totalsize (+ totalsize ucsize)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1450 visual (cons (vector text
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1451 (- (length text) (length ifnname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1452 (length text))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1453 visual)
20767
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1454 files (cons (vector prname ifnname fiddle mode (1- p))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1455 files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1456 p (+ p hsize 2 csize))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1457 (goto-char (point-min))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1458 (set-buffer-multibyte default-enable-multibyte-characters)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1459 (let ((dash (concat (if archive-alternate-display
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1460 "- -------- ----- ----- "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1461 "- ---------- -------- ----------- -------- ")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1462 (make-string maxlen ?-)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1463 "\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1464 (header (if archive-alternate-display
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1465 "M Length Uid Gid File\n"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1466 "M Filemode Length Date Time File\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1467 (sumline (if archive-alternate-display
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1468 " %8d %d file%s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1469 " %8d %d file%s")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1470 (insert header dash)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1471 (archive-summarize-files (nreverse visual))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1472 (insert dash
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1473 (format sumline
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1474 totalsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1475 (length files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1476 (if (= 1 (length files)) "" "s"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1477 "\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1478 (apply 'vector (nreverse files))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1479
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1480 (defconst archive-lzh-alternate-display t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1481
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1482 (defun archive-lzh-extract (archive name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1483 (archive-extract-by-stdout archive name archive-lzh-extract))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1484
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1485 (defun archive-lzh-resum (p count)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1486 (let ((sum 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1487 (while (> count 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1488 (setq count (1- count)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1489 sum (+ sum (char-after p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1490 p (1+ p)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1491 (logand sum 255)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1492
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1493 (defun archive-lzh-rename-entry (archive newname descr)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1494 (save-restriction
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1495 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1496 (widen)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1497 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1498 (let* ((p (+ archive-proper-file-start (aref descr 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1499 (oldhsize (char-after p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1500 (oldfnlen (char-after (+ p 21)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1501 (newfnlen (length newname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1502 (newhsize (+ oldhsize newfnlen (- oldfnlen)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1503 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1504 (if (> newhsize 255)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1505 (error "The file name is too long"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1506 (goto-char (+ p 21))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1507 (delete-char (1+ oldfnlen))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1508 (insert newfnlen newname)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1509 (goto-char p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1510 (delete-char 2)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1511 (insert newhsize (archive-lzh-resum p newhsize))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1512
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1513 (defun archive-lzh-ogm (newval files errtxt ofs)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1514 (save-restriction
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1515 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1516 (widen)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1517 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1518 (while files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1519 (let* ((fil (car files))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1520 (p (+ archive-proper-file-start (aref fil 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1521 (hsize (char-after p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1522 (fnlen (char-after (+ p 21)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1523 (p2 (+ p 22 fnlen))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1524 (creator (if (>= (- hsize fnlen) 24) (char-after (+ p2 2)) 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1525 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1526 (if (= creator ?U)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1527 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1528 (or (numberp newval)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1529 (setq newval (funcall newval (archive-l-e (+ p2 ofs) 2))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1530 (goto-char (+ p2 ofs))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1531 (delete-char 2)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1532 (insert (logand newval 255) (lsh newval -8))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1533 (goto-char (1+ p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1534 (delete-char 1)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1535 (insert (archive-lzh-resum (1+ p) hsize)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1536 (message "Member %s does not have %s field"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1537 (aref fil 1) errtxt)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1538 (setq files (cdr files))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1539
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1540 (defun archive-lzh-chown-entry (newuid files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1541 (archive-lzh-ogm newuid files "an uid" 10))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1542
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1543 (defun archive-lzh-chgrp-entry (newgid files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1544 (archive-lzh-ogm newgid files "a gid" 12))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1545
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1546 (defun archive-lzh-chmod-entry (newmode files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1547 (archive-lzh-ogm
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1548 ;; This should work even though newmode will be dynamically accessed.
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
1549 (function (lambda (old) (archive-calc-mode old newmode t)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1550 files "a unix-style mode" 8))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1551 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1552 ;; Section: Zip Archives
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1553
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1554 (defun archive-zip-summarize ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1555 (goto-char (- (point-max) (- 22 18)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1556 (search-backward-regexp "[P]K\005\006")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1557 (let ((p (1+ (archive-l-e (+ (point) 16) 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1558 (maxlen 8)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1559 (totalsize 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1560 files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1561 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1562 (while (string= "PK\001\002" (buffer-substring p (+ p 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1563 (let* ((creator (char-after (+ p 5)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1564 (method (archive-l-e (+ p 10) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1565 (modtime (archive-l-e (+ p 12) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1566 (moddate (archive-l-e (+ p 14) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1567 (ucsize (archive-l-e (+ p 24) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1568 (fnlen (archive-l-e (+ p 28) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1569 (exlen (archive-l-e (+ p 30) 2))
12304
3cf4df625c3b (archive-zip-summarize): Handle per-file comments in central directory.
Richard M. Stallman <rms@gnu.org>
parents: 12024
diff changeset
1570 (fclen (archive-l-e (+ p 32) 2))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1571 (lheader (archive-l-e (+ p 42) 4))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1572 (efnname (let ((str (buffer-substring (+ p 46) (+ p 46 fnlen))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1573 (if file-name-coding-system
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1574 (decode-coding-string str file-name-coding-system)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1575 (string-as-multibyte str))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1576 (isdir (and (= ucsize 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1577 (string= (file-name-nondirectory efnname) "")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1578 (mode (cond ((memq creator '(2 3)) ; Unix + VMS
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1579 (archive-l-e (+ p 40) 2))
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1580 ((memq creator '(0 5 6 7 10 11 15)) ; Dos etc.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1581 (logior ?\444
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1582 (if isdir (logior 16384 ?\111) 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1583 (if (zerop
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1584 (logand 1 (char-after (+ p 38))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1585 ?\222 0)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1586 (t nil)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1587 (modestr (if mode (archive-int-to-mode mode) "??????????"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1588 (fiddle (and archive-zip-case-fiddle
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1589 (not (not (memq creator '(0 2 4 5 9))))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1590 (string= (upcase efnname) efnname)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1591 (ifnname (if fiddle (downcase efnname) efnname))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1592 (width (string-width ifnname))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1593 (text (format " %10s %8d %-11s %-8s %s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1594 modestr
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1595 ucsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1596 (archive-dosdate moddate)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1597 (archive-dostime modtime)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1598 ifnname)))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1599 (setq maxlen (max maxlen width)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1600 totalsize (+ totalsize ucsize)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1601 visual (cons (vector text
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1602 (- (length text) (length ifnname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1603 (length text))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1604 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1605 files (cons (if isdir
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1606 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1607 (vector efnname ifnname fiddle mode
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1608 (list (1- p) lheader)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1609 files)
12304
3cf4df625c3b (archive-zip-summarize): Handle per-file comments in central directory.
Richard M. Stallman <rms@gnu.org>
parents: 12024
diff changeset
1610 p (+ p 46 fnlen exlen fclen))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1611 (goto-char (point-min))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1612 (let ((dash (concat "- ---------- -------- ----------- -------- "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1613 (make-string maxlen ?-)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1614 "\n")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1615 (insert "M Filemode Length Date Time File\n"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1616 dash)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1617 (archive-summarize-files (nreverse visual))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1618 (insert dash
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1619 (format " %8d %d file%s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1620 totalsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1621 (length files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1622 (if (= 1 (length files)) "" "s"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1623 "\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1624 (apply 'vector (nreverse files))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1625
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1626 (defun archive-zip-extract (archive name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1627 (if archive-zip-use-pkzip
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1628 (archive-*-extract archive name archive-zip-extract)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1629 (archive-extract-by-stdout archive name archive-zip-extract)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1630
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1631 (defun archive-zip-write-file-member (archive descr)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1632 (archive-*-write-file-member
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1633 archive
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1634 descr
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1635 (if (aref descr 2) archive-zip-update-case archive-zip-update)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1636
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1637 (defun archive-zip-chmod-entry (newmode files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1638 (save-restriction
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1639 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1640 (widen)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1641 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1642 (while files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1643 (let* ((fil (car files))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1644 (p (+ archive-proper-file-start (car (aref fil 4))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1645 (creator (char-after (+ p 5)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1646 (oldmode (aref fil 3))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1647 (newval (archive-calc-mode oldmode newmode t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1648 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1649 (cond ((memq creator '(2 3)) ; Unix + VMS
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1650 (goto-char (+ p 40))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1651 (delete-char 2)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1652 (insert (logand newval 255) (lsh newval -8)))
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1653 ((memq creator '(0 5 6 7 10 11 15)) ; Dos etc.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1654 (goto-char (+ p 38))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1655 (insert (logior (logand (char-after (point)) 254)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1656 (logand (logxor 1 (lsh newval -7)) 1)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1657 (delete-char 1))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1658 (t (message "Don't know how to change mode for this member"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1659 (setq files (cdr files))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1660 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1661 ;; Section: Zoo Archives
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1662
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1663 (defun archive-zoo-summarize ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1664 (let ((p (1+ (archive-l-e 25 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1665 (maxlen 8)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1666 (totalsize 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1667 files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1668 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1669 (while (and (string= "\334\247\304\375" (buffer-substring p (+ p 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1670 (> (archive-l-e (+ p 6) 4) 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1671 (let* ((next (1+ (archive-l-e (+ p 6) 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1672 (moddate (archive-l-e (+ p 14) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1673 (modtime (archive-l-e (+ p 16) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1674 (ucsize (archive-l-e (+ p 20) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1675 (namefld (buffer-substring (+ p 38) (+ p 38 13)))
13339
13b7b667b18f (archive-zoo-summarize): Handle archives with long file names.
Richard M. Stallman <rms@gnu.org>
parents: 12791
diff changeset
1676 (dirtype (char-after (+ p 4)))
13b7b667b18f (archive-zoo-summarize): Handle archives with long file names.
Richard M. Stallman <rms@gnu.org>
parents: 12791
diff changeset
1677 (lfnlen (if (= dirtype 2) (char-after (+ p 56)) 0))
13b7b667b18f (archive-zoo-summarize): Handle archives with long file names.
Richard M. Stallman <rms@gnu.org>
parents: 12791
diff changeset
1678 (ldirlen (if (= dirtype 2) (char-after (+ p 57)) 0))
20239
5bf13ca1dbac (archive-zoo-summarize): Properly handle the case of
Andreas Schwab <schwab@suse.de>
parents: 19998
diff changeset
1679 (fnlen (or (string-match "\0" namefld) 13))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1680 (efnname (let ((str
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1681 (concat
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1682 (if (> ldirlen 0)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1683 (concat (buffer-substring
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1684 (+ p 58 lfnlen)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1685 (+ p 58 lfnlen ldirlen -1))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1686 "/")
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1687 "")
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1688 (if (> lfnlen 0)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1689 (buffer-substring (+ p 58)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1690 (+ p 58 lfnlen -1))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1691 (substring namefld 0 fnlen)))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1692 (if file-name-coding-system
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1693 (decode-coding-string str file-name-coding-system)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1694 (string-as-multibyte str))))
13339
13b7b667b18f (archive-zoo-summarize): Handle archives with long file names.
Richard M. Stallman <rms@gnu.org>
parents: 12791
diff changeset
1695 (fiddle (and (= lfnlen 0) (string= efnname (upcase efnname))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1696 (ifnname (if fiddle (downcase efnname) efnname))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1697 (width (string-width ifnname))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1698 (text (format " %8d %-11s %-8s %s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1699 ucsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1700 (archive-dosdate moddate)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1701 (archive-dostime modtime)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1702 ifnname)))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1703 (setq maxlen (max maxlen (length width))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1704 totalsize (+ totalsize ucsize)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1705 visual (cons (vector text
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1706 (- (length text) (length ifnname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1707 (length text))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1708 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1709 files (cons (vector efnname ifnname fiddle nil (1- p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1710 files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1711 p next)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1712 (goto-char (point-min))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1713 (let ((dash (concat "- -------- ----------- -------- "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1714 (make-string maxlen ?-)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1715 "\n")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1716 (insert "M Length Date Time File\n"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1717 dash)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1718 (archive-summarize-files (nreverse visual))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1719 (insert dash
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1720 (format " %8d %d file%s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1721 totalsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1722 (length files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1723 (if (= 1 (length files)) "" "s"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1724 "\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1725 (apply 'vector (nreverse files))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1726
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1727 (defun archive-zoo-extract (archive name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1728 (archive-extract-by-stdout archive name archive-zoo-extract))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1729 ;; -------------------------------------------------------------------------
23467
dd5bbd8db2f5 (arc-mode): Provide arc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 23383
diff changeset
1730 ;; This line was a mistake; it is kept now for compatibility.
dd5bbd8db2f5 (arc-mode): Provide arc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 23383
diff changeset
1731 ;; rms 15 Oct 98
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1732 (provide 'archive-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1733
23467
dd5bbd8db2f5 (arc-mode): Provide arc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 23383
diff changeset
1734 (provide 'arc-mode)
dd5bbd8db2f5 (arc-mode): Provide arc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 23383
diff changeset
1735
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1736 ;; arc-mode.el ends here.