annotate lisp/arc-mode.el @ 31384:f6cb7dfe5e7c

(vc-cvs-show-log-entry): New function. (vc-cvs-stay-local): Allow it to be a hostname regexp as well. (vc-cvs-remote-p): Renamed to vc-cvs-stay-local-p. Handle hostname regexps. Updated all callers. (vc-cvs-responsible-p): Handle directories as well. (vc-cvs-could-register): New function. (vc-cvs-retrieve-snapshot): Parse "cvs update" output, keep file properties up-to-date. (vc-cvs-checkout): Do the right thing when the workfile does not exist. (vc-cvs-registered): Use new function vc-cvs-parse-entry to do the actual work. (vc-cvs-remote-p): Allow FILE to be a directory, too. (vc-cvs-dir-state): New function. (vc-cvs-dir-state-heuristic): New function, subroutine of the above. (vc-cvs-parse-entry): New function, also to be used in vc-cvs-registered. (vc-cvs-checkout): Slight restructuring to make the control-flow more clear and to avoid running `cvs' twice. (vc-cvs-workfile-version): Removed comment that this is not reached. It is. (vc-cvs-merge): Set state to 'edited after merge. (vc-cvs-merge-news): Set workfile version to nil if not known. (vc-cvs-latest-on-branch-p): Recommented. Candidate for removal. (vc-cvs-checkin): Raise the max-correct status from 0 to 1. Make sure to switch to *vc* before looking for an error message. Use vc-parse-buffer. (vc-cvs-create-snapshot): Swap DIR and NAME. (vc-cvs-retrieve-snapshot): New function (untested). (vc-cvs-stay-local): Default to t. (vc-cvs-remote-p): New function and property. (vc-cvs-state): Stay local only if the above is t. (vc-handle-cvs): Removed. (vc-cvs-registered): Don't check vc-handle-cvs -- it should all be done via vc-handled-backends now. (vc-cvs-header): Escape Id. (vc-cvs-state, vc-cvs-fetch-status): Use with-temp-file. Use the new BUFFER=t argument to vc-do-command. (vc-cvs-print-log, vc-cvs-diff): Insert in the current buffer. (vc-cvs-state): Use vc-do-command instead of vc-simple-command. (vc-cvs-diff): Remove unused and unsupported argument CMP. (vc-cvs-registered): Obey vc-handle-cvs. (vc-cvs-registered): Use with-temp-buffer. Reorder extraction of fields and call to file-attributes because of a temporary bug in rcp.el. (vc-cvs-fetch-status): Use with-current-buffer. Merge in code from vc-cvs-hooks.el. (proto vc-cvs-registered): Require 'vc-cvs instead of 'vc-cvs-hooks. Don't require 'vc anymore. (vc-cvs-responsible-p): Use expand-file-name instead of concat and file-directory-p instead of file-exists-p. (vc-cvs-create-snapshot): New function, replacing vc-cvs-assign-name. (vc-cvs-assign-name): Remove. (vc-cvs-header): New var. Update Copyright. (vc-cvs-diff): Remove unused `backend' variable. (vc-cvs-checkout): Only toggle read-only if the buffer is setup right. (tail): Provide vc-cvs. (vc-cvs-merge-news, vc-cvs-checkout): Removed call to vc-file-clear-masterprops. (vc-cvs-state): Typo. (vc-cvs-merge-news): Return the status code rather than the error msg. (vc-cvs-state): Don't overwrite a non-heuristic state with a heuristic one. (vc-cvs-merge-news): Just use 'edited for the case with conflicts. (vc-cvs-checkin): Do a trivial parse to set the state in case of error. That allows us to get to 'needs-merge even in the stay-local case. There's still no way to detect 'needs-patch in such a setup (or to force an update for that matter). (vc-cvs-logentry-check): Remove, the default works as well. (vc-cvs-print-log, vc-cvs-diff): Run cvs asynchronously. (vc-cvs-stay-local): Renamed from vc-cvs-simple-toggle. Redocumented. (vc-cvs-state): If locality is wanted, use vc-cvs-state-heuristic. (vc-cvs-toggle-read-only): Removed. (for compiler warnings). (vc-cvs-release, vc-cvs-system-release): Remove. (vc-cvs-use-edit, vc-cvs-simple-toggle): New config variables. (vc-cvs-dired-state-info): Use `cvs-state' and slightly different status symbols. (vc-cvs-parse-status, vc-cvs-state): Move from vc-cvs-hooks.el. (vc-cvs-toggle-read-only): First cut at a function to allow a cvs-status-free vc-toggle-read-only. (vc-cvs-merge-news): Move from cvs-merge-news in vc.el. (vc-cvs-checkin): Use vc-recompute-state+vc-state instead of vc-cvs-status. Also set vc-state rather than vc-locking-user. (vc-cvs-checkout): Modify access rights directly if the user requested not to use `cvs edit'. And refresh the mode line. (if workfile' that got lost when the code was extracted from vc.el. And merged the tail with the rest of the code (not possible in the old vc.el where the tail was shared among all backends). And explicitly set the state to 'edited if `writable' is set. (vc-cvs-revert,vc-cvs-checkout): References to `vc-checkout-model' updated to `vc-cvs-update-model'. (vc-cvs-logentry-check): Function added. (vc-cvs-revert,vc-cvs-checkout): Function calls to `vc-checkout-required' updated to `vc-cvs-uses-locking'. (vc-cvs-admin): Added the query-only option as required by the vc.el file. (vc-cvs-annotate-difference): Updated to handle beginning of annotate buffers correctly. Rename `vc-uses-locking' to `vc-checkout-required'. Rename the `locked' state to `reserved'. (vc-cvs-annotate-difference): Handle possible millenium problem (merged from mainline). Split the annotate feature into a BACKEND-specific part and moved the non-BACKEND stuff to vc.el. (vc-cvs-latest-on-branch-p): Function added. (vc-cvs-revert): Merged and adapted "unedit" patch from main line. (vc-cvs-diff): Function added. (vc-cvs-checkout): Function `vc-cvs-checkout' added. Require vc when compiling. (vc-cvs-register-switches): Doc fix. (vc-annotate-color-map, vc-annotate-menu-elements): Fix custom type. (vc-cvs-print-log, vc-cvs-assign-name, vc-cvs-merge) (vc-cvs-check-headers, vc-cvs-steal, vc-cvs-revert, vc-cvs-checkin): New functions (code from vc.el). (vc-annotate-display-default): Fix interactive spec. (vc-annotate-time-span): Doc fix. Moved the annotate functionality from vc.el. (vc-cvs-admin, vc-cvs-fetch-status): Added from vc.el. (vc-cvs-system-release): Renamed from vc-cvs-backend-release. (vc-cvs-release): Moved from vc.el. (vc-cvs-backend-release): New function. (vc-cvs-dired-state-info, vc-cvs-fetch-status): Moved from vc.el and renamed.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 04 Sep 2000 19:48:04 +0000
parents c3fb8a9a8aba
children bb1bfa010bf3
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
28106
c690edebf377 (archive-zip-update): Add `-P' for pkzip.
Gerd Moellmann <gerd@gnu.org>
parents: 27062
diff changeset
246 (if archive-zip-use-pkzip '("pkzip" "-u" "-P") '("zip" "-q"))
11880
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)
27062
0a8d7e789bca (archive-mode-map): Bind q to quit-window.
Richard M. Stallman <rms@gnu.org>
parents: 24381
diff changeset
590 (define-key archive-mode-map "q" 'quit-window)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
591 (define-key archive-mode-map "\C-p" 'archive-previous-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
592 (define-key archive-mode-map [up] 'archive-previous-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
593 (define-key archive-mode-map "r" 'archive-rename-entry)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
594 (define-key archive-mode-map "u" 'archive-unflag)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
595 (define-key archive-mode-map "\M-\C-?" 'archive-unmark-all-files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
596 (define-key archive-mode-map "v" 'archive-view)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
597 (define-key archive-mode-map "x" 'archive-expunge)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
598 (define-key archive-mode-map "\177" 'archive-unflag-backwards)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
599 (define-key archive-mode-map "E" 'archive-extract-other-window)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
600 (define-key archive-mode-map "M" 'archive-chmod-entry)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
601 (define-key archive-mode-map "G" 'archive-chgrp-entry)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
602 (define-key archive-mode-map "O" 'archive-chown-entry)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
603
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
604 (if archive-lemacs
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
605 (progn
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
606 ;; Not a nice "solution" but it'll have to do
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
607 (define-key archive-mode-map "\C-xu" 'archive-undo)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
608 (define-key archive-mode-map "\C-_" 'archive-undo))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
609 (substitute-key-definition 'undo 'archive-undo
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
610 archive-mode-map global-map))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
611
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
612 (define-key archive-mode-map
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
613 (if archive-lemacs 'button2 [mouse-2]) 'archive-mouse-extract)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
614
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
615 (if archive-lemacs
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
616 () ; out of luck
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
617
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
618 (define-key archive-mode-map [menu-bar immediate]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
619 (cons "Immediate" (make-sparse-keymap "Immediate")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
620 (define-key archive-mode-map [menu-bar immediate alternate]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
621 '(menu-item "Alternate Display" archive-alternate-display
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
622 :enable (boundp (archive-name "alternate-display"))
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
623 :help "Toggle alternate file info display"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
624 (define-key archive-mode-map [menu-bar immediate view]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
625 '(menu-item "View This File" archive-view
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
626 :help "Display file at cursor in View Mode"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
627 (define-key archive-mode-map [menu-bar immediate display]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
628 '(menu-item "Display in Other Window" archive-display-other-window
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
629 :help "Display file at cursor in another window"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
630 (define-key archive-mode-map [menu-bar immediate find-file-other-window]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
631 '(menu-item "Find in Other Window" archive-extract-other-window
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
632 :help "Edit file at cursor in another window"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
633 (define-key archive-mode-map [menu-bar immediate find-file]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
634 '(menu-item "Find This File" archive-extract
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
635 :help "Extract file at cursor and edit it"))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
636
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
637 (define-key archive-mode-map [menu-bar mark]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
638 (cons "Mark" (make-sparse-keymap "Mark")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
639 (define-key archive-mode-map [menu-bar mark unmark-all]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
640 '(menu-item "Unmark All" archive-unmark-all-files
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
641 :help "Unmark all marked files"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
642 (define-key archive-mode-map [menu-bar mark deletion]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
643 '(menu-item "Flag" archive-flag-deleted
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
644 :help "Flag file at cursor for deletion"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
645 (define-key archive-mode-map [menu-bar mark unmark]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
646 '(menu-item "Unflag" archive-unflag
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
647 :help "Unmark file at cursor"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
648 (define-key archive-mode-map [menu-bar mark mark]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
649 '(menu-item "Mark" archive-mark
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
650 :help "Mark file at cursor"))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
651
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
652 (define-key archive-mode-map [menu-bar operate]
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
653 (cons "Operate" (make-sparse-keymap "Operate")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
654 (define-key archive-mode-map [menu-bar operate chown]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
655 '(menu-item "Change Owner..." archive-chown-entry
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
656 :enable (fboundp (archive-name "chown-entry"))
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
657 :help "Change owner of marked files"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
658 (define-key archive-mode-map [menu-bar operate chgrp]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
659 '(menu-item "Change Group..." archive-chgrp-entry
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
660 :enable (fboundp (archive-name "chgrp-entry"))
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
661 :help "Change group ownership of marked files"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
662 (define-key archive-mode-map [menu-bar operate chmod]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
663 '(menu-item "Change Mode..." archive-chmod-entry
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
664 :enable (fboundp (archive-name "chmod-entry"))
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
665 :help "Change mode (permissions) of marked files"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
666 (define-key archive-mode-map [menu-bar operate rename]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
667 '(menu-item "Rename to..." archive-rename-entry
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
668 :enable (fboundp (archive-name "rename-entry"))
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
669 :help "Rename marked files"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
670 ;;(define-key archive-mode-map [menu-bar operate copy]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
671 ;; '(menu-item "Copy to..." archive-copy))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
672 (define-key archive-mode-map [menu-bar operate expunge]
29681
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
673 '(menu-item "Expunge Marked Files" archive-expunge
c3fb8a9a8aba (archive-mode-map): Use the new menu-item format for
Eli Zaretskii <eliz@gnu.org>
parents: 28106
diff changeset
674 :help "Delete all flagged files from archive"))
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
675 ))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
676
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
677 (let* ((item1 '(archive-subfile-mode " Archive"))
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
678 (items (list item1)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
679 (or (member item1 minor-mode-alist)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
680 (setq minor-mode-alist (append items minor-mode-alist))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
681 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
682 (defun archive-find-type ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
683 (widen)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
684 (goto-char (point-min))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
685 ;; The funny [] here make it unlikely that the .elc file will be treated
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
686 ;; as an archive by other software.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
687 (let (case-fold-search)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
688 (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
689 ((looking-at "..-l[hz][0-9ds]-") 'lzh)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
690 ((looking-at "....................[\334]\247\304\375") 'zoo)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
691 ((and (looking-at "\C-z") ; signature too simple, IMHO
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
692 (string-match "\\.[aA][rR][cC]$"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
693 (or buffer-file-name (buffer-name))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
694 'arc)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
695 (t (error "Buffer format not recognized.")))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
696 ;; -------------------------------------------------------------------------
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
697 (defun archive-summarize (&optional shut-up)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
698 "Parse the contents of the archive file in the current buffer.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
699 Place a dired-like listing on the front;
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
700 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
701 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
702 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
703 when parsing the archive."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
704 (widen)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
705 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
706 (let (buffer-read-only)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
707 (or shut-up
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
708 (message "Parsing archive file..."))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
709 (buffer-disable-undo (current-buffer))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
710 (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
711 (or shut-up
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
712 (message "Parsing archive file...done."))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
713 (setq archive-proper-file-start (point-marker))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
714 (narrow-to-region (point-min) (point))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
715 (set-buffer-modified-p nil)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
716 (buffer-enable-undo))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
717 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
718 (archive-next-line 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
719
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
720 (defun archive-resummarize ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
721 "Recreate the contents listing of an archive."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
722 (let ((modified (buffer-modified-p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
723 (no (archive-get-lineno))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
724 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
725 (widen)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
726 (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
727 (archive-summarize t)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
728 (set-buffer-modified-p modified)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
729 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
730 (archive-next-line no)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
731
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
732 (defun archive-summarize-files (files)
16291
d62ef382bb03 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 16290
diff changeset
733 "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
734 (setq archive-file-list-start (point-marker))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
735 (setq archive-file-name-indent (if files (aref (car files) 1) 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
736 ;; 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
737 ;; long when the archive -- which has to be moved in memory -- is large.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
738 (insert
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
739 (apply
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
740 (function concat)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
741 (mapcar
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
742 (function
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
743 (lambda (fil)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
744 ;; 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
745 ;; properties without problems.
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
746 (let ((text (concat (aref fil 0) "\n")))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
747 (if archive-lemacs
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
748 () ; out of luck
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
749 (put-text-property (aref fil 1) (aref fil 2)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
750 'mouse-face 'highlight
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
751 text))
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
752 text)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
753 files)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
754 (setq archive-file-list-end (point-marker)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
755
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
756 (defun archive-alternate-display ()
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
757 "Toggle alternative display.
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
758 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
759 This function changes the set of information shown for each files."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
760 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
761 (setq archive-alternate-display (not archive-alternate-display))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
762 (archive-resummarize))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
763 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
764 ;; Section: Local archive copy handling
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
765
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
766 (defun archive-unique-fname (fname dir)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
767 "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
768
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
769 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
770 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
771 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
772 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
773 (let ((fullname (expand-file-name fname dir))
22174
18a455216af7 (archive-file-name-invalid-regexp): Remove.
Eli Zaretskii <eliz@gnu.org>
parents: 22096
diff changeset
774 (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
775 (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
776 (make-temp-name
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
777 (expand-file-name
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
778 (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
779 "am"
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
780 "arc-mode.")
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
781 dir))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
782 fullname)))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
783
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
784 (defun archive-maybe-copy (archive)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
785 (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
786 (if archive-remote
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
787 (let ((start (point-max))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
788 ;; 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
789 ;; 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
790 ;; 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
791 ;; "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
792 ;; 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
793 (archive-name
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
794 (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
795 archive)))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
796 (make-directory archive-tmpdir t)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
797 (setq archive-local-name
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
798 (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
799 (save-restriction
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
800 (widen)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
801 (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
802 archive-local-name)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
803 (if (buffer-modified-p) (save-buffer))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
804 archive)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
805
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
806 (defun archive-maybe-update (unchanged)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
807 (if archive-remote
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
808 (let ((name archive-local-name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
809 (modified (buffer-modified-p))
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
810 (coding-system-for-read 'no-conversion)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
811 (lno (archive-get-lineno))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
812 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
813 (if unchanged nil
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
814 (setq archive-files nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
815 (erase-buffer)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
816 (insert-file-contents name)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
817 (archive-mode t)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
818 (goto-char archive-file-list-start)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
819 (archive-next-line lno))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
820 (archive-delete-local name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
821 (if (not unchanged)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
822 (message
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
823 "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
824 (buffer-name (current-buffer))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
825 (set-buffer-modified-p (or modified (not unchanged))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
826
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
827 (defun archive-delete-local (name)
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
828 "Delete file NAME and its parents up to and including `archive-tmpdir'."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
829 (let ((again t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
830 (top (directory-file-name (file-name-as-directory archive-tmpdir))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
831 (condition-case nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
832 (delete-file name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
833 (error nil))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
834 (while again
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
835 (setq name (directory-file-name (file-name-directory name)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
836 (condition-case nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
837 (delete-directory name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
838 (error nil))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
839 (if (string= name top) (setq again nil)))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
840 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
841 ;; Section: Member extraction
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
842
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
843 (defun archive-file-name-handler (op &rest args)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
844 (or (eq op 'file-exists-p)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
845 (let ((file-name-handler-alist nil))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
846 (apply op args))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
847
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
848 (defun archive-set-buffer-as-visiting-file (filename)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
849 "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
850 (save-excursion
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
851 (goto-char (point-min))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
852 (let ((coding
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
853 (or coding-system-for-read
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
854 (and set-auto-coding-function
24381
b3c0f3ad64d8 (archive-set-buffer-as-visiting-file): Save
Eli Zaretskii <eliz@gnu.org>
parents: 23481
diff changeset
855 (save-excursion
b3c0f3ad64d8 (archive-set-buffer-as-visiting-file): Save
Eli Zaretskii <eliz@gnu.org>
parents: 23481
diff changeset
856 (funcall set-auto-coding-function
b3c0f3ad64d8 (archive-set-buffer-as-visiting-file): Save
Eli Zaretskii <eliz@gnu.org>
parents: 23481
diff changeset
857 filename (- (point-max) (point-min)))))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
858 ;; 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
859 ;; DOS/Windows systems which preserves the coding-system
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
860 ;; 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
861 ;; extracted file existed.
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
862 (let ((file-name-handler-alist
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
863 '(("" . archive-file-name-handler))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
864 (car (find-operation-coding-system 'insert-file-contents
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
865 filename t))))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
866 (if (and (not coding-system-for-read)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
867 (not enable-multibyte-characters))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
868 (setq coding
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
869 (coding-system-change-text-conversion coding 'raw-text)))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
870 (if (and coding
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
871 (not (eq coding 'no-conversion)))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
872 (decode-coding-region (point-min) (point-max) coding)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
873 (setq last-coding-system-used coding))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
874 (set-buffer-modified-p nil)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
875 (kill-local-variable 'buffer-file-coding-system)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
876 (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
877 (point-min))))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
878
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
879 (defun archive-mouse-extract (event)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
880 "Extract a file whose name you click on."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
881 (interactive "e")
12024
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
882 (mouse-set-point event)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
883 (switch-to-buffer
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
884 (save-excursion
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
885 (archive-extract)
8e31a35ac027 (archive-lemacs): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 11887
diff changeset
886 (current-buffer))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
887
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
888 (defun archive-extract (&optional other-window-p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
889 "In archive mode, extract this entry of the archive into its own buffer."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
890 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
891 (let* ((view-p (eq other-window-p 'view))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
892 (descr (archive-get-descr))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
893 (ename (aref descr 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
894 (iname (aref descr 1))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
895 (archive-buffer (current-buffer))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
896 (arcdir default-directory)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
897 (archive (buffer-file-name))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
898 (arcname (file-name-nondirectory archive))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
899 (bufname (concat (file-name-nondirectory iname) " (" arcname ")"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
900 (extractor (archive-name "extract"))
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
901 ;; 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
902 ;; 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
903 (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
904 view-p
22174
18a455216af7 (archive-file-name-invalid-regexp): Remove.
Eli Zaretskii <eliz@gnu.org>
parents: 22096
diff changeset
905 (string-match file-name-invalid-regexp ename)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
906 (buffer (get-buffer bufname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
907 (just-created nil))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
908 (if buffer
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
909 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
910 (setq archive (archive-maybe-copy archive))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
911 (setq buffer (get-buffer-create bufname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
912 (setq just-created t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
913 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
914 (set-buffer buffer)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
915 (setq buffer-file-name
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
916 (expand-file-name (concat arcname ":" iname)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
917 (setq buffer-file-truename
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
918 (abbreviate-file-name buffer-file-name))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
919 ;; Set the default-directory to the dir of the superior buffer.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
920 (setq default-directory arcdir)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
921 (make-local-variable 'archive-superior-buffer)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
922 (setq archive-superior-buffer archive-buffer)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
923 (make-local-variable 'local-write-file-hooks)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
924 (add-hook 'local-write-file-hooks 'archive-write-file-member)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
925 (setq archive-subfile-mode descr)
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
926 (if (and
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
927 (null
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
928 (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
929 ;; external programs.
22834
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
930 (coding-system-for-write
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
931 (and enable-multibyte-characters
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
932 file-name-coding-system))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
933 ;; 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
934 ;; first, then decode appropriately by calling
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
935 ;; archive-set-buffer-as-visiting-file later.
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
936 (coding-system-for-read 'no-conversion))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
937 (condition-case err
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
938 (if (fboundp extractor)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
939 (funcall extractor archive ename)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
940 (archive-*-extract archive ename
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
941 (symbol-value extractor)))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
942 (error
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
943 (ding (message "%s" (error-message-string err)))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
944 nil))))
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
945 just-created)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
946 (progn
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
947 (set-buffer-modified-p nil)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
948 (kill-buffer buffer))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
949 (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
950 (goto-char (point-min))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
951 (rename-buffer bufname)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
952 (setq buffer-read-only read-only-p)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
953 (setq buffer-undo-list nil)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
954 (set-buffer-modified-p nil)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
955 (setq buffer-saved-size (buffer-size))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
956 (normal-mode)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
957 ;; 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
958 (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
959 (progn
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
960 (setq archive-remote t)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
961 (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
962 ;; 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
963 ;; part of another archive.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
964 (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
965 (run-hooks 'archive-extract-hooks)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
966 (if archive-read-only
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
967 (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
968 (archive-maybe-update t))
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
969 (or (not (buffer-name buffer))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
970 (progn
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
971 (if view-p
22327
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
972 (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
973 (if (eq other-window-p 'display)
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
974 (display-buffer buffer)
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
975 (if other-window-p
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
976 (switch-to-buffer-other-window buffer)
c119045b2019 (archive-extract): Fix handling of 'view option.
Karl Heuer <kwzh@gnu.org>
parents: 22174
diff changeset
977 (switch-to-buffer buffer))))))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
978
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
979 (defun archive-*-extract (archive name command)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
980 (let* ((default-directory (file-name-as-directory archive-tmpdir))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
981 (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
982 default-directory))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
983 exit-status success)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
984 (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
985 (setq exit-status
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
986 (apply 'call-process
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
987 (car command)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
988 nil
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
989 nil
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
990 nil
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
991 (append (cdr command) (list archive name))))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
992 (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
993 (if (not (file-exists-p tmpfile))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
994 (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
995 (insert-file-contents tmpfile)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
996 (setq success t)))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
997 ((numberp exit-status)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
998 (ding
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
999 (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
1000 ((stringp exit-status)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1001 (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
1002 (t
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1003 (ding (message "`%s' failed" (car command)))))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1004 (archive-delete-local tmpfile)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1005 success))
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-by-stdout (archive name command)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1008 (apply 'call-process
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1009 (car command)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1010 nil
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1011 t
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1012 nil
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1013 (append (cdr command) (list archive name))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1014
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1015 (defun archive-extract-other-window ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1016 "In archive mode, find this member in another window."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1017 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1018 (archive-extract t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1019
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1020 (defun archive-display-other-window ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1021 "In archive mode, display this member in another window."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1022 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1023 (archive-extract 'display))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1024
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1025 (defun archive-view ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1026 "In archive mode, view the member on this line."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1027 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1028 (archive-extract 'view))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1029
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1030 (defun archive-add-new-member (arcbuf name)
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
1031 "Add current buffer to the archive in ARCBUF naming it NAME."
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1032 (interactive
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1033 (list (get-buffer
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1034 (read-buffer "Buffer containing archive: "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1035 ;; Find first archive buffer and suggest that
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1036 (let ((bufs (buffer-list)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1037 (while (and bufs (not (eq (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1038 (set-buffer (car bufs))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1039 major-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1040 'archive-mode)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1041 (setq bufs (cdr bufs)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1042 (if bufs
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1043 (car bufs)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1044 (error "There are no archive buffers")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1045 t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1046 (read-string "File name in archive: "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1047 (if buffer-file-name
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1048 (file-name-nondirectory buffer-file-name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1049 ""))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1050 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1051 (set-buffer arcbuf)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1052 (or (eq major-mode 'archive-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1053 (error "Buffer is not an archive buffer"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1054 (if archive-read-only
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1055 (error "Archive is read-only")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1056 (if (eq arcbuf (current-buffer))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1057 (error "An archive buffer cannot be added to itself"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1058 (if (string= name "")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1059 (error "Archive members may not be given empty names"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1060 (let ((func (save-excursion (set-buffer arcbuf)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1061 (archive-name "add-new-member")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1062 (membuf (current-buffer)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1063 (if (fboundp func)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1064 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1065 (set-buffer arcbuf)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1066 (funcall func buffer-file-name membuf name))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1067 (error "Adding a new member is not supported for this archive type"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1068 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1069 ;; Section: IO stuff
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1070
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1071 (defun archive-write-file-member ()
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1072 (save-excursion
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1073 (save-restriction
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1074 (message "Updating archive...")
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1075 (widen)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1076 (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
1077 (archive-name "write-file-member")))
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1078 (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
1079 (archive-maybe-copy (buffer-file-name)))))
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1080 (if (fboundp writer)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1081 (funcall writer archive archive-subfile-mode)
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1082 (archive-*-write-file-member archive
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1083 archive-subfile-mode
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1084 (symbol-value writer)))
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1085 (set-buffer-modified-p nil)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1086 (message "Updating archive...done"))
21570
e21c343b0c6e (archive-extract-by-stdout): Don't use
Eli Zaretskii <eliz@gnu.org>
parents: 20767
diff changeset
1087 (set-buffer archive-superior-buffer)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1088 (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
1089 ;; 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
1090 ;; 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
1091 (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
1092 (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
1093 t)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1094
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1095 (defun archive-*-write-file-member (archive descr command)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1096 (let* ((ename (aref descr 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1097 (tmpfile (expand-file-name ename archive-tmpdir))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1098 (top (directory-file-name (file-name-as-directory archive-tmpdir)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1099 (default-directory (file-name-as-directory top)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1100 (unwind-protect
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1101 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1102 (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
1103 ;; 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
1104 ;; the dired-like listing we created.
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1105 (if (eq major-mode 'archive-mode)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1106 (archive-write-file tmpfile)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1107 (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
1108 ;; 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
1109 ;; 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
1110 ;; 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
1111 ;; archive-write-file-member, above).
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1112 (setq archive-member-coding-system last-coding-system-used)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1113 (if (aref descr 3)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1114 ;; Set the file modes, but make sure we can read it.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1115 (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
1116 (if enable-multibyte-characters
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
1117 (setq ename
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
1118 (encode-coding-string ename file-name-coding-system)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1119 (let ((exitcode (apply 'call-process
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1120 (car command)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1121 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1122 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1123 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1124 (append (cdr command) (list archive ename)))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1125 (if (equal exitcode 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1126 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1127 (error "Updating was unsuccessful (%S)" exitcode))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1128 (archive-delete-local tmpfile))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1129
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1130 (defun archive-write-file (&optional file)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1131 (save-excursion
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1132 (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
1133 (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
1134 (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
1135 (set-buffer-modified-p nil))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1136 t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1137 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1138 ;; Section: Marking and unmarking.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1139
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1140 (defun archive-flag-deleted (p &optional type)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1141 "In archive mode, mark this member to be deleted from the archive.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1142 With a prefix argument, mark that many files."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1143 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1144 (or type (setq type ?D))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1145 (beginning-of-line)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1146 (let ((sign (if (>= p 0) +1 -1))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1147 (modified (buffer-modified-p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1148 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1149 (while (not (zerop p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1150 (if (archive-get-descr t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1151 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1152 (delete-char 1)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1153 (insert type)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1154 (forward-line sign)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1155 (setq p (- p sign)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1156 (set-buffer-modified-p modified))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1157 (archive-next-line 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1158
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1159 (defun archive-unflag (p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1160 "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
1161 With a prefix argument, un-mark that many files forward."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1162 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1163 (archive-flag-deleted p ? ))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1164
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1165 (defun archive-unflag-backwards (p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1166 "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
1167 With a prefix argument, un-mark that many members backward."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1168 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1169 (archive-flag-deleted (- p) ? ))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1170
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1171 (defun archive-unmark-all-files ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1172 "Remove all marks."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1173 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1174 (let ((modified (buffer-modified-p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1175 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1176 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1177 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1178 (while (< (point) archive-file-list-end)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1179 (or (= (following-char) ? )
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1180 (progn (delete-char 1) (insert ? )))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1181 (forward-line 1)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1182 (set-buffer-modified-p modified)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1183
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1184 (defun archive-mark (p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1185 "In archive mode, mark this member for group operations.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1186 With a prefix argument, mark that many members.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1187 Use \\[archive-unmark-all-files] to remove all marks."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1188 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1189 (archive-flag-deleted p ?*))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1190
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1191 (defun archive-get-marked (mark &optional default)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1192 (let (files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1193 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1194 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1195 (while (< (point) archive-file-list-end)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1196 (if (= (following-char) mark)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1197 (setq files (cons (archive-get-descr) files)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1198 (forward-line 1)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1199 (or (nreverse files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1200 (and default
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1201 (list (archive-get-descr))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1202 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1203 ;; Section: Operate
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1204
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1205 (defun archive-next-line (p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1206 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1207 (forward-line p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1208 (or (eobp)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1209 (forward-char archive-file-name-indent)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1210
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1211 (defun archive-previous-line (p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1212 (interactive "p")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1213 (archive-next-line (- p)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1214
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1215 (defun archive-chmod-entry (new-mode)
12791
61bbb487bf2c Standardize layout of doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 12756
diff changeset
1216 "Change the protection bits associated with all marked or this member.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1217 The new protection bits can either be specified as an octal number or
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1218 as a relative change like \"g+rw\" as for chmod(2)"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1219 (interactive "sNew mode (octal or relative): ")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1220 (if archive-read-only (error "Archive is read-only"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1221 (let ((func (archive-name "chmod-entry")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1222 (if (fboundp func)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1223 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1224 (funcall func new-mode (archive-get-marked ?* t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1225 (archive-resummarize))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1226 (error "Setting mode bits is not supported for this archive type"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1227
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1228 (defun archive-chown-entry (new-uid)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1229 "Change the owner of all marked or this member."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1230 (interactive "nNew uid: ")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1231 (if archive-read-only (error "Archive is read-only"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1232 (let ((func (archive-name "chown-entry")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1233 (if (fboundp func)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1234 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1235 (funcall func new-uid (archive-get-marked ?* t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1236 (archive-resummarize))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1237 (error "Setting owner is not supported for this archive type"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1238
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1239 (defun archive-chgrp-entry (new-gid)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1240 "Change the group of all marked or this member."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1241 (interactive "nNew gid: ")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1242 (if archive-read-only (error "Archive is read-only"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1243 (let ((func (archive-name "chgrp-entry")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1244 (if (fboundp func)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1245 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1246 (funcall func new-gid (archive-get-marked ?* t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1247 (archive-resummarize))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1248 (error "Setting group is not supported for this archive type"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1249
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1250 (defun archive-expunge ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1251 "Do the flagged deletions."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1252 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1253 (let (files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1254 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1255 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1256 (while (< (point) archive-file-list-end)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1257 (if (= (following-char) ?D)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1258 (setq files (cons (aref (archive-get-descr) 0) files)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1259 (forward-line 1)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1260 (setq files (nreverse files))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1261 (and files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1262 (or (not archive-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1263 (error "Archive is read-only"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1264 (or (yes-or-no-p (format "Really delete %d member%s? "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1265 (length files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1266 (if (null (cdr files)) "" "s")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1267 (error "Operation aborted"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1268 (let ((archive (archive-maybe-copy (buffer-file-name)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1269 (expunger (archive-name "expunge")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1270 (if (fboundp expunger)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1271 (funcall expunger archive files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1272 (archive-*-expunge archive files (symbol-value expunger)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1273 (archive-maybe-update nil)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1274 (if archive-remote
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1275 (archive-resummarize)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1276 (revert-buffer))))))
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-*-expunge (archive files command)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1279 (apply 'call-process
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1280 (car command)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1281 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1282 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1283 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1284 (append (cdr command) (cons archive files))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1285
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1286 (defun archive-rename-entry (newname)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1287 "Change the name associated with this entry in the tar file."
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1288 (interactive "sNew name: ")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1289 (if archive-read-only (error "Archive is read-only"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1290 (if (string= newname "")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1291 (error "Archive members may not be given empty names"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1292 (let ((func (archive-name "rename-entry"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1293 (descr (archive-get-descr)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1294 (if (fboundp func)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1295 (progn
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1296 (funcall func (buffer-file-name)
22834
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
1297 (if enable-multibyte-characters
926aae368e61 (archive-set-buffer-as-visiting-file): Give FILENAME
Kenichi Handa <handa@m17n.org>
parents: 22830
diff changeset
1298 (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
1299 newname)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1300 descr)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1301 (archive-resummarize))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1302 (error "Renaming is not supported for this archive type"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1303
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1304 ;; 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
1305 (defun archive-mode-revert (&optional no-auto-save no-confirm)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1306 (let ((no (archive-get-lineno)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1307 (setq archive-files nil)
22062
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1308 (let ((revert-buffer-function nil)
029145c16497 (archive-tmpdir): Make the prefix of the temporary
Eli Zaretskii <eliz@gnu.org>
parents: 21570
diff changeset
1309 (coding-system-for-read 'no-conversion))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1310 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1311 (revert-buffer t t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1312 (archive-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1313 (goto-char archive-file-list-start)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1314 (archive-next-line no)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1315
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1316 (defun archive-undo ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1317 "Undo in an archive buffer.
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1318 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
1319 (interactive)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1320 (let (buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1321 (undo)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1322 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1323 ;; Section: Arc Archives
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1324
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1325 (defun archive-arc-summarize ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1326 (let ((p 1)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1327 (totalsize 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1328 (maxlen 8)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1329 files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1330 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1331 (while (and (< (+ p 29) (point-max))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1332 (= (char-after p) ?\C-z)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1333 (> (char-after (1+ p)) 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1334 (let* ((namefld (buffer-substring (+ p 2) (+ p 2 13)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1335 (fnlen (or (string-match "\0" namefld) 13))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1336 (efnname (substring namefld 0 fnlen))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1337 (csize (archive-l-e (+ p 15) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1338 (moddate (archive-l-e (+ p 19) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1339 (modtime (archive-l-e (+ p 21) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1340 (ucsize (archive-l-e (+ p 25) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1341 (fiddle (string= efnname (upcase efnname)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1342 (ifnname (if fiddle (downcase efnname) efnname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1343 (text (format " %8d %-11s %-8s %s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1344 ucsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1345 (archive-dosdate moddate)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1346 (archive-dostime modtime)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1347 ifnname)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1348 (setq maxlen (max maxlen fnlen)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1349 totalsize (+ totalsize ucsize)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1350 visual (cons (vector text
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1351 (- (length text) (length ifnname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1352 (length text))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1353 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1354 files (cons (vector efnname ifnname fiddle nil (1- p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1355 files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1356 p (+ p 29 csize))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1357 (goto-char (point-min))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1358 (let ((dash (concat "- -------- ----------- -------- "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1359 (make-string maxlen ?-)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1360 "\n")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1361 (insert "M Length Date Time File\n"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1362 dash)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1363 (archive-summarize-files (nreverse visual))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1364 (insert dash
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1365 (format " %8d %d file%s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1366 totalsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1367 (length files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1368 (if (= 1 (length files)) "" "s"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1369 "\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1370 (apply 'vector (nreverse files))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1371
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1372 (defun archive-arc-rename-entry (archive newname descr)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1373 (if (string-match "[:\\\\/]" newname)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1374 (error "File names in arc files may not contain a path"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1375 (if (> (length newname) 12)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1376 (error "File names in arc files are limited to 12 characters"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1377 (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
1378 (length newname))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1379 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1380 (save-restriction
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1381 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1382 (widen)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1383 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1384 (goto-char (+ archive-proper-file-start (aref descr 4) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1385 (delete-char 13)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1386 (insert name)))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1387 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1388 ;; Section: Lzh Archives
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1389
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1390 (defun archive-lzh-summarize ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1391 (let ((p 1)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1392 (totalsize 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1393 (maxlen 8)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1394 files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1395 visual)
20767
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1396 (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
1397 (looking-at "\\(.\\|\n\\)\\(.\\|\n\\)-l[hz][0-9ds]-"))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1398 (let* ((hsize (char-after p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1399 (csize (archive-l-e (+ p 7) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1400 (ucsize (archive-l-e (+ p 11) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1401 (modtime (archive-l-e (+ p 15) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1402 (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
1403 (hdrlvl (char-after (+ p 20)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1404 (fnlen (char-after (+ p 21)))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1405 (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
1406 (if file-name-coding-system
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1407 (decode-coding-string str file-name-coding-system)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1408 (string-as-multibyte str))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1409 (fiddle (string= efnname (upcase efnname)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1410 (ifnname (if fiddle (downcase efnname) efnname))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1411 (width (string-width ifnname))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1412 (p2 (+ p 22 fnlen))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1413 (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
1414 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
1415 )
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1416 (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
1417 (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
1418 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
1419 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
1420 (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
1421 (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
1422 (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
1423 (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
1424 (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
1425 (cond
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1426 ((= 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
1427 (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
1428 (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
1429 (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
1430 255)
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1431 "/"
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1432 (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
1433 (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
1434 (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
1435 ((= 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
1436 ((= 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
1437 (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
1438 )
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1439 (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
1440 (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
1441 (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
1442 (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
1443 (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
1444 (setq text (if archive-alternate-display
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1445 (format " %8d %5S %5S %s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1446 ucsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1447 (or uid "?")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1448 (or gid "?")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1449 ifnname)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1450 (format " %10s %8d %-11s %-8s %s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1451 modestr
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1452 ucsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1453 (archive-dosdate moddate)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1454 (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
1455 ifnname)))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1456 (setq maxlen (max maxlen width)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1457 totalsize (+ totalsize ucsize)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1458 visual (cons (vector text
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1459 (- (length text) (length ifnname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1460 (length text))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1461 visual)
20767
ad6c6f1bd674 (archive-find-type): Accept d or s after digit, for lzh.
Richard M. Stallman <rms@gnu.org>
parents: 20239
diff changeset
1462 files (cons (vector prname ifnname fiddle mode (1- p))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1463 files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1464 p (+ p hsize 2 csize))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1465 (goto-char (point-min))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1466 (set-buffer-multibyte default-enable-multibyte-characters)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1467 (let ((dash (concat (if archive-alternate-display
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1468 "- -------- ----- ----- "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1469 "- ---------- -------- ----------- -------- ")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1470 (make-string maxlen ?-)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1471 "\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1472 (header (if archive-alternate-display
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1473 "M Length Uid Gid File\n"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1474 "M Filemode Length Date Time File\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1475 (sumline (if archive-alternate-display
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1476 " %8d %d file%s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1477 " %8d %d file%s")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1478 (insert header dash)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1479 (archive-summarize-files (nreverse visual))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1480 (insert dash
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1481 (format sumline
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1482 totalsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1483 (length files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1484 (if (= 1 (length files)) "" "s"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1485 "\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1486 (apply 'vector (nreverse files))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1487
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1488 (defconst archive-lzh-alternate-display t)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1489
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1490 (defun archive-lzh-extract (archive name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1491 (archive-extract-by-stdout archive name archive-lzh-extract))
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-resum (p count)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1494 (let ((sum 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1495 (while (> count 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1496 (setq count (1- count)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1497 sum (+ sum (char-after p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1498 p (1+ p)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1499 (logand sum 255)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1500
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1501 (defun archive-lzh-rename-entry (archive newname descr)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1502 (save-restriction
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1503 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1504 (widen)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1505 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1506 (let* ((p (+ archive-proper-file-start (aref descr 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1507 (oldhsize (char-after p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1508 (oldfnlen (char-after (+ p 21)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1509 (newfnlen (length newname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1510 (newhsize (+ oldhsize newfnlen (- oldfnlen)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1511 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1512 (if (> newhsize 255)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1513 (error "The file name is too long"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1514 (goto-char (+ p 21))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1515 (delete-char (1+ oldfnlen))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1516 (insert newfnlen newname)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1517 (goto-char p)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1518 (delete-char 2)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1519 (insert newhsize (archive-lzh-resum p newhsize))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1520
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1521 (defun archive-lzh-ogm (newval files errtxt ofs)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1522 (save-restriction
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1523 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1524 (widen)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1525 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1526 (while files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1527 (let* ((fil (car files))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1528 (p (+ archive-proper-file-start (aref fil 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1529 (hsize (char-after p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1530 (fnlen (char-after (+ p 21)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1531 (p2 (+ p 22 fnlen))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1532 (creator (if (>= (- hsize fnlen) 24) (char-after (+ p2 2)) 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1533 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1534 (if (= creator ?U)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1535 (progn
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1536 (or (numberp newval)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1537 (setq newval (funcall newval (archive-l-e (+ p2 ofs) 2))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1538 (goto-char (+ p2 ofs))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1539 (delete-char 2)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1540 (insert (logand newval 255) (lsh newval -8))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1541 (goto-char (1+ p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1542 (delete-char 1)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1543 (insert (archive-lzh-resum (1+ p) hsize)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1544 (message "Member %s does not have %s field"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1545 (aref fil 1) errtxt)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1546 (setq files (cdr files))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1547
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1548 (defun archive-lzh-chown-entry (newuid files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1549 (archive-lzh-ogm newuid files "an uid" 10))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1550
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1551 (defun archive-lzh-chgrp-entry (newgid files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1552 (archive-lzh-ogm newgid files "a gid" 12))
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-lzh-chmod-entry (newmode files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1555 (archive-lzh-ogm
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1556 ;; 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
1557 (function (lambda (old) (archive-calc-mode old newmode t)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1558 files "a unix-style mode" 8))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1559 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1560 ;; Section: Zip Archives
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1561
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1562 (defun archive-zip-summarize ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1563 (goto-char (- (point-max) (- 22 18)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1564 (search-backward-regexp "[P]K\005\006")
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1565 (let ((p (1+ (archive-l-e (+ (point) 16) 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1566 (maxlen 8)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1567 (totalsize 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1568 files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1569 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1570 (while (string= "PK\001\002" (buffer-substring p (+ p 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1571 (let* ((creator (char-after (+ p 5)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1572 (method (archive-l-e (+ p 10) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1573 (modtime (archive-l-e (+ p 12) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1574 (moddate (archive-l-e (+ p 14) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1575 (ucsize (archive-l-e (+ p 24) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1576 (fnlen (archive-l-e (+ p 28) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1577 (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
1578 (fclen (archive-l-e (+ p 32) 2))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1579 (lheader (archive-l-e (+ p 42) 4))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1580 (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
1581 (if file-name-coding-system
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1582 (decode-coding-string str file-name-coding-system)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1583 (string-as-multibyte str))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1584 (isdir (and (= ucsize 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1585 (string= (file-name-nondirectory efnname) "")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1586 (mode (cond ((memq creator '(2 3)) ; Unix + VMS
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1587 (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
1588 ((memq creator '(0 5 6 7 10 11 15)) ; Dos etc.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1589 (logior ?\444
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1590 (if isdir (logior 16384 ?\111) 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1591 (if (zerop
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1592 (logand 1 (char-after (+ p 38))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1593 ?\222 0)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1594 (t nil)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1595 (modestr (if mode (archive-int-to-mode mode) "??????????"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1596 (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
1597 (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
1598 (string= (upcase efnname) efnname)))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1599 (ifnname (if fiddle (downcase efnname) efnname))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1600 (width (string-width ifnname))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1601 (text (format " %10s %8d %-11s %-8s %s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1602 modestr
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1603 ucsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1604 (archive-dosdate moddate)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1605 (archive-dostime modtime)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1606 ifnname)))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1607 (setq maxlen (max maxlen width)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1608 totalsize (+ totalsize ucsize)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1609 visual (cons (vector text
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1610 (- (length text) (length ifnname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1611 (length text))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1612 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1613 files (cons (if isdir
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1614 nil
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1615 (vector efnname ifnname fiddle mode
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1616 (list (1- p) lheader)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1617 files)
12304
3cf4df625c3b (archive-zip-summarize): Handle per-file comments in central directory.
Richard M. Stallman <rms@gnu.org>
parents: 12024
diff changeset
1618 p (+ p 46 fnlen exlen fclen))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1619 (goto-char (point-min))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1620 (let ((dash (concat "- ---------- -------- ----------- -------- "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1621 (make-string maxlen ?-)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1622 "\n")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1623 (insert "M Filemode Length Date Time File\n"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1624 dash)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1625 (archive-summarize-files (nreverse visual))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1626 (insert dash
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1627 (format " %8d %d file%s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1628 totalsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1629 (length files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1630 (if (= 1 (length files)) "" "s"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1631 "\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1632 (apply 'vector (nreverse files))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1633
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1634 (defun archive-zip-extract (archive name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1635 (if archive-zip-use-pkzip
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1636 (archive-*-extract archive name archive-zip-extract)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1637 (archive-extract-by-stdout archive name archive-zip-extract)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1638
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1639 (defun archive-zip-write-file-member (archive descr)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1640 (archive-*-write-file-member
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1641 archive
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1642 descr
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1643 (if (aref descr 2) archive-zip-update-case archive-zip-update)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1644
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1645 (defun archive-zip-chmod-entry (newmode files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1646 (save-restriction
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1647 (save-excursion
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1648 (widen)
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1649 (set-buffer-multibyte nil)
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1650 (while files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1651 (let* ((fil (car files))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1652 (p (+ archive-proper-file-start (car (aref fil 4))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1653 (creator (char-after (+ p 5)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1654 (oldmode (aref fil 3))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1655 (newval (archive-calc-mode oldmode newmode t))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1656 buffer-read-only)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1657 (cond ((memq creator '(2 3)) ; Unix + VMS
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1658 (goto-char (+ p 40))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1659 (delete-char 2)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1660 (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
1661 ((memq creator '(0 5 6 7 10 11 15)) ; Dos etc.
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1662 (goto-char (+ p 38))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1663 (insert (logior (logand (char-after (point)) 254)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1664 (logand (logxor 1 (lsh newval -7)) 1)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1665 (delete-char 1))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1666 (t (message "Don't know how to change mode for this member"))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1667 (setq files (cdr files))))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1668 ;; -------------------------------------------------------------------------
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1669 ;; Section: Zoo Archives
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1670
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1671 (defun archive-zoo-summarize ()
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1672 (let ((p (1+ (archive-l-e 25 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1673 (maxlen 8)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1674 (totalsize 0)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1675 files
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1676 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1677 (while (and (string= "\334\247\304\375" (buffer-substring p (+ p 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1678 (> (archive-l-e (+ p 6) 4) 0))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1679 (let* ((next (1+ (archive-l-e (+ p 6) 4)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1680 (moddate (archive-l-e (+ p 14) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1681 (modtime (archive-l-e (+ p 16) 2))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1682 (ucsize (archive-l-e (+ p 20) 4))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1683 (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
1684 (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
1685 (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
1686 (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
1687 (fnlen (or (string-match "\0" namefld) 13))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1688 (efnname (let ((str
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1689 (concat
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1690 (if (> ldirlen 0)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1691 (concat (buffer-substring
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1692 (+ p 58 lfnlen)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1693 (+ p 58 lfnlen ldirlen -1))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1694 "/")
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1695 "")
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1696 (if (> lfnlen 0)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1697 (buffer-substring (+ p 58)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1698 (+ p 58 lfnlen -1))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1699 (substring namefld 0 fnlen)))))
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1700 (if file-name-coding-system
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1701 (decode-coding-string str file-name-coding-system)
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1702 (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
1703 (fiddle (and (= lfnlen 0) (string= efnname (upcase efnname))))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1704 (ifnname (if fiddle (downcase efnname) efnname))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1705 (width (string-width ifnname))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1706 (text (format " %8d %-11s %-8s %s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1707 ucsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1708 (archive-dosdate moddate)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1709 (archive-dostime modtime)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1710 ifnname)))
22830
d79de5a60ee8 (archive-summarize): Set buffer unibyte before
Eli Zaretskii <eliz@gnu.org>
parents: 22782
diff changeset
1711 (setq maxlen (max maxlen (length width))
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1712 totalsize (+ totalsize ucsize)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1713 visual (cons (vector text
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1714 (- (length text) (length ifnname))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1715 (length text))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1716 visual)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1717 files (cons (vector efnname ifnname fiddle nil (1- p))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1718 files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1719 p next)))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1720 (goto-char (point-min))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1721 (let ((dash (concat "- -------- ----------- -------- "
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1722 (make-string maxlen ?-)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1723 "\n")))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1724 (insert "M Length Date Time File\n"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1725 dash)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1726 (archive-summarize-files (nreverse visual))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1727 (insert dash
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1728 (format " %8d %d file%s"
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1729 totalsize
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1730 (length files)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1731 (if (= 1 (length files)) "" "s"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1732 "\n"))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1733 (apply 'vector (nreverse files))))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1734
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1735 (defun archive-zoo-extract (archive name)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1736 (archive-extract-by-stdout archive name archive-zoo-extract))
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1737 ;; -------------------------------------------------------------------------
23467
dd5bbd8db2f5 (arc-mode): Provide arc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 23383
diff changeset
1738 ;; 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
1739 ;; rms 15 Oct 98
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1740 (provide 'archive-mode)
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1741
23467
dd5bbd8db2f5 (arc-mode): Provide arc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 23383
diff changeset
1742 (provide 'arc-mode)
dd5bbd8db2f5 (arc-mode): Provide arc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 23383
diff changeset
1743
11880
9d247297e826 Initial revision
Karl Heuer <kwzh@gnu.org>
parents:
diff changeset
1744 ;; arc-mode.el ends here.