;ELC   
;;; Compiled by rms@psilocin.ai.mit.edu on Wed Jun 24 14:15:11 1998
;;; from file /gd/gnu/emacs/lisp/shadowfile.el
;;; in Emacs version 20.2.95.4
;;; with bytecomp version 2.46
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.
(if (and (boundp 'emacs-version)
	 (< (aref emacs-version (1- (length emacs-version))) ?A)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`shadowfile.el' was compiled for Emacs 19.29 or later"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(byte-code "\302\303!\210\304\305!\210\306\307\310\311\312	\313&\207" [:prefix :group provide shadowfile require ange-ftp custom-declare-group shadow nil "Automatic file copying when saving a file." "shadow-" files] 8)
#@166 *If t, always copy shadow files without asking.
If nil (the default), always ask.  If not nil and not t, ask only if there
is no buffer currently visiting the file.
(custom-declare-variable 'shadow-noquery 'nil '(#$ . -830) :type '(choice (const t) (const nil) (other :tag "Ask if no buffer" maybe)) :group 'shadow)
#@65 *If nonnil, do not display a message when a file needs copying.
(custom-declare-variable 'shadow-inhibit-message 'nil '(#$ . -1152) :type 'boolean :group 'shadow)
#@185 If nonnil, shadowfile won't redefine C-x C-c.
Normally it overloads the function `save-buffers-kill-emacs' to check
for files have been changed and need to be copied to other systems.
(custom-declare-variable 'shadow-inhibit-overload 'nil '(#$ . 1322) :type 'boolean :group 'shadow)
#@144 File to keep shadow information in.  
The shadow-info-file should be shadowed to all your accounts to
ensure consistency.  Default: ~/.shadows
(custom-declare-variable 'shadow-info-file 'nil '(#$ . 1612) :type '(choice (const nil) file) :group 'shadow)
#@354 File to store the list of uncopied shadows in.
This means that if a remote system is down, or for any reason you cannot or
decide not to copy your shadow files at the end of one emacs session, it will
remember and ask you again in your next emacs session.
This file must NOT be shadowed to any other system, it is host-specific.
Default: ~/.shadow_todo
(custom-declare-variable 'shadow-todo-file 'nil '(#$ . 1872) :type '(choice (const nil) file) :group 'shadow)
#@40 The complete hostname of this machine.
(defvar shadow-system-name (system-name) (#$ . 2341))
#@38 Your home directory on this machine.
(defvar shadow-homedir nil (#$ . 2440))
#@52 List of host clusters (see shadow-define-cluster).
(defvar shadow-clusters nil (#$ . 2523))
#@139 List of files that are shared between hosts.
This list contains shadow structures with literal filenames, created by
shadow-define-group.
(defvar shadow-literal-groups nil (#$ . 2622))
#@161 List of file types that are shared between hosts.
This list contains shadow structures with regexps matching filenames, 
created by shadow-define-regexp-group.
(defvar shadow-regexp-groups nil (#$ . 2814))
(byte-code "\305\300!\204 \306\300	B\305\302!\204 \306\302	B\305\303!\204  \306\303	B\305\304!\204, \306\304	B\306\207" [shadow-files-to-copy current-load-list shadow-hashtable shadow-info-buffer shadow-todo-buffer boundp nil] 2)
#@71 (shadow-when CONDITION . BODY) => evaluate BODY if CONDITION is true.
(defalias 'shadow-when '(macro . #[(condition &rest body) "\302\303D\304	BBB\207" [condition body if not nil] 4 (#$ . 3266)]))
#@78 Add members of list A to list B
if they are not equal to items already in B.
(defalias 'shadow-union #[(a b) "\204 	\207@	\235\203 \302A	\"\207\302A@	B\"\207" [a b shadow-union] 4 (#$ . 3470)])
#@84 If FUNC applied to some element of LIST is nonnil, 
return the first such element.
(defalias 'shadow-find #[(func list) "\203 	@!\204 A\211\204 @\207" [list func] 3 (#$ . 3677)])
#@123 Remove elements satisfying FUNC from LIST.
Nondestructive; actually returns a copy of the list with the elements removed.
(defalias 'shadow-remove-if #[(func list) "\205 	@!\203 \302	A\"\207@\302	A\"B\207" [list func shadow-remove-if] 4 (#$ . 3871)])
#@68 Concatenate elements of the list of STRINGS with SEP between each.
(defalias 'shadow-join #[(strings sep) "\204 \302\207A\204 @\207@\303\304A	\"Q\207" [strings sep "" " " shadow-join] 5 (#$ . 4135)])
#@94 Like regexp-quote, but includes the ^ and $ 
to make sure regexp matches nothing but STRING.
(defalias 'shadow-regexp-superquote #[(string) "\301\302!\303Q\207" [string "^" regexp-quote "$"] 3 (#$ . 4348)])
#@127 If PREFIX begins STRING, return the rest.
Return value is nonnil if PREFIX and STRING are string= up to the length of
PREFIX.
(defalias 'shadow-suffix #[(prefix string) "G	G\nY\205 	\304O\230\205 	\305O*\207" [prefix string ls lp 0 nil] 4 (#$ . 4563)])
#@301 Creates a shadow cluster 
called NAME, using the PRIMARY hostname, REGEXP matching all hosts in the
cluster.  The variable shadow-clusters associates the names of clusters to
these structures. 
   This function is for program use: to create clusters interactively, use
shadow-define-cluster instead.
(defalias 'shadow-make-cluster #[(name primary regexp) "	\nE\207" [name primary regexp] 3 (#$ . 4832)])
#@33 Return the name of the CLUSTER.
(defalias 'shadow-cluster-name '(macro . #[(cluster) "\301\302E\207" [cluster elt 0] 3 (#$ . 5243)]))
#@43 Return the primary hostname of a CLUSTER.
(defalias 'shadow-cluster-primary '(macro . #[(cluster) "\301\302E\207" [cluster elt 1] 3 (#$ . 5384)]))
#@48 Return the regexp matching hosts in a CLUSTER.
(defalias 'shadow-cluster-regexp '(macro . #[(cluster) "\301\302E\207" [cluster elt 2] 3 (#$ . 5538)]))
#@196 Put cluster NAME on the list of clusters,
replacing old definition if any.  PRIMARY and REGEXP are the
information defining the cluster.  For interactive use, call
shadow-define-cluster instead.
(defalias 'shadow-set-cluster #[(name primary regexp) "\305\306\"\307\n\f#	B\211)\207" [shadow-clusters rest name primary regexp shadow-remove-if #[(x) "	@\232\207" [name x] 2] shadow-make-cluster] 4 (#$ . 5697)])
#@36 Return cluster named NAME, or nil.
(defalias 'shadow-get-cluster '(macro . #[(name) "\301\302E\207" [name assoc shadow-clusters] 3 (#$ . 6117)]))
#@67 If SITE is a cluster, return primary host, otherwise return SITE.
(defalias 'shadow-site-primary #[(site) "\303	\"\211\203 \n\304\234\202 )\207" [site shadow-clusters c assoc 1] 4 (#$ . 6270)])
#@84 Given a SITE (hostname or cluster name), return the cluster
that it is in, or nil.
(defalias 'shadow-site-cluster #[(site) "\302	\"\206 \303\304	\"\207" [site shadow-clusters assoc shadow-find #[(x) "\302\303\234	\"\207" [x site string-match 2] 3]] 3 (#$ . 6475)])
#@54 Read a cluster name or hostname from the minibuffer.
(defalias 'shadow-read-site #[nil "\302\303\"\211\304\232?\205 	)\207" [shadow-clusters ans completing-read "Host or cluster name [RET when done]: " ""] 4 (#$ . 6749)])
#@162 Nonnil iff SITE1 is or includes SITE2.  
Each may be a host or cluster name; if they are clusters, regexp of site1 will
be matched against the primary of site2.
(defalias 'shadow-site-match #[(site1 site2) "	\230\206  \305\n\"\306	!\203 \307\310\234\f\"\202 \f\230*\207" [site1 site2 shadow-clusters cluster1 primary2 assoc shadow-site-primary string-match 2] 3 (#$ . 6981)])
#@42 Returns the default username for a site.
(defalias 'shadow-get-user #[(site) "\301\302!!\207" [site ange-ftp-get-user shadow-site-primary] 3 (#$ . 7372)])
#@142 Parse PATH into (site user path) list,
or leave it alone if it already is one.  Returns nil if the argument is not a
full ange-ftp pathname.
(defalias 'shadow-parse-fullpath #[(fullpath) "<\203 \207\301!\207" [fullpath ange-ftp-ftp-name] 2 (#$ . 7535)])
#@118 Parse any PATH into (site user path) list.
Argument can be a simple path, full ange-ftp path, or already a hup list.
(defalias 'shadow-parse-path #[(path) "\302!\206 	\303 E\207" [path shadow-system-name shadow-parse-fullpath user-login-name] 3 (#$ . 7800)])
#@124 Make an ange-ftp style fullpath out of HOST, USER (optional), and PATH.
This is probably not as general as it ought to be.
(defalias 'shadow-make-fullpath #[(host user path) "\303\205 \304P	\305\n\260\207" [user host path "/" "@" ":"] 5 (#$ . 8069)])
(put 'shadow-make-fullpath 'byte-optimizer 'byte-compile-inline-expand)
#@65 Return FULLPATH with the pathname component changed to NEWPATH.
(defalias 'shadow-replace-path-component #[(fullpath newpath) "\306!\211@	A@\n\307\f\205 \f\310P\311\260,\207" [fullpath hup newpath path user host shadow-parse-fullpath "/" "@" ":"] 6 (#$ . 8402)])
#@135 If FILENAME is at this site,
remove /user@host part.  If refers to a different system or a different user on
this system, return nil.
(defalias 'shadow-local-file #[(file) "\303!\211\204\f \202$ \304	@\n\"\203# 	A@\305 \230\203# \306	8\202$ \307)\207" [file hup shadow-system-name shadow-parse-fullpath shadow-site-match user-login-name 2 nil] 4 (#$ . 8681)])
#@141 If hostname part of FILE is a cluster, expand it
into the cluster's primary hostname.  Will return the pathname bare if it is
a local file.
(defalias 'shadow-expand-cluster-in-file-name #[(file) "\306!\307\211\204 \202/ \310\n!\206/ \311\n@!\nA@\312\n8\313\f\205) \f\314P\315\260+*\207" [file cluster hup path user host shadow-parse-path nil shadow-local-file shadow-site-primary 2 "/" "@" ":"] 6 (#$ . 9051)])
#@44 Expand file name and get file's true name.
(defalias 'shadow-expand-file-name #[(file &optional default) "\302\303	\"!\207" [file default file-truename expand-file-name] 4 (#$ . 9479)])
#@159 Simplify FILENAME
by replacing (when possible) home directory with ~, and hostname with cluster
name that includes it.  Filename should be absolute and true.
(defalias 'shadow-contract-file-name #[(file) "\306!\307	!\203 \n\202- \310\311\312\313	@	A@\314\315\f\205# \f\316P\317\260+!!8!\320\311	8\"\321	@!\211\203I \322\234\202K 	@	A@\203Z \323P\202] \311	8\315\f\205h \f\316P\317\260.\207" [file hup shadow-homedir path user host shadow-parse-path shadow-local-file file-name-as-directory 2 shadow-parse-fullpath expand-file-name "~" "/" "@" ":" shadow-suffix shadow-site-cluster 0 "~/" homedir suffix cluster] 10 (#$ . 9673)])
#@236 True if the site of PATTERN and of FILE are on the same site.
If usernames are supplied, they must also match exactly.  PATTERN and FILE may
be lists of host, user, path, or ange-ftp pathnames.  FILE may also be just a
local filename.
(defalias 'shadow-same-site #[(pattern file) "\304!\305	!\306@\n@\"\205 A@?\206 A@\nA@\230*\207" [pattern file file-sup pattern-sup shadow-parse-fullpath shadow-parse-path shadow-site-match] 3 (#$ . 10339)])
#@406 Returns t if PATTERN matches FILE.
If REGEXP is supplied and nonnil, the pathname part of the pattern is a regular
expression, otherwise it must match exactly.  The sites and usernames must
match---see shadow-same-site.  The pattern must be in full ange-ftp format, but
the file can be any valid filename.  This function does not do any filename
expansion or contraction, you must do that yourself first.
(defalias 'shadow-file-match #[(pattern file &optional regexp) "\305!\306\n!\307	\"\205% \f\203 \310\311	8\3118\"\202% \311	8\3118\230*\207" [pattern pattern-sup file file-sup regexp shadow-parse-fullpath shadow-parse-path shadow-same-site string-match 2] 4 (#$ . 10797)])
#@368 Edit (or create) the definition of a cluster.
This is a group of hosts that share directories, so that copying to or from
one of them is sufficient to update the file on all of them.  Clusters are
defined by a name, the network address of a primary host (the one we copy
files to), and a regular expression that matches the hostnames of all the sites
in the cluster.
(defalias 'shadow-define-cluster #[(name) "\306	\"\307\310\n\203 \n\311\234\202 \"\312\313\307\314\n\203# \n\315\234\202& \316!\"\211\"\2049 \317\320!\210\321\315!\210\202 \f)\322#+\207" [name shadow-clusters old primary try-regexp regexp assoc read-string "Primary host: " 1 nil string-match "Regexp matching all host names: " 2 shadow-regexp-superquote message "Regexp doesn't include the primary host!" sit-for shadow-set-cluster] 5 (#$ . 11489) (list (completing-read "Cluster name: " shadow-clusters nil nil))])
#@271 Declare a single file to be shared between sites.
It may have different filenames on each site.  When this file is edited, the
new version will be copied to each of the other locations.  Sites can be
specific hostnames, or names of clusters (see shadow-define-cluster).
(defalias 'shadow-define-literal-group #[nil "\306\307\310 !!\3118\312\312\312\313 \211\203L \314\315\316\317!\"!\314\320	\"\n\321\230\2033 \317!\2024 \n	\322\n\205@ \n\323P\324	\260+\fB\202 \fB-\325 \207" [hup path user site group host shadow-parse-fullpath shadow-contract-file-name buffer-file-name 2 nil shadow-read-site read-string format "Username [default %s]: " shadow-get-user "Filename: " "" "/" "@" ":" shadow-write-info-file shadow-literal-groups] 5 (#$ . 12395) nil])
#@375 Make each of a group of files be shared between hosts.
Prompts for regular expression; files matching this are shared between a list
of sites, which are also prompted for. The filenames must be identical on all
hosts (if they aren't, use shadow-define-group instead of this function).
Each site can be either a hostname or the name of a cluster (see
shadow-define-cluster).
(defalias 'shadow-define-regexp-group #[nil "\305\306\307 \205 \310\311\312\313\307 !!8!\"\314\211\211\315 \211\2033 \n	B\305\316\317\n\"\320\n!\"B\202 \321	#\fB\322 ,\207" [usernames sites site regexp shadow-regexp-groups read-string "Filename regexp: " buffer-file-name shadow-regexp-superquote 2 shadow-parse-path shadow-contract-file-name nil shadow-read-site format "Username for %s: " shadow-get-user shadow-make-group shadow-write-info-file] 7 (#$ . 13176) nil])
#@54 Interactive function to display shadows of a buffer.
(defalias 'shadow-shadows #[nil "\301\302\303\304\305 !\"\306\"\307\310G\311U\203 \312\202 \")\207" [msg shadow-join mapcar cdr shadow-shadows-of buffer-file-name " " message "%s" 0 "No shadows."] 5 (#$ . 14039) nil])
#@303 Copy all pending shadow files.
With prefix argument, copy all pending files without query.
Pending copies are stored in variable shadow-files-to-copy, and in
shadow-todo-file if necessary.  This function is invoked by
shadow-save-buffers-kill-emacs, so it is not usually necessary to
call it manually.
(defalias 'shadow-copy-files #[(&optional arg) "\204\f t\203\f \301\302!\207\212\303\304\305\306$\210\307\310!)\207" [shadow-files-to-copy message "No files need to be shadowed." map-y-or-n-p #[(pair) "\206 	\206 \303\304\nA\"\207" [arg shadow-noquery pair format "Copy shadow file %s? "] 3] shadow-copy-file ("shadow" "shadows" "copy") shadow-write-todo-file t] 5 (#$ . 14322) "P"])
#@277 Cancel the instruction to copy some files.
Prompts for which copy operations to cancel.  You will not be asked to copy
them again, unless you make more changes to the files.  To cancel a shadow
permanently, remove the group from shadow-literal-groups or
shadow-regexp-groups.
(defalias 'shadow-cancel #[nil "\301\302\303\304$\210\305\306G\"\210\307 \207" [shadow-files-to-copy map-y-or-n-p #[(pair) "\301\302@A#\207" [pair format "Cancel copying %s to %s? "] 4] #[(pair) "\301!\207" [pair shadow-remove-from-todo] 2] ("shadow" "shadows" "cancel copy") message "There are %d shadows to be updated." shadow-write-todo-file] 5 (#$ . 15020) nil])
#@197 Makes a description of a file group---
actually a list of regexp ange-ftp file names---from REGEXP (name of file to
be shadowed), list of SITES, and corresponding list of USERNAMES for each
site.
(defalias 'shadow-make-group #[(regexp sites usernames) "\205\" @	@\n\306\f\205 \f\307P\310\260+\311\nA	A#B\207" [sites usernames regexp path user host "/" "@" ":" shadow-make-group] 5 (#$ . 15675)])
#@23 Copy one shadow file.
(defalias 'shadow-copy-file #[(s) "\304\305\306@!!!\2068 \307@!\204$ \310\311\312@\"!\203  \313!\210\314\2028 	\315=\2044 \310\311\316@\"!\2058 \317@!\320A!\n\205M \nq\210\214~\210\321\322\323\217)*\207" [s shadow-noquery buffer to get-file-buffer abbreviate-file-name shadow-expand-file-name file-readable-p y-or-n-p format "Cannot find file %s--cancel copy request?" shadow-remove-from-todo nil t "No buffer for %s -- update shadow anyway?" find-file-noselect shadow-expand-cluster-in-file-name i (byte-code "\302ed#\210\303	!\207" [to s write-region shadow-remove-from-todo] 4) ((error (byte-code "\301\302A\"\207" [s message "Shadow %s not updated!"] 3)))] 4 (#$ . 16087)])
#@225 Returns copy operations needed to update FILE.
Filename should have clusters expanded, but otherwise can have any format.  
Return value is a list of dotted pairs like (from . to), where from
and to are absolute file names.
(defalias 'shadow-shadows-of #[(file) "\306	\"J\2061 \307\310!\206 \n\"\311!\312\313\314\315\f\316#\315\f\317#\"\"\320	\"L+\207" [file shadow-hashtable shadow-homedir absolute-file canonical-file shadow-literal-groups intern-soft shadow-expand-file-name shadow-local-file shadow-contract-file-name mapcar #[(shadow) "	B\207" [absolute-file shadow] 2] append shadow-shadows-of-1 nil t intern shadow-regexp-groups shadows] 8 (#$ . 16805)])
#@116 Return list of FILE's shadows in GROUPS, 
which are considered as regular expressions if third arg REGEXP is true.
(defalias 'shadow-shadows-of-1 #[(file groups regexp) "\2051 \305\306@\"\307	@\232\203 \310\202) \n\203( \311\312!8\313\314	\")\202) 	\315A\n#\")\207" [groups nonmatching regexp file realpath shadow-remove-if #[(x) "\303	\n#\207" [x file regexp shadow-file-match] 4] append nil 2 shadow-parse-fullpath mapcar #[(x) "\302	\"\207" [x realpath shadow-replace-path-component] 3] shadow-shadows-of-1] 6 (#$ . 17490)])
#@84 If current buffer has shadows, add them to the list
of files needing to be copied.
(defalias 'shadow-add-to-todo #[nil "\303\304\305p!!!\211\203# \306	\"\n\204  \307\310\311\312!\"\210\313\314!\210\315 \210)\316\207" [shadows shadow-files-to-copy shadow-inhibit-message shadow-shadows-of shadow-expand-file-name buffer-file-name shadow-union message "%s" substitute-command-keys "Use \\[shadow-copy-files] to update shadows." sit-for 1 shadow-write-todo-file nil] 5 (#$ . 18035)])
#@95 Remove PAIR from shadow-files-to-copy.
PAIR must be (eq to) one of the elements of that list.
(defalias 'shadow-remove-from-todo #[(pair) "\301\302\"\211\207" [shadow-files-to-copy shadow-remove-if #[(s) "	=\207" [s pair] 2]] 3 (#$ . 18525)])
#@175 Visits and loads shadow-info-file and shadow-todo-file,
thus restoring shadowfile's state from your last emacs session.
Returns t unless files were locked; then returns nil.
(defalias 'shadow-read-files #[nil "\304\305!\203! \305!;\204 \305	!;\203! \306\307!\210\310 \210\311\312!\210\313\207\212\203M \314!\211q\210\315 \204J \316\317 \"\203J \320 \210\306\321\322\317 !@\"\210\311\323!\210\324 \210	\203y \314	!\211q\210\315 \204u \316\317 	\"\203u \320 \210\306\321\322\317 !@\"\210\311\323!\210\324\313!\210\325 \210)\326\207" [shadow-info-file shadow-todo-file shadow-info-buffer shadow-todo-buffer fboundp file-locked-p message "Shadowfile is running in another emacs; can't have two." beep sit-for 3 nil find-file-noselect buffer-modified-p file-newer-than-file-p make-auto-save-file-name erase-buffer "Data recovered from %s." insert-file-contents 1 eval-current-buffer shadow-invalidate-hashtable t] 4 (#$ . 18778) nil])
#@151 Write out information to shadow-info-file.
Also clears shadow-hashtable, since when there are new shadows defined, the old
hashtable info is invalid.
(defalias 'shadow-write-info-file #[nil "\302 \210\205# \212	\204 \303!	q\210ed|\210\304\305!\210\304\306!\210\304\307!)\207" [shadow-info-file shadow-info-buffer shadow-invalidate-hashtable find-file-noselect shadow-insert-var shadow-clusters shadow-literal-groups shadow-regexp-groups] 2 (#$ . 19722)])
#@90 Write out information to shadow-todo-file.  
With nonnil argument also saves the buffer.
(defalias 'shadow-write-todo-file #[(&optional save) "\212\204	 \303	!q\210ed|\210\304\305!\210\n\205 \306 )\207" [shadow-todo-buffer shadow-todo-file save find-file-noselect shadow-insert-var shadow-files-to-copy shadow-save-todo-file] 2 (#$ . 20187)])
(defalias 'shadow-save-todo-file #[nil "\205 \301!\205 \212q\210\302\303\304\217)\207" [shadow-todo-buffer buffer-modified-p nil (basic-save-buffer) ((error (byte-code "\300\301!\210\302\303!\207" [message "WARNING: Can't save shadow todo file; it is locked!" sit-for 1] 2)))] 3])
(defalias 'shadow-invalidate-hashtable #[nil "\301\302\303\"\211\207" [shadow-hashtable make-vector 37 0] 3])
#@176 Prettily insert a setq command for VARIABLE.
which, when later evaluated, will restore it to its current setting.
SYMBOL must be the name of a variable whose value is a list.
(defalias 'shadow-insert-var #[(variable) "p\303\304	\"c\210\305	!:\2037 \306c\210\307\305	!@!\210\305	!A\211\2031 \310c\210\307\n@!\210\nA\211\204\" \311c)\202B \312c\210\307\305	!!\210\313c)\207" [standard-output variable rest format "(setq %s" eval "\n  '(" prin1 "\n    " "))\n\n" " " ")\n\n"] 4 (#$ . 20938)])
#@291 Offer to save each buffer and copy shadows, then kill this Emacs process.
With prefix arg, silently save all file-visiting buffers, then kill.

Extended by shadowfile to automatically save `shadow-todo-file' and
look for files that have been changed and need to be copied to other systems.
(defalias 'shadow-save-buffers-kill-emacs #[(&optional arg) "\304 \210\305\306\"\210\307 \210\304 \210\306\310\311\312 \">\203 \313\314!\205] \315\316!\203[ \316 \317\211\203O \320\n@!\321>\203H \322\n@!\322\n@\"\210)\203H \306\nA\211\204- 	?\206W \313\323!*\205] \324 \207" [arg active processes val shadow-save-todo-file save-some-buffers t shadow-copy-files mapcar #[(buf) "\301!\205	 \302!\207" [buf buffer-file-name buffer-modified-p] 2] buffer-list yes-or-no-p "Modified buffers exist; exit anyway? " fboundp process-list nil process-status (run stop open) process-kill-without-query "Active processes exist; kill them and exit anyway? " kill-emacs] 5 (#$ . 21438) "P"])
(defalias 'shadow-initialize #[nil "\204\n \305\306\307!!	\204 \306\310!\n\204 \306\311!\312 \204* \313\314!\210\315 \210\316\317!\207\204> \320\321!\204> \321\322KM\210\322\323KM\210\324\325\326\"\210\327\f\330\331#\207" [shadow-homedir shadow-info-file shadow-todo-file shadow-inhibit-overload ctl-x-4-map file-name-as-directory shadow-expand-file-name "~" "~/.shadows" "~/.shadow_todo" shadow-read-files message "Shadowfile information files not found - aborting" beep sit-for 3 fboundp shadow-orig-save-buffers-kill-emacs save-buffers-kill-emacs shadow-save-buffers-kill-emacs add-hook write-file-hooks shadow-add-to-todo define-key "s" shadow-copy-files] 4])
(byte-code "\203\f \301\302\303\"\210\202 \303 \210\301\207" [noninteractive add-hook after-init-hook shadow-initialize] 3)
