annotate lisp/files.el @ 18092:8428d56cd207

(smtpmail-via-smtp): Recognize XVRB as a synonym for VERB and XONE as a synonym for ONEX. (smtpmail-read-response): Add "%s" to `message' calls to avoid problems with percent signs in strings. (smtpmail-read-response): Return all lines of the response text as a list of strings. Formerly only the first line was returned. This is insufficient when one wants to parse e.g. an EHLO response. Ignore responses starting with "0". This is necessary to support the VERB SMTP extension. (smtpmail-via-smtp): Try EHLO and find out which SMTP service extensions the receiving mailer supports. Issue the ONEX and XUSR commands if the corresponding extensions are supported. Issue VERB if supported and `smtpmail-debug-info' is non-nil. Add SIZE attribute to MAIL FROM: command if SIZE extension is supported. Add code that could set the BODY= attribute to MAIL FROM: if the receiving mailer supports 8BITMIME. This is currently disabled, since doing it right might involve adding MIME headers to, and in some cases reencoding, the message.
author Richard M. Stallman <rms@gnu.org>
date Sun, 01 Jun 1997 22:24:22 +0000
parents 89969b579beb
children 33e7093070f8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 638
diff changeset
1 ;;; files.el --- file input and output commands for Emacs
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 638
diff changeset
2
14734
20f4c4a078b2 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14731
diff changeset
3 ;; Copyright (C) 1985, 86, 87, 92, 93,
20f4c4a078b2 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14731
diff changeset
4 ;; 94, 95, 1996 Free Software Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 844
diff changeset
5
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
6 ;; Maintainer: FSF
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
7
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
9
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
13 ;; any later version.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
14
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
19
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14176
5e5779fa54cb (auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14112
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
5e5779fa54cb (auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14112
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
5e5779fa54cb (auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14112
diff changeset
23 ;; Boston, MA 02111-1307, USA.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
24
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2108
diff changeset
25 ;;; Commentary:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2108
diff changeset
26
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2108
diff changeset
27 ;; Defines most of Emacs's file- and directory-handling functions,
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2108
diff changeset
28 ;; including basic file visiting, backup generation, link handling,
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2108
diff changeset
29 ;; ITS-id version control, load- and write-hook handling, and the like.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2108
diff changeset
30
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
31 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 778
diff changeset
32
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
33 (defgroup backup nil
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
34 "Backups of edited data files."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
35 :group 'data)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
36
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
37 (defgroup find-file nil
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
38 "Finding and editing files."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
39 :group 'data)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
40
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
41
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
42 (defcustom delete-auto-save-files t
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
43 "*Non-nil means delete auto-save file when a buffer is saved or killed."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
44 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
45 :group 'auto-save)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
46
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
47 (defcustom directory-abbrev-alist
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
48 nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
49 "*Alist of abbreviations for file directories.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
50 A list of elements of the form (FROM . TO), each meaning to replace
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
51 FROM with TO when it appears in a directory name. This replacement is
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
52 done when setting up the default directory of a newly visited file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
53 *Every* FROM string should start with `^'.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
54
4735
97c1e7309a2d (directory-abbrev-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4699
diff changeset
55 Do not use `~' in the TO strings.
97c1e7309a2d (directory-abbrev-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4699
diff changeset
56 They should be ordinary absolute directory names.
97c1e7309a2d (directory-abbrev-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4699
diff changeset
57
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
58 Use this feature when you have directories which you normally refer to
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
59 via absolute symbolic links. Make TO the name of the link, and FROM
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
60 the name it is linked to."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
61 :type '(repeat (cons :format "%v"
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
62 :value ("" . "")
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
63 (regexp :tag "From")
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
64 (regexp :tag "To")))
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
65 :group 'abbrev
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
66 :group 'find-file)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
67
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
68 ;;; Turn off backup files on VMS since it has version numbers.
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
69 (defcustom make-backup-files (not (eq system-type 'vax-vms))
3634
1a0df59ac5fa (make-backup-files): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3630
diff changeset
70 "*Non-nil means make a backup of a file the first time it is saved.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
71 This can be done by renaming the file or by copying.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
72
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
73 Renaming means that Emacs renames the existing file so that it is a
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
74 backup file, then writes the buffer into a new file. Any other names
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
75 that the old file had will now refer to the backup file. The new file
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
76 is owned by you and its group is defaulted.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
77
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
78 Copying means that Emacs copies the existing file into the backup
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
79 file, then writes the buffer on top of the existing file. Any other
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
80 names that the old file had will now refer to the new (edited) file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
81 The file's owner and group are unchanged.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
82
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
83 The choice of renaming or copying is controlled by the variables
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
84 `backup-by-copying', `backup-by-copying-when-linked' and
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
85 `backup-by-copying-when-mismatch'. See also `backup-inhibited'."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
86 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
87 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
88
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
89 ;; Do this so that local variables based on the file name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
90 ;; are not overridden by the major mode.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
91 (defvar backup-inhibited nil
4597
7ae2e83e40ea (backup-inhibited): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4466
diff changeset
92 "Non-nil means don't make a backup, regardless of the other parameters.
7ae2e83e40ea (backup-inhibited): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4466
diff changeset
93 This variable is intended for use by making it local to a buffer.
7ae2e83e40ea (backup-inhibited): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4466
diff changeset
94 But it is local only if you make it local.")
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
95 (put 'backup-inhibited 'permanent-local t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
96
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
97 (defcustom backup-by-copying nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
98 "*Non-nil means always use copying to create backup files.
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
99 See documentation of variable `make-backup-files'."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
100 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
101 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
102
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
103 (defcustom backup-by-copying-when-linked nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
104 "*Non-nil means use copying to create backups for files with multiple names.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
105 This causes the alternate names to refer to the latest version as edited.
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
106 This variable is relevant only if `backup-by-copying' is nil."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
107 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
108 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
109
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
110 (defcustom backup-by-copying-when-mismatch nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
111 "*Non-nil means create backups by copying if this preserves owner or group.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
112 Renaming may still be used (subject to control of other variables)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
113 when it would not result in changing the owner or group of the file;
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
114 that is, for files which are owned by you and whose group matches
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
115 the default for a new file created there by you.
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
116 This variable is relevant only if `backup-by-copying' is nil."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
117 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
118 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
119
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
120 (defvar backup-enable-predicate
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
121 '(lambda (name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
122 (or (< (length name) 5)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
123 (not (string-equal "/tmp/" (substring name 0 5)))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
124 "Predicate that looks at a file name and decides whether to make backups.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
125 Called with an absolute file name as argument, it returns t to enable backup.")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
126
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
127 (defcustom buffer-offer-save nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
128 "*Non-nil in a buffer means offer to save the buffer on exit
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
129 even if the buffer is not visiting a file.
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
130 Automatically local in all buffers."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
131 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
132 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
133 (make-variable-buffer-local 'buffer-offer-save)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
134
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
135 (defcustom find-file-existing-other-name t
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
136 "*Non-nil means find a file under alternative names, in existing buffers.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
137 This means if any existing buffer is visiting the file you want
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
138 under another name, you get the existing buffer instead of a new buffer."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
139 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
140 :group 'find-file)
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
141
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
142 (defcustom find-file-visit-truename nil
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
143 "*Non-nil means visit a file under its truename.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
144 The truename of a file is found by chasing all links
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
145 both at the file level and at the levels of the containing directories."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
146 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
147 :group 'find-file)
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
148
17894
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
149 (defcustom revert-without-query
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
150 nil
16684
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
151 "*Specify which files should be reverted without query.
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
152 The value is a list of regular expressions.
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
153 If the file name matches one of these regular expressions,
17894
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
154 then `revert-buffer' reverts the file without querying
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
155 if the file has changed on disk and you have not edited the buffer."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
156 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
157 :group 'find-file)
16684
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
158
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
159 (defvar buffer-file-number nil
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
160 "The device number and file number of the file visited in the current buffer.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
161 The value is a list of the form (FILENUM DEVNUM).
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
162 This pair of numbers uniquely identifies the file.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
163 If the buffer is visiting a new file, the value is nil.")
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
164 (make-variable-buffer-local 'buffer-file-number)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
165 (put 'buffer-file-number 'permanent-local t)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
166
15329
19008fd7774d (buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents: 15269
diff changeset
167 (defvar buffer-file-numbers-unique (not (memq system-type '(windows-nt)))
19008fd7774d (buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents: 15269
diff changeset
168 "Non-nil means that buffer-file-number uniquely identifies files.")
19008fd7774d (buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents: 15269
diff changeset
169
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
170 (defcustom file-precious-flag nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
171 "*Non-nil means protect against I/O errors while saving files.
12105
ecc3d54df49e (file-precious-flag): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 12068
diff changeset
172 Some modes set this non-nil in particular buffers.
12145
bd3e59a5c0b3 (file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents: 12105
diff changeset
173
bd3e59a5c0b3 (file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents: 12105
diff changeset
174 This feature works by writing the new contents into a temporary file
bd3e59a5c0b3 (file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents: 12105
diff changeset
175 and then renaming the temporary file to replace the original.
bd3e59a5c0b3 (file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents: 12105
diff changeset
176 In this way, any I/O error in writing leaves the original untouched,
bd3e59a5c0b3 (file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents: 12105
diff changeset
177 and there is never any instant where the file is nonexistent.
bd3e59a5c0b3 (file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents: 12105
diff changeset
178
bd3e59a5c0b3 (file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents: 12105
diff changeset
179 Note that this feature forces backups to be made by copying.
12105
ecc3d54df49e (file-precious-flag): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 12068
diff changeset
180 Yet, at the same time, saving a precious file
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
181 breaks any hard links between it and other files."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
182 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
183 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
184
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
185 (defcustom version-control nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
186 "*Control use of version numbers for backup files.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
187 t means make numeric backup versions unconditionally.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
188 nil means make them for files that have some already.
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
189 `never' means do not make them."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
190 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
191 :group 'backup
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
192 :group 'vc)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
193
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
194 (defcustom dired-kept-versions 2
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
195 "*When cleaning directory, number of versions to keep."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
196 :type 'integer
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
197 :group 'backup
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
198 :group 'dired)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
199
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
200 (defcustom delete-old-versions nil
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
201 "*If t, delete excess backup versions silently.
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
202 If nil, ask confirmation. Any other value prevents any trimming."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
203 :type '(choice (const :tag "Delete" t)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
204 (const :tag "Ask" nil)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
205 (sexp :tag "Leave" :format "%t\n" other))
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
206 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
207
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
208 (defcustom kept-old-versions 2
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
209 "*Number of oldest versions to keep when a new numbered backup is made."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
210 :type 'integer
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
211 :group 'backup)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
212
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
213 (defcustom kept-new-versions 2
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
214 "*Number of newest versions to keep when a new numbered backup is made.
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
215 Includes the new backup. Must be > 0"
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
216 :type 'integer
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
217 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
218
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
219 (defcustom require-final-newline nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
220 "*Value of t says silently ensure a file ends in a newline when it is saved.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
221 Non-nil but not t says ask user whether to add a newline when there isn't one.
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
222 nil means don't add newlines."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
223 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
224 :group 'editing-basics)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
225
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
226 (defcustom auto-save-default t
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
227 "*Non-nil says by default do auto-saving of every file-visiting buffer."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
228 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
229 :group 'auto-save)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
230
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
231 (defcustom auto-save-visited-file-name nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
232 "*Non-nil says auto-save a buffer in the file it is visiting, when practical.
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
233 Normally auto-save files are written under other names."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
234 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
235 :group 'auto-save)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
236
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
237 (defcustom save-abbrevs nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
238 "*Non-nil means save word abbrevs too when files are saved.
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
239 Loading an abbrev file sets this to t."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
240 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
241 :group 'abbrev)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
242
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
243 (defcustom find-file-run-dired t
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
244 "*Non-nil says run dired if `find-file' is given the name of a directory."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
245 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
246 :group 'find-file)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
247
1879
c9b4ece292cc (find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents: 1799
diff changeset
248 ;;;It is not useful to make this a local variable.
c9b4ece292cc (find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents: 1799
diff changeset
249 ;;;(put 'find-file-not-found-hooks 'permanent-local t)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
250 (defvar find-file-not-found-hooks nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
251 "List of functions to be called for `find-file' on nonexistent file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
252 These functions are called as soon as the error is detected.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
253 `buffer-file-name' is already set up.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
254 The functions are called in the order given until one of them returns non-nil.")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
255
1879
c9b4ece292cc (find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents: 1799
diff changeset
256 ;;;It is not useful to make this a local variable.
c9b4ece292cc (find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents: 1799
diff changeset
257 ;;;(put 'find-file-hooks 'permanent-local t)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
258 (defvar find-file-hooks nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
259 "List of functions to be called after a buffer is loaded from a file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
260 The buffer's local variables (if any) will have been processed before the
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
261 functions are called.")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
262
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
263 (defvar write-file-hooks nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
264 "List of functions to be called before writing out a buffer to a file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
265 If one of them returns non-nil, the file is considered already written
605
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
266 and the rest are not called.
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
267 These hooks are considered to pertain to the visited file.
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
268 So this list is cleared if you change the visited file name.
14112
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
269
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
270 Don't make this variable buffer-local; instead, use `local-write-file-hooks'.
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
271 See also `write-contents-hooks'.")
4762
5eaa5d4eaaca (local-write-file-hooks): Make this variable buffer-local.
Brian Fox <bfox@gnu.org>
parents: 4735
diff changeset
272 ;;; However, in case someone does make it local...
5eaa5d4eaaca (local-write-file-hooks): Make this variable buffer-local.
Brian Fox <bfox@gnu.org>
parents: 4735
diff changeset
273 (put 'write-file-hooks 'permanent-local t)
2375
94e135f2d64d (local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2335
diff changeset
274
94e135f2d64d (local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2335
diff changeset
275 (defvar local-write-file-hooks nil
94e135f2d64d (local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2335
diff changeset
276 "Just like `write-file-hooks', except intended for per-buffer use.
94e135f2d64d (local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2335
diff changeset
277 The functions in this list are called before the ones in
14112
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
278 `write-file-hooks'.
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
279
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
280 This variable is meant to be used for hooks that have to do with a
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
281 particular visited file. Therefore, it is a permanent local, so that
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
282 changing the major mode does not clear it. However, calling
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
283 `set-visited-file-name' does clear it.")
4762
5eaa5d4eaaca (local-write-file-hooks): Make this variable buffer-local.
Brian Fox <bfox@gnu.org>
parents: 4735
diff changeset
284 (make-variable-buffer-local 'local-write-file-hooks)
5eaa5d4eaaca (local-write-file-hooks): Make this variable buffer-local.
Brian Fox <bfox@gnu.org>
parents: 4735
diff changeset
285 (put 'local-write-file-hooks 'permanent-local t)
605
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
286
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
287 (defvar write-contents-hooks nil
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
288 "List of functions to be called before writing out a buffer to a file.
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
289 If one of them returns non-nil, the file is considered already written
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
290 and the rest are not called.
14112
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
291
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
292 This variable is meant to be used for hooks that pertain to the
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
293 buffer's contents, not to the particular visited file; thus,
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
294 `set-visited-file-name' does not clear this variable; but changing the
14176
5e5779fa54cb (auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14112
diff changeset
295 major mode does clear it.
5e5779fa54cb (auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14112
diff changeset
296
5e5779fa54cb (auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14112
diff changeset
297 This variable automatically becomes buffer-local whenever it is set.
16586
4176f951b342 (write-contents-hooks): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16544
diff changeset
298 If you use `add-hook' to add elements to the list, use nil for the
14176
5e5779fa54cb (auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14112
diff changeset
299 LOCAL argument.
14112
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
300
605
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
301 See also `write-file-hooks'.")
14112
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
302 (make-variable-buffer-local 'write-contents-hooks)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
303
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
304 (defcustom enable-local-variables t
16440
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
305 "*Control use of local variables in files you visit.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
306 The value can be t, nil or something else.
16440
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
307 A value of t means file local variables specifications are obeyed;
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
308 nil means they are ignored; anything else means query.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
309
16440
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
310 The command \\[normal-mode] always obeys file local variable
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
311 specifications and ignores this variable."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
312 :type '(choice (const :tag "Obey" t)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
313 (const :tag "Ignore" nil)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
314 (sexp :tag "Query" :format "%t\n" other))
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
315 :group 'find-file)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
316
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
317 (defcustom enable-local-eval 'maybe
722
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
318 "*Control processing of the \"variable\" `eval' in a file's local variables.
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
319 The value can be t, nil or something else.
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
320 A value of t means obey `eval' variables;
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
321 nil means ignore them; anything else means query.
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
322
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
323 The command \\[normal-mode] always obeys local-variables lists
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
324 and ignores this variable."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
325 :type '(choice (const :tag "Obey" t)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
326 (const :tag "Ignore" nil)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
327 (sexp :tag "Query" :format "%t\n" other))
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
328 :group 'find-file)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
329
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
330 ;; Avoid losing in versions where CLASH_DETECTION is disabled.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
331 (or (fboundp 'lock-buffer)
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
332 (defalias 'lock-buffer 'ignore))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
333 (or (fboundp 'unlock-buffer)
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
334 (defalias 'unlock-buffer 'ignore))
16214
fa8dbed4d40e (file-locked-p): Alias to `ignore' if no file locking.
Richard M. Stallman <rms@gnu.org>
parents: 16187
diff changeset
335 (or (fboundp 'file-locked-p)
fa8dbed4d40e (file-locked-p): Alias to `ignore' if no file locking.
Richard M. Stallman <rms@gnu.org>
parents: 16187
diff changeset
336 (defalias 'file-locked-p 'ignore))
4186
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
337
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
338 ;; This hook function provides support for ange-ftp host name
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
339 ;; completion. It runs the usual ange-ftp hook, but only for
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
340 ;; completion operations. Having this here avoids the need
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
341 ;; to load ange-ftp when it's not really in use.
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
342 (defun ange-ftp-completion-hook-function (op &rest args)
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
343 (if (memq op '(file-name-completion file-name-all-completions))
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
344 (apply 'ange-ftp-hook-function op args)
7142
2b445c15563e (ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents: 7036
diff changeset
345 (let ((inhibit-file-name-handlers
2b445c15563e (ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents: 7036
diff changeset
346 (cons 'ange-ftp-completion-hook-function
2b445c15563e (ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents: 7036
diff changeset
347 (and (eq inhibit-file-name-operation op)
2b445c15563e (ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents: 7036
diff changeset
348 inhibit-file-name-handlers)))
2b445c15563e (ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents: 7036
diff changeset
349 (inhibit-file-name-operation op))
4186
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
350 (apply op args))))
13903
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
351
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
352 (defun convert-standard-filename (filename)
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
353 "Convert a standard file's name to something suitable for the current OS.
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
354 This function's standard definition is trivial; it just returns the argument.
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
355 However, on some systems, the function is redefined
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
356 with a definition that really does change some file names."
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
357 filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
358
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
359 (defun pwd ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
360 "Show the current default directory."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
361 (interactive nil)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
362 (message "Directory %s" default-directory))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
363
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
364 (defvar cd-path nil
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
365 "Value of the CDPATH environment variable, as a list.
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
366 Not actually set up until the first time you you use it.")
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
367
11817
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
368 (defvar path-separator ":"
17894
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
369 "Character used to separate directories in search paths.")
11817
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
370
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
371 (defun parse-colon-path (cd-path)
17894
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
372 "Explode a colon-separated search path into a list of directory names."
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
373 (and cd-path
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
374 (let (cd-prefix cd-list (cd-start 0) cd-colon)
11817
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
375 (setq cd-path (concat cd-path path-separator))
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
376 (while (setq cd-colon (string-match path-separator cd-path cd-start))
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
377 (setq cd-list
3038
4bdac10d920a (cd): Set cd-path to a list.
Richard M. Stallman <rms@gnu.org>
parents: 2896
diff changeset
378 (nconc cd-list
4216
6f940dcec978 (parse-colon-path): Really make nil, not ".", for empty path element.
Richard M. Stallman <rms@gnu.org>
parents: 4196
diff changeset
379 (list (if (= cd-start cd-colon)
6f940dcec978 (parse-colon-path): Really make nil, not ".", for empty path element.
Richard M. Stallman <rms@gnu.org>
parents: 4196
diff changeset
380 nil
6f940dcec978 (parse-colon-path): Really make nil, not ".", for empty path element.
Richard M. Stallman <rms@gnu.org>
parents: 4196
diff changeset
381 (substitute-in-file-name
4196
20f7ea2f83ef (parse-colon-path): Turn empty substring into nil.
Richard M. Stallman <rms@gnu.org>
parents: 4186
diff changeset
382 (file-name-as-directory
20f7ea2f83ef (parse-colon-path): Turn empty substring into nil.
Richard M. Stallman <rms@gnu.org>
parents: 4186
diff changeset
383 (substring cd-path cd-start cd-colon)))))))
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
384 (setq cd-start (+ cd-colon 1)))
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
385 cd-list)))
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
386
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
387 (defun cd-absolute (dir)
3652
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
388 "Change current directory to given absolute file name DIR."
8362
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
389 ;; Put the name into directory syntax now,
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
390 ;; because otherwise expand-file-name may give some bad results.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
391 (if (not (eq system-type 'vax-vms))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
392 (setq dir (file-name-as-directory dir)))
8362
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
393 (setq dir (abbreviate-file-name (expand-file-name dir)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
394 (if (not (file-directory-p dir))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
395 (error "%s is not a directory" dir)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
396 (if (file-executable-p dir)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
397 (setq default-directory dir)
3038
4bdac10d920a (cd): Set cd-path to a list.
Richard M. Stallman <rms@gnu.org>
parents: 2896
diff changeset
398 (error "Cannot cd to %s: Permission denied" dir))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
399
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
400 (defun cd (dir)
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
401 "Make DIR become the current buffer's default directory.
3652
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
402 If your environment includes a `CDPATH' variable, try each one of that
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
403 colon-separated list of directories when resolving a relative directory name."
12719
dde58f45b00a (cd): When reading arg, use just directory as the default.
Richard M. Stallman <rms@gnu.org>
parents: 12591
diff changeset
404 (interactive
dde58f45b00a (cd): When reading arg, use just directory as the default.
Richard M. Stallman <rms@gnu.org>
parents: 12591
diff changeset
405 (list (read-file-name "Change default directory: "
13095
8477c2dca6b0 (cd): Fix interactive spec to require match if there is no CDPATH.
Roland McGrath <roland@gnu.org>
parents: 13091
diff changeset
406 default-directory default-directory
8477c2dca6b0 (cd): Fix interactive spec to require match if there is no CDPATH.
Roland McGrath <roland@gnu.org>
parents: 13091
diff changeset
407 (and (member cd-path '(nil ("./")))
8477c2dca6b0 (cd): Fix interactive spec to require match if there is no CDPATH.
Roland McGrath <roland@gnu.org>
parents: 13091
diff changeset
408 (null (getenv "CDPATH"))))))
3652
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
409 (if (file-name-absolute-p dir)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
410 (cd-absolute (expand-file-name dir))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
411 (if (null cd-path)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
412 (let ((trypath (parse-colon-path (getenv "CDPATH"))))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
413 (setq cd-path (or trypath (list "./")))))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
414 (if (not (catch 'found
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
415 (mapcar
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
416 (function (lambda (x)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
417 (let ((f (expand-file-name (concat x dir))))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
418 (if (file-directory-p f)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
419 (progn
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
420 (cd-absolute f)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
421 (throw 'found t))))))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
422 cd-path)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
423 nil))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
424 (error "No such directory found via CDPATH environment variable"))))
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
425
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
426 (defun load-file (file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
427 "Load the Lisp file named FILE."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
428 (interactive "fLoad file: ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
429 (load (expand-file-name file) nil nil t))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
430
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
431 (defun load-library (library)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
432 "Load the library named LIBRARY.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
433 This is an interface to the function `load'."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
434 (interactive "sLoad library: ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
435 (load library))
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
436
7036
b5a68d0dd099 Delete misplaced comment.
Karl Heuer <kwzh@gnu.org>
parents: 7030
diff changeset
437 (defun file-local-copy (file &optional buffer)
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
438 "Copy the file FILE into a temporary file on this machine.
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
439 Returns the name of the local copy, or nil, if FILE is directly
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
440 accessible."
7030
9e51b51e8595 Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents: 6899
diff changeset
441 (let ((handler (find-file-name-handler file 'file-local-copy)))
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
442 (if handler
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
443 (funcall handler 'file-local-copy file)
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
444 nil)))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
445
8148
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
446 (defun file-truename (filename &optional counter prev-dirs)
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
447 "Return the truename of FILENAME, which should be absolute.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
448 The truename of a file name is found by chasing symbolic links
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
449 both at the level of the file and at the level of the directories
8148
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
450 containing it, until no links are left at any level.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
451
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
452 The arguments COUNTER and PREV-DIRS are used only in recursive calls.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
453 Do not specify them in other calls."
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
454 ;; COUNTER can be a cons cell whose car is the count of how many more links
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
455 ;; to chase before getting an error.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
456 ;; PREV-DIRS can be a cons cell whose car is an alist
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
457 ;; of truenames we've just recently computed.
12202
0bd2831dff40 Test for "" too; let it go to expand-file-name if it is equal.
Simon Marshall <simon@gnu.org>
parents: 12145
diff changeset
458
0bd2831dff40 Test for "" too; let it go to expand-file-name if it is equal.
Simon Marshall <simon@gnu.org>
parents: 12145
diff changeset
459 ;; The last test looks dubious, maybe `+' is meant here? --simon.
0bd2831dff40 Test for "" too; let it go to expand-file-name if it is equal.
Simon Marshall <simon@gnu.org>
parents: 12145
diff changeset
460 (if (or (string= filename "") (string= filename "~")
4965
dad86ab54e36 (find-backup-file-name): Don't fatal-error on
Richard M. Stallman <rms@gnu.org>
parents: 4847
diff changeset
461 (and (string= (substring filename 0 1) "~")
dad86ab54e36 (find-backup-file-name): Don't fatal-error on
Richard M. Stallman <rms@gnu.org>
parents: 4847
diff changeset
462 (string-match "~[^/]*" filename)))
2613
709f672f450e (find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2600
diff changeset
463 (progn
709f672f450e (find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2600
diff changeset
464 (setq filename (expand-file-name filename))
709f672f450e (find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2600
diff changeset
465 (if (string= filename "")
709f672f450e (find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2600
diff changeset
466 (setq filename "/"))))
8148
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
467 (or counter (setq counter (list 100)))
8374
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
468 (let (done
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
469 ;; For speed, remove the ange-ftp completion handler from the list.
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
470 ;; We know it's not needed here.
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
471 ;; For even more speed, do this only on the outermost call.
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
472 (file-name-handler-alist
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
473 (if prev-dirs file-name-handler-alist
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
474 (let ((tem (copy-sequence file-name-handler-alist)))
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
475 (delq (rassq 'ange-ftp-completion-hook-function tem) tem)))))
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
476 (or prev-dirs (setq prev-dirs (list nil)))
8148
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
477 ;; If this file directly leads to a link, process that iteratively
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
478 ;; so that we don't use lots of stack.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
479 (while (not done)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
480 (setcar counter (1- (car counter)))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
481 (if (< (car counter) 0)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
482 (error "Apparent cycle of symbolic links for %s" filename))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
483 (let ((handler (find-file-name-handler filename 'file-truename)))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
484 ;; For file name that has a special handler, call handler.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
485 ;; This is so that ange-ftp can save time by doing a no-op.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
486 (if handler
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
487 (setq filename (funcall handler 'file-truename filename)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
488 done t)
9234
da491f38518c (file-truename): If name has no dir, use default-directory.
Richard M. Stallman <rms@gnu.org>
parents: 9212
diff changeset
489 (let ((dir (or (file-name-directory filename) default-directory))
8148
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
490 target dirfile)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
491 ;; Get the truename of the directory.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
492 (setq dirfile (directory-file-name dir))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
493 ;; If these are equal, we have the (or a) root directory.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
494 (or (string= dir dirfile)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
495 ;; If this is the same dir we last got the truename for,
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
496 ;; save time--don't recalculate.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
497 (if (assoc dir (car prev-dirs))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
498 (setq dir (cdr (assoc dir (car prev-dirs))))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
499 (let ((old dir)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
500 (new (file-name-as-directory (file-truename dirfile counter prev-dirs))))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
501 (setcar prev-dirs (cons (cons old new) (car prev-dirs)))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
502 (setq dir new))))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
503 (if (equal ".." (file-name-nondirectory filename))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
504 (setq filename
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
505 (directory-file-name (file-name-directory (directory-file-name dir)))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
506 done t)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
507 (if (equal "." (file-name-nondirectory filename))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
508 (setq filename (directory-file-name dir)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
509 done t)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
510 ;; Put it back on the file name.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
511 (setq filename (concat dir (file-name-nondirectory filename)))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
512 ;; Is the file name the name of a link?
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
513 (setq target (file-symlink-p filename))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
514 (if target
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
515 ;; Yes => chase that link, then start all over
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
516 ;; since the link may point to a directory name that uses links.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
517 ;; We can't safely use expand-file-name here
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
518 ;; since target might look like foo/../bar where foo
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
519 ;; is itself a link. Instead, we handle . and .. above.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
520 (setq filename
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
521 (if (file-name-absolute-p target)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
522 target
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
523 (concat dir target))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
524 done nil)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
525 ;; No, we are done!
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
526 (setq done t))))))))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
527 filename))
1672
ecf43116a845 The find-file-name-handler function in ../src/fileio.c is now
Jim Blandy <jimb@redhat.com>
parents: 1537
diff changeset
528
3260
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
529 (defun file-chase-links (filename)
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
530 "Chase links in FILENAME until a name that is not a link.
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
531 Does not examine containing directories for links,
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
532 unlike `file-truename'."
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
533 (let (tem (count 100) (newname filename))
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
534 (while (setq tem (file-symlink-p newname))
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
535 (if (= count 0)
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
536 (error "Apparent cycle of symbolic links for %s" filename))
7430
1ec8830e553c (file-chase-links): Delete redundant slashes.
Karl Heuer <kwzh@gnu.org>
parents: 7422
diff changeset
537 ;; In the context of a link, `//' doesn't mean what Emacs thinks.
1ec8830e553c (file-chase-links): Delete redundant slashes.
Karl Heuer <kwzh@gnu.org>
parents: 7422
diff changeset
538 (while (string-match "//+" tem)
1ec8830e553c (file-chase-links): Delete redundant slashes.
Karl Heuer <kwzh@gnu.org>
parents: 7422
diff changeset
539 (setq tem (concat (substring tem 0 (1+ (match-beginning 0)))
1ec8830e553c (file-chase-links): Delete redundant slashes.
Karl Heuer <kwzh@gnu.org>
parents: 7422
diff changeset
540 (substring tem (match-end 0)))))
3263
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
541 ;; Handle `..' by hand, since it needs to work in the
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
542 ;; target of any directory symlink.
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
543 ;; This code is not quite complete; it does not handle
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
544 ;; embedded .. in some cases such as ./../foo and foo/bar/../../../lose.
7430
1ec8830e553c (file-chase-links): Delete redundant slashes.
Karl Heuer <kwzh@gnu.org>
parents: 7422
diff changeset
545 (while (string-match "\\`\\.\\./" tem)
3263
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
546 (setq tem (substring tem 3))
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
547 (setq newname (file-name-as-directory
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
548 ;; Do the .. by hand.
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
549 (directory-file-name
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
550 (file-name-directory
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
551 ;; Chase links in the default dir of the symlink.
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
552 (file-chase-links
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
553 (directory-file-name
82b564084ce6 (file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents: 3260
diff changeset
554 (file-name-directory newname))))))))
3260
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
555 (setq newname (expand-file-name tem (file-name-directory newname)))
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
556 (setq count (1- count)))
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
557 newname))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
558
16831
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
559 (defun switch-to-buffer-other-window (buffer &optional norecord)
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
560 "Select buffer BUFFER in another window.
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
561 Optional second arg NORECORD non-nil means
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
562 do not put this buffer at the front of the list of recently selected ones."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
563 (interactive "BSwitch to buffer in other window: ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
564 (let ((pop-up-windows t))
16831
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
565 (pop-to-buffer buffer t norecord)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
566
16831
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
567 (defun switch-to-buffer-other-frame (buffer &optional norecord)
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
568 "Switch to buffer BUFFER in another frame.
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
569 Optional second arg NORECORD non-nil means
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
570 do not put this buffer at the front of the list of recently selected ones."
778
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
571 (interactive "BSwitch to buffer in other frame: ")
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
572 (let ((pop-up-frames t))
16831
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
573 (pop-to-buffer buffer t norecord)
8165
02ee07034f11 (switch-to-buffer-other-frame): Raise the frame.
Richard M. Stallman <rms@gnu.org>
parents: 8160
diff changeset
574 (raise-frame (window-frame (selected-window)))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
575
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
576 (defun find-file (filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
577 "Edit file FILENAME.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
578 Switch to a buffer visiting file FILENAME,
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
579 creating one if none already exists."
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
580 (interactive "FFind file: ")
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
581 (switch-to-buffer (find-file-noselect filename)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
582
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
583 (defun find-file-other-window (filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
584 "Edit file FILENAME, in another window.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
585 May create a new window, or reuse an existing one.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
586 See the function `display-buffer'."
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
587 (interactive "FFind file in other window: ")
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
588 (switch-to-buffer-other-window (find-file-noselect filename)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
589
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
590 (defun find-file-other-frame (filename)
778
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
591 "Edit file FILENAME, in another frame.
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
592 May create a new frame, or reuse an existing one.
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
593 See the function `display-buffer'."
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
594 (interactive "FFind file in other frame: ")
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
595 (switch-to-buffer-other-frame (find-file-noselect filename)))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
596
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
597 (defun find-file-read-only (filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
598 "Edit file FILENAME but don't allow changes.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
599 Like \\[find-file] but marks buffer as read-only.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
600 Use \\[toggle-read-only] to permit editing."
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
601 (interactive "fFind file read-only: ")
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
602 (find-file filename)
3280
3b3717164db0 (find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3263
diff changeset
603 (setq buffer-read-only t)
3b3717164db0 (find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3263
diff changeset
604 (current-buffer))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
605
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
606 (defun find-file-read-only-other-window (filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
607 "Edit file FILENAME in another window but don't allow changes.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
608 Like \\[find-file-other-window] but marks buffer as read-only.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
609 Use \\[toggle-read-only] to permit editing."
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
610 (interactive "fFind file read-only other window: ")
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
611 (find-file-other-window filename)
3280
3b3717164db0 (find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3263
diff changeset
612 (setq buffer-read-only t)
3b3717164db0 (find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3263
diff changeset
613 (current-buffer))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
614
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
615 (defun find-file-read-only-other-frame (filename)
778
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
616 "Edit file FILENAME in another frame but don't allow changes.
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
617 Like \\[find-file-other-frame] but marks buffer as read-only.
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
618 Use \\[toggle-read-only] to permit editing."
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
619 (interactive "fFind file read-only other frame: ")
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
620 (find-file-other-frame filename)
3280
3b3717164db0 (find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3263
diff changeset
621 (setq buffer-read-only t)
3b3717164db0 (find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3263
diff changeset
622 (current-buffer))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
623
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
624 (defun find-alternate-file-other-window (filename)
13182
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
625 "Find file FILENAME as a replacement for the file in the next window.
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
626 This command does not select that window."
13182
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
627 (interactive
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
628 (save-selected-window
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
629 (other-window 1)
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
630 (let ((file buffer-file-name)
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
631 (file-name nil)
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
632 (file-dir nil))
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
633 (and file
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
634 (setq file-name (file-name-nondirectory file)
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
635 file-dir (file-name-directory file)))
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
636 (list (read-file-name
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
637 "Find alternate file: " file-dir nil nil file-name)))))
13182
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
638 (if (one-window-p)
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
639 (find-file-other-window filename)
13182
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
640 (save-selected-window
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
641 (other-window 1)
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
642 (find-alternate-file filename))))
13182
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
643
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
644 (defun find-alternate-file (filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
645 "Find file FILENAME, select its buffer, kill previous buffer.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
646 If the current buffer now contains an empty file that you just visited
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
647 \(presumably by mistake), use this command to visit the file you really want."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
648 (interactive
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
649 (let ((file buffer-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
650 (file-name nil)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
651 (file-dir nil))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
652 (and file
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
653 (setq file-name (file-name-nondirectory file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
654 file-dir (file-name-directory file)))
941
eb8a7ea2798e *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 909
diff changeset
655 (list (read-file-name
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
656 "Find alternate file: " file-dir nil nil file-name))))
9048
dc5a9c83dc35 (find-alternate-file): Confirm killing buffer only if it is visiting a file.
Richard M. Stallman <rms@gnu.org>
parents: 8987
diff changeset
657 (and (buffer-modified-p) (buffer-file-name)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
658 ;; (not buffer-read-only)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
659 (not (yes-or-no-p (format "Buffer %s is modified; kill anyway? "
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
660 (buffer-name))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
661 (error "Aborted"))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
662 (let ((obuf (current-buffer))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
663 (ofile buffer-file-name)
3191
d96fd9315996 (find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents: 3151
diff changeset
664 (onum buffer-file-number)
d96fd9315996 (find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents: 3151
diff changeset
665 (otrue buffer-file-truename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
666 (oname (buffer-name)))
13037
3946c18462c8 (find-alternate-file): Kill any preexisting ` **lose**' buf.
Richard M. Stallman <rms@gnu.org>
parents: 13032
diff changeset
667 (if (get-buffer " **lose**")
3946c18462c8 (find-alternate-file): Kill any preexisting ` **lose**' buf.
Richard M. Stallman <rms@gnu.org>
parents: 13032
diff changeset
668 (kill-buffer " **lose**"))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
669 (rename-buffer " **lose**")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
670 (unwind-protect
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
671 (progn
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
672 (unlock-buffer)
15410
559d91fe836a (find-alternate-file): Don't clear buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents: 15365
diff changeset
673 (setq buffer-file-name nil)
559d91fe836a (find-alternate-file): Don't clear buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents: 15365
diff changeset
674 (setq buffer-file-number nil)
559d91fe836a (find-alternate-file): Don't clear buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents: 15365
diff changeset
675 (setq buffer-file-truename nil)
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
676 (find-file filename))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
677 (cond ((eq obuf (current-buffer))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
678 (setq buffer-file-name ofile)
3191
d96fd9315996 (find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents: 3151
diff changeset
679 (setq buffer-file-number onum)
d96fd9315996 (find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents: 3151
diff changeset
680 (setq buffer-file-truename otrue)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
681 (lock-buffer)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
682 (rename-buffer oname))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
683 (or (eq (current-buffer) obuf)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
684 (kill-buffer obuf))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
685
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
686 (defun create-file-buffer (filename)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
687 "Create a suitably named buffer for visiting FILENAME, and return it.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
688 FILENAME (sans directory) is used unchanged if that name is free;
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
689 otherwise a string <2> or <3> or ... is appended to get an unused name."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
690 (let ((lastname (file-name-nondirectory filename)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
691 (if (string= lastname "")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
692 (setq lastname filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
693 (generate-new-buffer lastname)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
694
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
695 (defun generate-new-buffer (name)
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
696 "Create and return a buffer with a name based on NAME.
1461
1905025a8709 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 1453
diff changeset
697 Choose the buffer's name using `generate-new-buffer-name'."
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
698 (get-buffer-create (generate-new-buffer-name name)))
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
699
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
700 (defvar automount-dir-prefix "^/tmp_mnt/"
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
701 "Regexp to match the automounter prefix in a directory name.")
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
702
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
703 (defvar abbreviated-home-dir nil
4847
e7d8cfd205d4 (abbreviated-home-dir): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4837
diff changeset
704 "The user's homedir abbreviated according to `directory-abbrev-list'.")
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
705
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
706 (defun abbreviate-file-name (filename)
1461
1905025a8709 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 1453
diff changeset
707 "Return a version of FILENAME shortened using `directory-abbrev-alist'.
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
708 This also substitutes \"~\" for the user's home directory.
1461
1905025a8709 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 1453
diff changeset
709 Type \\[describe-variable] directory-abbrev-alist RET for more information."
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
710 ;; Get rid of the prefixes added by the automounter.
15548
ec7e7b99c680 (abbreviate-file-name): Ignore automount-dir-prefix if nil.
Richard M. Stallman <rms@gnu.org>
parents: 15545
diff changeset
711 (if (and automount-dir-prefix
ec7e7b99c680 (abbreviate-file-name): Ignore automount-dir-prefix if nil.
Richard M. Stallman <rms@gnu.org>
parents: 15545
diff changeset
712 (string-match automount-dir-prefix filename)
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
713 (file-exists-p (file-name-directory
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
714 (substring filename (1- (match-end 0))))))
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
715 (setq filename (substring filename (1- (match-end 0)))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
716 (let ((tail directory-abbrev-alist))
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
717 ;; If any elt of directory-abbrev-alist matches this name,
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
718 ;; abbreviate accordingly.
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
719 (while tail
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
720 (if (string-match (car (car tail)) filename)
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
721 (setq filename
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
722 (concat (cdr (car tail)) (substring filename (match-end 0)))))
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
723 (setq tail (cdr tail)))
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
724 ;; Compute and save the abbreviated homedir name.
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
725 ;; We defer computing this until the first time it's needed, to
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
726 ;; give time for directory-abbrev-alist to be set properly.
3624
386094c1a569 (abbreviate-file-name): Make abbreviated-home-dir
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
727 ;; We include a slash at the end, to avoid spurious matches
386094c1a569 (abbreviate-file-name): Make abbreviated-home-dir
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
728 ;; such as `/usr/foobar' when the home dir is `/usr/foo'.
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
729 (or abbreviated-home-dir
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
730 (setq abbreviated-home-dir
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
731 (let ((abbreviated-home-dir "$foo"))
3709
09e961c82be8 (abbreviate-file-name): Match home dir with no / if nothing else follows.
Richard M. Stallman <rms@gnu.org>
parents: 3672
diff changeset
732 (concat "^" (abbreviate-file-name (expand-file-name "~"))
09e961c82be8 (abbreviate-file-name): Match home dir with no / if nothing else follows.
Richard M. Stallman <rms@gnu.org>
parents: 3672
diff changeset
733 "\\(/\\|$\\)"))))
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
734
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
735 ;; If FILENAME starts with the abbreviated homedir,
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
736 ;; make it start with `~' instead.
5582
cc4892ee6807 (abbreviate-file-name): Don't convert / to ~/ when the home dir is /.
Richard M. Stallman <rms@gnu.org>
parents: 5468
diff changeset
737 (if (and (string-match abbreviated-home-dir filename)
cc4892ee6807 (abbreviate-file-name): Don't convert / to ~/ when the home dir is /.
Richard M. Stallman <rms@gnu.org>
parents: 5468
diff changeset
738 ;; If the home dir is just /, don't change it.
cc4892ee6807 (abbreviate-file-name): Don't convert / to ~/ when the home dir is /.
Richard M. Stallman <rms@gnu.org>
parents: 5468
diff changeset
739 (not (and (= (match-end 0) 1)
7440
1c0885a92832 (abbreviate-file-name): Add special case for ms-dos.
Richard M. Stallman <rms@gnu.org>
parents: 7430
diff changeset
740 (= (aref filename 0) ?/)))
13903
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
741 ;; MS-DOS root directories can come with a drive letter;
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
742 ;; Novell Netware allows drive letters beyond `Z:'.
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
743 (not (and (or (eq system-type 'ms-dos)
9777
178a3bf170f3 (abbreviate-file-name): Handle drive letters on windows-nt as on ms-dos.
Richard M. Stallman <rms@gnu.org>
parents: 9731
diff changeset
744 (eq system-type 'windows-nt))
7440
1c0885a92832 (abbreviate-file-name): Add special case for ms-dos.
Richard M. Stallman <rms@gnu.org>
parents: 7430
diff changeset
745 (save-match-data
13903
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
746 (string-match "^[a-zA-`]:/$" filename)))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
747 (setq filename
2630
47cf3a387530 * files.el (insert-directory): Undo change of March 23;
Jim Blandy <jimb@redhat.com>
parents: 2622
diff changeset
748 (concat "~"
3709
09e961c82be8 (abbreviate-file-name): Match home dir with no / if nothing else follows.
Richard M. Stallman <rms@gnu.org>
parents: 3672
diff changeset
749 (substring filename (match-beginning 1) (match-end 1))
2630
47cf3a387530 * files.el (insert-directory): Undo change of March 23;
Jim Blandy <jimb@redhat.com>
parents: 2622
diff changeset
750 (substring filename (match-end 0)))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
751 filename))
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
752
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
753 (defcustom find-file-not-true-dirname-list nil
2622
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
754 "*List of logical names for which visiting shouldn't save the true dirname.
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
755 On VMS, when you visit a file using a logical name that searches a path,
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
756 you may or may not want the visited file name to record the specific
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
757 directory where the file was found. If you *do not* want that, add the logical
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
758 name to this list as a string."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
759 :type '(repeat (string :tag "Name"))
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
760 :group 'find-file)
2622
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
761
6265
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
762 (defun find-buffer-visiting (filename)
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
763 "Return the buffer visiting file FILENAME (a string).
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
764 This is like `get-file-buffer', except that it checks for any buffer
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
765 visiting the same file, possibly under a different name.
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
766 If there is no such live buffer, return nil."
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
767 (let ((buf (get-file-buffer filename))
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
768 (truename (abbreviate-file-name (file-truename filename))))
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
769 (or buf
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
770 (let ((list (buffer-list)) found)
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
771 (while (and (not found) list)
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
772 (save-excursion
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
773 (set-buffer (car list))
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
774 (if (and buffer-file-name
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
775 (string= buffer-file-truename truename))
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
776 (setq found (car list))))
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
777 (setq list (cdr list)))
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
778 found)
6272
d19db87b8c8e (find-buffer-visiting): Fix typo in previous change.
Karl Heuer <kwzh@gnu.org>
parents: 6265
diff changeset
779 (let ((number (nthcdr 10 (file-attributes truename)))
6265
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
780 (list (buffer-list)) found)
15329
19008fd7774d (buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents: 15269
diff changeset
781 (and buffer-file-numbers-unique
19008fd7774d (buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents: 15269
diff changeset
782 number
6294
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
783 (while (and (not found) list)
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
784 (save-excursion
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
785 (set-buffer (car list))
6866
47bed999969a (find-buffer-visiting): Don't check buffer-file-number
Richard M. Stallman <rms@gnu.org>
parents: 6780
diff changeset
786 (if (and buffer-file-name
47bed999969a (find-buffer-visiting): Don't check buffer-file-number
Richard M. Stallman <rms@gnu.org>
parents: 6780
diff changeset
787 (equal buffer-file-number number)
6294
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
788 ;; Verify this buffer's file number
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
789 ;; still belongs to its file.
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
790 (file-exists-p buffer-file-name)
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
791 (equal (nthcdr 10 (file-attributes buffer-file-name))
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
792 number))
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
793 (setq found (car list))))
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
794 (setq list (cdr list))))
6265
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
795 found))))
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
796
12850
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
797 (defun insert-file-contents-literally (filename &optional visit beg end replace)
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
798 "Like `insert-file-contents', q.v., but only reads in the file.
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
799 A buffer may be modified in several ways after reading into the buffer due
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
800 to advanced Emacs features, such as file-name-handlers, format decoding,
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
801 find-file-hooks, etc.
16334
5c4b76c66de2 (auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents: 16214
diff changeset
802 This function ensures that none of these modifications will take place.
5c4b76c66de2 (auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents: 16214
diff changeset
803
5c4b76c66de2 (auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents: 16214
diff changeset
804 This function does not work for remote files, because it turns off
5c4b76c66de2 (auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents: 16214
diff changeset
805 file name handlers and remote file access uses a file name handler."
12850
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
806 (let ((file-name-handler-alist nil)
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
807 (format-alist nil)
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
808 (after-insert-file-functions nil)
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
809 (find-buffer-file-type-function
12850
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
810 (if (fboundp 'find-buffer-file-type)
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
811 (symbol-function 'find-buffer-file-type)
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
812 nil)))
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
813 (unwind-protect
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
814 (progn
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
815 (fset 'find-buffer-file-type (lambda (filename) t))
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
816 (insert-file-contents filename visit beg end replace))
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
817 (if find-buffer-file-type-function
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
818 (fset 'find-buffer-file-type find-buffer-file-type-function)
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
819 (fmakunbound 'find-buffer-file-type)))))
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
820
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
821 (defun find-file-noselect (filename &optional nowarn rawfile)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
822 "Read file FILENAME into a buffer and return the buffer.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
823 If a buffer exists visiting FILENAME, return that one, but
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
824 verify that the file has not changed since visited or saved.
17004
cd1d930a2c98 (find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents: 16976
diff changeset
825 The buffer is not selected, just returned to the caller.
cd1d930a2c98 (find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents: 16976
diff changeset
826 Optional first arg NOWARN non-nil means suppress any warning messages.
cd1d930a2c98 (find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents: 16976
diff changeset
827 Optional second arg RAWFILE non-nil means the file is read literally"
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
828 (setq filename
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
829 (abbreviate-file-name
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
830 (expand-file-name filename)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
831 (if (file-directory-p filename)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
832 (if find-file-run-dired
13497
156eb7abebbd (find-file-noselect): Respect the value of
Karl Heuer <kwzh@gnu.org>
parents: 13496
diff changeset
833 (dired-noselect (if find-file-visit-truename
156eb7abebbd (find-file-noselect): Respect the value of
Karl Heuer <kwzh@gnu.org>
parents: 13496
diff changeset
834 (abbreviate-file-name (file-truename filename))
156eb7abebbd (find-file-noselect): Respect the value of
Karl Heuer <kwzh@gnu.org>
parents: 13496
diff changeset
835 filename))
14287
6cf50a9ff10f (find-file-noselect): Fix error message style.
Karl Heuer <kwzh@gnu.org>
parents: 14229
diff changeset
836 (error "%s is a directory" filename))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
837 (let* ((buf (get-file-buffer filename))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
838 (truename (abbreviate-file-name (file-truename filename)))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
839 (number (nthcdr 10 (file-attributes truename)))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
840 ;; Find any buffer for a file which has same truename.
6265
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
841 (other (and (not buf) (find-buffer-visiting filename)))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
842 error)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
843 ;; Let user know if there is a buffer with the same truename.
6265
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
844 (if other
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
845 (progn
7422
49876b60d0c6 (find-file-noselect): Suppress same-file warning if
Richard M. Stallman <rms@gnu.org>
parents: 7217
diff changeset
846 (or nowarn
49876b60d0c6 (find-file-noselect): Suppress same-file warning if
Richard M. Stallman <rms@gnu.org>
parents: 7217
diff changeset
847 (string-equal filename (buffer-file-name other))
49876b60d0c6 (find-file-noselect): Suppress same-file warning if
Richard M. Stallman <rms@gnu.org>
parents: 7217
diff changeset
848 (message "%s and %s are the same file"
49876b60d0c6 (find-file-noselect): Suppress same-file warning if
Richard M. Stallman <rms@gnu.org>
parents: 7217
diff changeset
849 filename (buffer-file-name other)))
6265
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
850 ;; Optionally also find that buffer.
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
851 (if (or find-file-existing-other-name find-file-visit-truename)
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
852 (setq buf other))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
853 (if buf
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
854 (or nowarn
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
855 (verify-visited-file-modtime buf)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
856 (cond ((not (file-exists-p filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
857 (error "File %s no longer exists!" filename))
16684
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
858 ;; Certain files should be reverted automatically
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
859 ;; if they have changed on disk and not in the buffer.
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
860 ((and (not (buffer-modified-p buf))
17894
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
861 (let ((tail revert-without-query)
16684
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
862 (found nil))
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
863 (while tail
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
864 (if (string-match (car tail) filename)
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
865 (setq found t))
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
866 (setq tail (cdr tail)))
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
867 found))
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
868 (with-current-buffer buf
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
869 (message "Reverting file %s..." filename)
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
870 (revert-buffer t t)
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
871 (message "Reverting file %s...done" filename)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
872 ((yes-or-no-p
11981
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
873 (if (string= (file-name-nondirectory filename)
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
874 (buffer-name buf))
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
875 (format
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
876 (if (buffer-modified-p buf)
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
877 "File %s changed on disk. Discard your edits? "
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
878 "File %s changed on disk. Reread from disk? ")
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
879 (file-name-nondirectory filename))
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
880 (format
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
881 (if (buffer-modified-p buf)
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
882 "File %s changed on disk. Discard your edits in %s? "
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
883 "File %s changed on disk. Reread from disk into %s? ")
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
884 (file-name-nondirectory filename)
405d4e500223 (find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents: 11867
diff changeset
885 (buffer-name buf))))
16684
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
886 (with-current-buffer buf
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
887 (revert-buffer t t)))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
888 (save-excursion
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
889 ;;; The truename stuff makes this obsolete.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
890 ;;; (let* ((link-name (car (file-attributes filename)))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
891 ;;; (linked-buf (and (stringp link-name)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
892 ;;; (get-file-buffer link-name))))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
893 ;;; (if (bufferp linked-buf)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
894 ;;; (message "Symbolic link to file in buffer %s"
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
895 ;;; (buffer-name linked-buf))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
896 (setq buf (create-file-buffer filename))
9731
2fbc8ef9ff44 (find-file-noselect): Call set-buffer-major-mode here.
Karl Heuer <kwzh@gnu.org>
parents: 9683
diff changeset
897 (set-buffer-major-mode buf)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
898 (set-buffer buf)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
899 (erase-buffer)
12850
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
900 (if rawfile
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
901 (condition-case ()
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
902 (insert-file-contents-literally filename t)
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
903 (file-error
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
904 ;; Unconditionally set error
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
905 (setq error t)))
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
906 (condition-case ()
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
907 (insert-file-contents filename t)
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
908 (file-error
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
909 ;; Run find-file-not-found-hooks until one returns non-nil.
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
910 (or (run-hook-with-args-until-success 'find-file-not-found-hooks)
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
911 ;; If they fail too, set error.
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
912 (setq error t)))))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
913 ;; Find the file's truename, and maybe use that as visited name.
6265
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
914 (setq buffer-file-truename truename)
2622
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
915 (setq buffer-file-number number)
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
916 ;; On VMS, we may want to remember which directory in a search list
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
917 ;; the file was found in.
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
918 (and (eq system-type 'vax-vms)
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
919 (let (logical)
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
920 (if (string-match ":" (file-name-directory filename))
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
921 (setq logical (substring (file-name-directory filename)
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
922 0 (match-beginning 0))))
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
923 (not (member logical find-file-not-true-dirname-list)))
15cb6ba42da3 (find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2613
diff changeset
924 (setq buffer-file-name buffer-file-truename))
2613
709f672f450e (find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2600
diff changeset
925 (if find-file-visit-truename
3151
923f5564a2a1 (find-file-noselect): Expand buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents: 3122
diff changeset
926 (setq buffer-file-name
923f5564a2a1 (find-file-noselect): Expand buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents: 3122
diff changeset
927 (setq filename
923f5564a2a1 (find-file-noselect): Expand buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents: 3122
diff changeset
928 (expand-file-name buffer-file-truename))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
929 ;; Set buffer's default directory to that of the file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
930 (setq default-directory (file-name-directory filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
931 ;; Turn off backup files for certain file names. Since
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
932 ;; this is a permanent local, the major mode won't eliminate it.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
933 (and (not (funcall backup-enable-predicate buffer-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
934 (progn
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
935 (make-local-variable 'backup-inhibited)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
936 (setq backup-inhibited t)))
12850
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
937 (if rawfile
0948f5af4680 (insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12846
diff changeset
938 nil
14636
2edced5a8756 (find-file-noselect): If after-find-file switches buffers,
Karl Heuer <kwzh@gnu.org>
parents: 14598
diff changeset
939 (after-find-file error (not nowarn))
2edced5a8756 (find-file-noselect): If after-find-file switches buffers,
Karl Heuer <kwzh@gnu.org>
parents: 14598
diff changeset
940 (setq buf (current-buffer)))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
941 buf)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
942
8650
deb008af7049 (after-find-file-from-revert-buffer): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 8618
diff changeset
943 (defvar after-find-file-from-revert-buffer nil)
deb008af7049 (after-find-file-from-revert-buffer): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 8618
diff changeset
944
8556
04a87d0e4a62 (after-find-file): New arg renamed to after-find-file-from-revert-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 8554
diff changeset
945 (defun after-find-file (&optional error warn noauto
13857
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
946 after-find-file-from-revert-buffer
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
947 nomodes)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
948 "Called after finding a file and by the default revert function.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
949 Sets buffer mode, parses local variables.
1212
de70f50101c0 (after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents: 1182
diff changeset
950 Optional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
951 error in reading the file. WARN non-nil means warn if there
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
952 exists an auto-save file more recent than the visited file.
1212
de70f50101c0 (after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents: 1182
diff changeset
953 NOAUTO means don't mess with auto-save mode.
8556
04a87d0e4a62 (after-find-file): New arg renamed to after-find-file-from-revert-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 8554
diff changeset
954 Fourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER non-nil
04a87d0e4a62 (after-find-file): New arg renamed to after-find-file-from-revert-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 8554
diff changeset
955 means this call was from `revert-buffer'.
13857
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
956 Fifth arg NOMODES non-nil means don't alter the file's modes.
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
957 Finishes by calling the functions in `find-file-hooks'
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
958 unless NOMODES is non-nil."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
959 (setq buffer-read-only (not (file-writable-p buffer-file-name)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
960 (if noninteractive
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
961 nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
962 (let* (not-serious
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
963 (msg
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
964 (cond ((and error (file-attributes buffer-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
965 (setq buffer-read-only t)
4466
9d62b3cb7dd6 (after-find-file): Improve warning message about
Richard M. Stallman <rms@gnu.org>
parents: 4375
diff changeset
966 "File exists, but cannot be read.")
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
967 ((not buffer-read-only)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
968 (if (and warn
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
969 (file-newer-than-file-p (make-auto-save-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
970 buffer-file-name))
15050
7cc3bad1b93e (after-find-file): Mention file name in "auto save is newer" message.
Richard M. Stallman <rms@gnu.org>
parents: 15010
diff changeset
971 (format "%s has auto save data; consider M-x recover-file"
7cc3bad1b93e (after-find-file): Mention file name in "auto save is newer" message.
Richard M. Stallman <rms@gnu.org>
parents: 15010
diff changeset
972 (file-name-nondirectory buffer-file-name))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
973 (setq not-serious t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
974 (if error "(New file)" nil)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
975 ((not error)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
976 (setq not-serious t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
977 "Note: file is write protected")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
978 ((file-attributes (directory-file-name default-directory))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
979 "File not found and directory write-protected")
1537
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
980 ((file-exists-p (file-name-directory buffer-file-name))
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
981 (setq buffer-read-only nil))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
982 (t
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
983 (setq buffer-read-only nil)
1537
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
984 (if (file-exists-p (file-name-directory (directory-file-name (file-name-directory buffer-file-name))))
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
985 "Use M-x make-dir RET RET to create the directory"
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
986 "Use C-u M-x make-dir RET RET to create directory and its parents")))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
987 (if msg
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
988 (progn
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
989 (message msg)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
990 (or not-serious (sit-for 1 nil t)))))
1212
de70f50101c0 (after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents: 1182
diff changeset
991 (if (and auto-save-default (not noauto))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
992 (auto-save-mode t)))
13857
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
993 (if nomodes
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
994 nil
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
995 (normal-mode t)
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
996 (run-hooks 'find-file-hooks)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
997
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
998 (defun normal-mode (&optional find-file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
999 "Choose the major mode for this buffer automatically.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1000 Also sets up any specified local variables of the file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1001 Uses the visited file name, the -*- line, and the local variables spec.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1002
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1003 This function is called automatically from `find-file'. In that case,
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1004 we may set up specified local variables depending on the value of
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1005 `enable-local-variables': if it is t, we do; if it is nil, we don't;
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1006 otherwise, we query. `enable-local-variables' is ignored if you
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1007 run `normal-mode' explicitly."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1008 (interactive)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1009 (or find-file (funcall (or default-major-mode 'fundamental-mode)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1010 (condition-case err
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1011 (set-auto-mode)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1012 (error (message "File mode specification error: %s"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1013 (prin1-to-string err))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1014 (condition-case err
566
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1015 (let ((enable-local-variables (or (not find-file)
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1016 enable-local-variables)))
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1017 (hack-local-variables))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1018 (error (message "File local-variables error: %s"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1019 (prin1-to-string err)))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1020
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1021 (defvar auto-mode-alist
13903
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
1022 '(("\\.te?xt\\'" . text-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1023 ("\\.c\\'" . c-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1024 ("\\.h\\'" . c-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1025 ("\\.tex\\'" . tex-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1026 ("\\.ltx\\'" . latex-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1027 ("\\.el\\'" . emacs-lisp-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1028 ("\\.mm\\'" . nroff-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1029 ("\\.me\\'" . nroff-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1030 ("\\.ms\\'" . nroff-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1031 ("\\.man\\'" . nroff-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1032 ("\\.scm\\'" . scheme-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1033 ("\\.l\\'" . lisp-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1034 ("\\.lisp\\'" . lisp-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1035 ("\\.f\\'" . fortran-mode)
15056
4f2cfe6ee83c (auto-mode-alist): .F gets fortran mode.
Richard M. Stallman <rms@gnu.org>
parents: 15050
diff changeset
1036 ("\\.F\\'" . fortran-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1037 ("\\.for\\'" . fortran-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1038 ("\\.p\\'" . pascal-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1039 ("\\.pas\\'" . pascal-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1040 ("\\.ad[abs]\\'" . ada-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1041 ("\\.pl\\'" . perl-mode)
15545
74530b877334 (auto-mode-alist): Treat .pm like .pl.
Richard M. Stallman <rms@gnu.org>
parents: 15496
diff changeset
1042 ("\\.pm\\'" . perl-mode)
17731
a08d96324d4f (auto-mode-alist): Shuffle a few elements,
Richard M. Stallman <rms@gnu.org>
parents: 17673
diff changeset
1043 ("\\.s?html?\\'" . html-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1044 ("\\.cc\\'" . c++-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1045 ("\\.hh\\'" . c++-mode)
16414
941a90cef0b4 (auto-mode-alist): .hpp files get C++ mode.
Richard M. Stallman <rms@gnu.org>
parents: 16387
diff changeset
1046 ("\\.hpp\\'" . c++-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1047 ("\\.C\\'" . c++-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1048 ("\\.H\\'" . c++-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1049 ("\\.cpp\\'" . c++-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1050 ("\\.cxx\\'" . c++-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1051 ("\\.hxx\\'" . c++-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1052 ("\\.c\\+\\+\\'" . c++-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1053 ("\\.h\\+\\+\\'" . c++-mode)
16477
590593175cc7 more auto-mode-alist modes.
Simon Marshall <simon@gnu.org>
parents: 16470
diff changeset
1054 ("\\.m\\'" . objc-mode)
14987
5457cf99d7e1 (auto-mode-alist): Handle `.java'.
Richard M. Stallman <rms@gnu.org>
parents: 14927
diff changeset
1055 ("\\.java\\'" . java-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1056 ("\\.mk\\'" . makefile-mode)
14576
d82c768cb571 (auto-mode-alist): Recognize GNUmakefile.
Karl Heuer <kwzh@gnu.org>
parents: 14574
diff changeset
1057 ("\\(M\\|m\\|GNUm\\)akefile\\(.in\\)?\\'" . makefile-mode)
566
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1058 ;;; Less common extensions come here
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1059 ;;; so more common ones above are found faster.
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1060 ("\\.texinfo\\'" . texinfo-mode)
13903
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
1061 ("\\.te?xi\\'" . texinfo-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1062 ("\\.s\\'" . asm-mode)
13743
16b681bc9286 (auto-mode-alist): Recognize .S and .asm extensions.
Karl Heuer <kwzh@gnu.org>
parents: 13737
diff changeset
1063 ("\\.S\\'" . asm-mode)
16b681bc9286 (auto-mode-alist): Recognize .S and .asm extensions.
Karl Heuer <kwzh@gnu.org>
parents: 13737
diff changeset
1064 ("\\.asm\\'" . asm-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1065 ("ChangeLog\\'" . change-log-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1066 ("change.log\\'" . change-log-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1067 ("changelo\\'" . change-log-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1068 ("ChangeLog.[0-9]+\\'" . change-log-mode)
16334
5c4b76c66de2 (auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents: 16214
diff changeset
1069 ;; for MSDOS and MS-Windows (which are case-insensitive)
5c4b76c66de2 (auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents: 16214
diff changeset
1070 ("changelog\\'" . change-log-mode)
5c4b76c66de2 (auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents: 16214
diff changeset
1071 ("changelog.[0-9]+\\'" . change-log-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1072 ("\\$CHANGE_LOG\\$\\.TXT" . change-log-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1073 ("\\.scm\\.[0-9]*\\'" . scheme-mode)
14469
713f9bf02e20 (auto-mode-alist): .ksh suffix means sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14401
diff changeset
1074 ("\\.[ck]?sh\\'\\|\\.shar\\'\\|/\\.z?profile\\'" . sh-mode)
14025
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1075 ("/\\.\\(bash_profile\\|z?login\\|bash_login\\|z?logout\\)\\'" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1076 ("/\\.\\(bash_logout\\|[kz]shrc\\|bashrc\\|t?cshrc\\|esrc\\)\\'" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1077 ("/\\.\\([kz]shenv\\|xinitrc\\|startxrc\\|xsession\\)\\'" . sh-mode)
12554
fdc58e7e37c2 (auto-mode-alist): Move .scm.[0-9] before nroff-mode.
Karl Heuer <kwzh@gnu.org>
parents: 12438
diff changeset
1078 ;;; The following should come after the ChangeLog pattern
fdc58e7e37c2 (auto-mode-alist): Move .scm.[0-9] before nroff-mode.
Karl Heuer <kwzh@gnu.org>
parents: 12438
diff changeset
1079 ;;; for the sake of ChangeLog.1, etc.
fdc58e7e37c2 (auto-mode-alist): Move .scm.[0-9] before nroff-mode.
Karl Heuer <kwzh@gnu.org>
parents: 12438
diff changeset
1080 ;;; and after the .scm.[0-9] pattern too.
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1081 ("\\.[12345678]\\'" . nroff-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1082 ("\\.TeX\\'" . tex-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1083 ("\\.sty\\'" . latex-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1084 ("\\.cls\\'" . latex-mode) ;LaTeX 2e class
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1085 ("\\.bbl\\'" . latex-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1086 ("\\.bib\\'" . bibtex-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1087 ("\\.article\\'" . text-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1088 ("\\.letter\\'" . text-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1089 ("\\.tcl\\'" . tcl-mode)
14229
d9ef2de9c722 (auto-mode-alist): Recognize ".exp" suffix.
Karl Heuer <kwzh@gnu.org>
parents: 14205
diff changeset
1090 ("\\.exp\\'" . tcl-mode)
14574
1b6e39d4143c (auto-mode-alist): Recognize .itcl and .itk suffixes.
Karl Heuer <kwzh@gnu.org>
parents: 14469
diff changeset
1091 ("\\.itcl\\'" . tcl-mode)
1b6e39d4143c (auto-mode-alist): Recognize .itcl and .itk suffixes.
Karl Heuer <kwzh@gnu.org>
parents: 14469
diff changeset
1092 ("\\.itk\\'" . tcl-mode)
17731
a08d96324d4f (auto-mode-alist): Shuffle a few elements,
Richard M. Stallman <rms@gnu.org>
parents: 17673
diff changeset
1093 ("\\.icn\\'" . icon-mode)
a08d96324d4f (auto-mode-alist): Shuffle a few elements,
Richard M. Stallman <rms@gnu.org>
parents: 17673
diff changeset
1094 ("\\.sim\\'" . simula-mode)
a08d96324d4f (auto-mode-alist): Shuffle a few elements,
Richard M. Stallman <rms@gnu.org>
parents: 17673
diff changeset
1095 ("\\.mss\\'" . scribe-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1096 ("\\.f90\\'" . f90-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1097 ("\\.lsp\\'" . lisp-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1098 ("\\.awk\\'" . awk-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1099 ("\\.prolog\\'" . prolog-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1100 ("\\.tar\\'" . tar-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1101 ("\\.\\(arc\\|zip\\|lzh\\|zoo\\)\\'" . archive-mode)
15445
d89ae6e193da (auto-mode-alist): Add uppercase version of archive
Richard M. Stallman <rms@gnu.org>
parents: 15410
diff changeset
1102 ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\)\\'" . archive-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1103 ;; Mailer puts message to be edited in
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1104 ;; /tmp/Re.... or Message
14205
1e6f316414cf (auto-mode-alist): Use "\\`" instead of "^".
Karl Heuer <kwzh@gnu.org>
parents: 14176
diff changeset
1105 ("\\`/tmp/Re" . text-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1106 ("/Message[0-9]*\\'" . text-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1107 ("/drafts/[0-9]+\\'" . mh-letter-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1108 ;; some news reader is reported to use this
14205
1e6f316414cf (auto-mode-alist): Use "\\`" instead of "^".
Karl Heuer <kwzh@gnu.org>
parents: 14176
diff changeset
1109 ("\\`/tmp/fol/" . text-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1110 ("\\.y\\'" . c-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1111 ("\\.lex\\'" . c-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1112 ("\\.oak\\'" . scheme-mode)
14176
5e5779fa54cb (auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14112
diff changeset
1113 ("\\.sgml?\\'" . sgml-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1114 ("\\.dtd\\'" . sgml-mode)
17421
28ec3ecb171e (auto-mode-alist): Add .dsl and .dsssl for dsssl-mode.
Richard M. Stallman <rms@gnu.org>
parents: 17379
diff changeset
1115 ("\\.ds\\(ss\\)?l\\'" . dsssl-mode)
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1116 ;; .emacs following a directory delimiter
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1117 ;; in either Unix or VMS syntax.
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1118 ("[]>:/]\\..*emacs\\'" . emacs-lisp-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1119 ;; _emacs following a directory delimiter
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1120 ;; in MsDos syntax
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1121 ("[:/]_emacs\\'" . emacs-lisp-mode)
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1122 ("\\.ml\\'" . lisp-mode))
566
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1123 "\
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1124 Alist of filename patterns vs corresponding major mode functions.
9602
13106af26190 (auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9601
diff changeset
1125 Each element looks like (REGEXP . FUNCTION) or (REGEXP FUNCTION NON-NIL).
13106af26190 (auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9601
diff changeset
1126 \(NON-NIL stands for anything that is not nil; the value does not matter.)
13106af26190 (auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9601
diff changeset
1127 Visiting a file whose name matches REGEXP specifies FUNCTION as the
13106af26190 (auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9601
diff changeset
1128 mode function to use. FUNCTION will be called, unless it is nil.
13106af26190 (auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9601
diff changeset
1129
13106af26190 (auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9601
diff changeset
1130 If the element has the form (REGEXP FUNCTION NON-NIL), then after
13106af26190 (auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9601
diff changeset
1131 calling FUNCTION (if it's not nil), we delete the suffix that matched
13106af26190 (auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9601
diff changeset
1132 REGEXP and search the list again for another match.")
566
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1133
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
1134 (defvar interpreter-mode-alist
5956
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1135 '(("perl" . perl-mode)
15010
1afa2e4aed57 (interpreter-mode-alist): Recognize perl5.
Richard M. Stallman <rms@gnu.org>
parents: 14987
diff changeset
1136 ("perl5" . perl-mode)
5956
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1137 ("wish" . tcl-mode)
7662
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1138 ("wishx" . tcl-mode)
5973
628188ceb43b interpreter-mode-alist: Add modes for awk, gawk, and scm scripts.
Noah Friedman <friedman@splode.com>
parents: 5958
diff changeset
1139 ("tcl" . tcl-mode)
7662
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1140 ("tclsh" . tcl-mode)
5973
628188ceb43b interpreter-mode-alist: Add modes for awk, gawk, and scm scripts.
Noah Friedman <friedman@splode.com>
parents: 5958
diff changeset
1141 ("awk" . awk-mode)
14598
5a1435bd8ff3 (interpreter-mode-alist): Add mawk.
Karl Heuer <kwzh@gnu.org>
parents: 14576
diff changeset
1142 ("mawk" . awk-mode)
13091
9f60089ce2bb (interpreter-mode-alist): Handle nawk.
Richard M. Stallman <rms@gnu.org>
parents: 13037
diff changeset
1143 ("nawk" . awk-mode)
5973
628188ceb43b interpreter-mode-alist: Add modes for awk, gawk, and scm scripts.
Noah Friedman <friedman@splode.com>
parents: 5958
diff changeset
1144 ("gawk" . awk-mode)
14025
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1145 ("scm" . scheme-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1146 ("ash" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1147 ("bash" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1148 ("csh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1149 ("dtksh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1150 ("es" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1151 ("itcsh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1152 ("jsh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1153 ("ksh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1154 ("oash" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1155 ("pdksh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1156 ("rc" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1157 ("sh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1158 ("sh5" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1159 ("tcsh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1160 ("wksh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1161 ("wsh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1162 ("zsh" . sh-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1163 ("tail" . text-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1164 ("more" . text-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1165 ("less" . text-mode)
c73d14ef6a6a (interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 13980
diff changeset
1166 ("pg" . text-mode))
5956
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1167 "Alist mapping interpreter names to major modes.
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1168 This alist applies to files whose first line starts with `#!'.
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1169 Each element looks like (INTERPRETER . MODE).
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1170 The car of each element is compared with
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1171 the name of the interpreter specified in the first line.
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1172 If it matches, mode MODE is selected.")
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1173
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
1174 (defvar inhibit-first-line-modes-regexps '("\\.tar\\'" "\\.tgz\\'")
6780
06eb068ba329 (inhibit-first-line-modes-regexps): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 6734
diff changeset
1175 "List of regexps; if one matches a file name, don't look for `-*-'.")
3364
3dd9b89c6a17 (inhibit-local-variables-regexps): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 3280
diff changeset
1176
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
1177 (defvar inhibit-first-line-modes-suffixes nil
11180
7a9dceb0fb96 (inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11160
diff changeset
1178 "List of regexps for what to ignore, for `inhibit-first-line-modes-regexps'.
7a9dceb0fb96 (inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11160
diff changeset
1179 When checking `inhibit-first-line-modes-regexps', we first discard
7a9dceb0fb96 (inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11160
diff changeset
1180 from the end of the file name anything that matches one of these regexps.")
7a9dceb0fb96 (inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11160
diff changeset
1181
5453
691f7961e32c [ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents: 5398
diff changeset
1182 (defvar user-init-file
691f7961e32c [ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents: 5398
diff changeset
1183 "" ; set by command-line
691f7961e32c [ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents: 5398
diff changeset
1184 "File name including directory of user's initialization file.")
691f7961e32c [ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents: 5398
diff changeset
1185
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1186 (defun set-auto-mode (&optional just-from-file-name)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1187 "Select major mode appropriate for current buffer.
7662
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1188 This checks for a -*- mode tag in the buffer's text,
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1189 compares the filename against the entries in `auto-mode-alist',
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1190 or checks the interpreter that runs this file against
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1191 `interpreter-mode-alist'.
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1192
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1193 It does not check for the `mode:' local variable in the
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1194 Local Variables section of the file; for that, use `hack-local-variables'.
566
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1195
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1196 If `enable-local-variables' is nil, this function does not check for a
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1197 -*- mode tag.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1198
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1199 If the optional argument JUST-FROM-FILE-NAME is non-nil,
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1200 then we do not set anything but the major mode,
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1201 and we don't even do that unless it would come from the file name."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1202 ;; Look for -*-MODENAME-*- or -*- ... mode: MODENAME; ... -*-
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1203 (let (beg end done modes)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1204 (save-excursion
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1205 (goto-char (point-min))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1206 (skip-chars-forward " \t\n")
4699
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1207 (and enable-local-variables
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1208 ;; Don't look for -*- if this file name matches any
6780
06eb068ba329 (inhibit-first-line-modes-regexps): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 6734
diff changeset
1209 ;; of the regexps in inhibit-first-line-modes-regexps.
9251
2ecfcd3f778c (set-auto-mode): Discard versions from file name before
Richard M. Stallman <rms@gnu.org>
parents: 9234
diff changeset
1210 (let ((temp inhibit-first-line-modes-regexps)
11636
919ac497342e (set-auto-mode): If buffer has no file, use buffer name.
Richard M. Stallman <rms@gnu.org>
parents: 11630
diff changeset
1211 (name (if buffer-file-name
919ac497342e (set-auto-mode): If buffer has no file, use buffer name.
Richard M. Stallman <rms@gnu.org>
parents: 11630
diff changeset
1212 (file-name-sans-versions buffer-file-name)
919ac497342e (set-auto-mode): If buffer has no file, use buffer name.
Richard M. Stallman <rms@gnu.org>
parents: 11630
diff changeset
1213 (buffer-name))))
11189
a2a85a29cdd6 (set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 11180
diff changeset
1214 (while (let ((sufs inhibit-first-line-modes-suffixes))
a2a85a29cdd6 (set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 11180
diff changeset
1215 (while (and sufs (not (string-match (car sufs) name)))
a2a85a29cdd6 (set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 11180
diff changeset
1216 (setq sufs (cdr sufs)))
a2a85a29cdd6 (set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 11180
diff changeset
1217 sufs)
a2a85a29cdd6 (set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 11180
diff changeset
1218 (setq name (substring name 0 (match-beginning 0))))
4699
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1219 (while (and temp
11180
7a9dceb0fb96 (inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11160
diff changeset
1220 (not (string-match (car temp) name)))
4699
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1221 (setq temp (cdr temp)))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1222 (not temp))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1223 (search-forward "-*-" (save-excursion
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1224 ;; If the file begins with "#!"
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1225 ;; (exec interpreter magic), look
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1226 ;; for mode frobs in the first two
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1227 ;; lines. You cannot necessarily
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1228 ;; put them in the first line of
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1229 ;; such a file without screwing up
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1230 ;; the interpreter invocation.
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1231 (end-of-line (and (looking-at "^#!") 2))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1232 (point)) t)
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1233 (progn
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1234 (skip-chars-forward " \t")
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1235 (setq beg (point))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1236 (search-forward "-*-"
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1237 (save-excursion (end-of-line) (point))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1238 t))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1239 (progn
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1240 (forward-char -3)
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1241 (skip-chars-backward " \t")
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1242 (setq end (point))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1243 (goto-char beg)
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1244 (if (save-excursion (search-forward ":" end t))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1245 ;; Find all specifications for the `mode:' variable
6322
62886e6eefe6 Fix typo in comment.
Karl Heuer <kwzh@gnu.org>
parents: 6309
diff changeset
1246 ;; and execute them left to right.
4699
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1247 (while (let ((case-fold-search t))
10132
d6ab8efcd2ff (set-auto-mode): Don't get confused by anything ending in "mode:" which isn't
Karl Heuer <kwzh@gnu.org>
parents: 9995
diff changeset
1248 (or (and (looking-at "mode:")
d6ab8efcd2ff (set-auto-mode): Don't get confused by anything ending in "mode:" which isn't
Karl Heuer <kwzh@gnu.org>
parents: 9995
diff changeset
1249 (goto-char (match-end 0)))
d6ab8efcd2ff (set-auto-mode): Don't get confused by anything ending in "mode:" which isn't
Karl Heuer <kwzh@gnu.org>
parents: 9995
diff changeset
1250 (re-search-forward "[ \t;]mode:" end t)))
4699
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1251 (skip-chars-forward " \t")
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1252 (setq beg (point))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1253 (if (search-forward ";" end t)
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1254 (forward-char -1)
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1255 (goto-char end))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1256 (skip-chars-backward " \t")
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1257 (setq modes (cons (intern (concat (downcase (buffer-substring beg (point))) "-mode"))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1258 modes)))
4699
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1259 ;; Simple -*-MODE-*- case.
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1260 (setq modes (cons (intern (concat (downcase (buffer-substring beg end))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1261 "-mode"))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1262 modes))))))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1263 ;; If we found modes to use, invoke them now,
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1264 ;; outside the save-excursion.
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1265 (if modes
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1266 (unless just-from-file-name
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1267 (mapcar 'funcall (nreverse modes))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1268 (setq done t)))
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1269 ;; If we didn't find a mode from a -*- line, try using the file name.
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1270 (if (and (not done) buffer-file-name)
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1271 (let ((name buffer-file-name)
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1272 (keep-going t))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1273 ;; Remove backup-suffixes from file name.
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1274 (setq name (file-name-sans-versions name))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1275 (while keep-going
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1276 (setq keep-going nil)
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1277 (let ((alist auto-mode-alist)
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1278 (mode nil))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1279 ;; Find first matching alist entry.
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
1280 (let ((case-fold-search
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1281 (memq system-type '(vax-vms windows-nt))))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1282 (while (and (not mode) alist)
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1283 (if (string-match (car (car alist)) name)
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1284 (if (and (consp (cdr (car alist)))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1285 (nth 2 (car alist)))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1286 (progn
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1287 (setq mode (car (cdr (car alist)))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1288 name (substring name 0 (match-beginning 0))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1289 keep-going t))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1290 (setq mode (cdr (car alist))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1291 keep-going nil)))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1292 (setq alist (cdr alist))))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1293 (if mode
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1294 (funcall mode)
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1295 ;; If we can't deduce a mode from the file name,
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1296 ;; look for an interpreter specified in the first line.
13737
3902b2781a8f (set-auto-mode): Recognize `#!/bin/env INTERPRETER' hack.
Karl Heuer <kwzh@gnu.org>
parents: 13693
diff changeset
1297 ;; As a special case, allow for things like "#!/bin/env perl",
3902b2781a8f (set-auto-mode): Recognize `#!/bin/env INTERPRETER' hack.
Karl Heuer <kwzh@gnu.org>
parents: 13693
diff changeset
1298 ;; which finds the interpreter anywhere in $PATH.
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1299 (let ((interpreter
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1300 (save-excursion
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1301 (goto-char (point-min))
14598
5a1435bd8ff3 (interpreter-mode-alist): Add mawk.
Karl Heuer <kwzh@gnu.org>
parents: 14576
diff changeset
1302 (if (looking-at "#![ \t]?\\([^ \t\n]*/bin/env[ \t]\\)?\\([^ \t\n]+\\)")
13737
3902b2781a8f (set-auto-mode): Recognize `#!/bin/env INTERPRETER' hack.
Karl Heuer <kwzh@gnu.org>
parents: 13693
diff changeset
1303 (buffer-substring (match-beginning 2)
3902b2781a8f (set-auto-mode): Recognize `#!/bin/env INTERPRETER' hack.
Karl Heuer <kwzh@gnu.org>
parents: 13693
diff changeset
1304 (match-end 2))
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1305 "")))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1306 elt)
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1307 ;; Map interpreter name to a mode.
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1308 (setq elt (assoc (file-name-nondirectory interpreter)
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1309 interpreter-mode-alist))
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1310 (unless just-from-file-name
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1311 (if elt
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1312 (funcall (cdr elt))))))))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1313
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1314 (defun hack-local-variables-prop-line ()
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1315 ;; Set local variables specified in the -*- line.
4699
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1316 ;; Ignore any specification for `mode:';
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1317 ;; set-auto-mode should already have handled that.
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1318 (save-excursion
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1319 (goto-char (point-min))
6575
9aba6be8e460 (hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents: 6574
diff changeset
1320 (let ((result nil)
9aba6be8e460 (hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents: 6574
diff changeset
1321 (end (save-excursion (end-of-line (and (looking-at "^#!") 2)) (point))))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1322 ;; Parse the -*- line into the `result' alist.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1323 (cond ((not (search-forward "-*-" end t))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1324 ;; doesn't have one.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1325 nil)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1326 ((looking-at "[ \t]*\\([^ \t\n\r:;]+\\)\\([ \t]*-\\*-\\)")
6575
9aba6be8e460 (hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents: 6574
diff changeset
1327 ;; Simple form: "-*- MODENAME -*-". Already handled.
9aba6be8e460 (hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents: 6574
diff changeset
1328 nil)
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1329 (t
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1330 ;; Hairy form: '-*-' [ <variable> ':' <value> ';' ]* '-*-'
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1331 ;; (last ";" is optional).
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1332 (save-excursion
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1333 (if (search-forward "-*-" end t)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1334 (setq end (- (point) 3))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1335 (error "-*- not terminated before end of line")))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1336 (while (< (point) end)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1337 (or (looking-at "[ \t]*\\([^ \t\n:]+\\)[ \t]*:[ \t]*")
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1338 (error "malformed -*- line"))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1339 (goto-char (match-end 0))
12068
5d44c48f3b7b (hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents: 12050
diff changeset
1340 ;; There used to be a downcase here,
5d44c48f3b7b (hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents: 12050
diff changeset
1341 ;; but the manual didn't say so,
5d44c48f3b7b (hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents: 12050
diff changeset
1342 ;; and people want to set var names that aren't all lc.
5d44c48f3b7b (hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents: 12050
diff changeset
1343 (let ((key (intern (buffer-substring
5d44c48f3b7b (hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents: 12050
diff changeset
1344 (match-beginning 1)
5d44c48f3b7b (hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents: 12050
diff changeset
1345 (match-end 1))))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1346 (val (save-restriction
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1347 (narrow-to-region (point) end)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1348 (read (current-buffer)))))
16440
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1349 ;; It is traditional to ignore
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1350 ;; case when checking for `mode' in set-auto-mode,
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1351 ;; so we must do that here as well.
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1352 ;; That is inconsistent, but we're stuck with it.
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1353 (or (equal (downcase (symbol-name key)) "mode")
6575
9aba6be8e460 (hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents: 6574
diff changeset
1354 (setq result (cons (cons key val) result)))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1355 (skip-chars-forward " \t;")))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1356 (setq result (nreverse result))))
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
1357
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1358 (if (and result
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1359 (or (eq enable-local-variables t)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1360 (and enable-local-variables
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1361 (save-window-excursion
5292
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1362 (condition-case nil
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1363 (switch-to-buffer (current-buffer))
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1364 (error
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1365 ;; If we fail to switch in the selected window,
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1366 ;; it is probably a minibuffer.
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1367 ;; So try another window.
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1368 (condition-case nil
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1369 (switch-to-buffer-other-window (current-buffer))
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1370 (error
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1371 (switch-to-buffer-other-frame (current-buffer))))))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1372 (y-or-n-p (format "Set local variables as specified in -*- line of %s? "
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1373 (file-name-nondirectory buffer-file-name)))))))
15365
104a97493dcc (hack-local-variables-prop-line): Bind enable-local-eval.
Richard M. Stallman <rms@gnu.org>
parents: 15329
diff changeset
1374 (let ((enable-local-eval enable-local-eval))
104a97493dcc (hack-local-variables-prop-line): Bind enable-local-eval.
Richard M. Stallman <rms@gnu.org>
parents: 15329
diff changeset
1375 (while result
104a97493dcc (hack-local-variables-prop-line): Bind enable-local-eval.
Richard M. Stallman <rms@gnu.org>
parents: 15329
diff changeset
1376 (hack-one-local-variable (car (car result)) (cdr (car result)))
104a97493dcc (hack-local-variables-prop-line): Bind enable-local-eval.
Richard M. Stallman <rms@gnu.org>
parents: 15329
diff changeset
1377 (setq result (cdr result))))))))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1378
10169
04425b872c5b (hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents: 10149
diff changeset
1379 (defvar hack-local-variables-hook nil
04425b872c5b (hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents: 10149
diff changeset
1380 "Normal hook run after processing a file's local variables specs.
04425b872c5b (hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents: 10149
diff changeset
1381 Major modes can use this to examine user-specified local variables
04425b872c5b (hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents: 10149
diff changeset
1382 in order to initialize other data structure based on them.")
04425b872c5b (hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents: 10149
diff changeset
1383
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1384 (defun hack-local-variables (&optional mode-only)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1385 "Parse and put into effect this buffer's local variables spec.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1386 If MODE-ONLY is non-nil, all we do is check whether the major mode
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1387 is specified, returning t if it is specified."
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1388 (unless mode-only
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1389 (hack-local-variables-prop-line))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1390 ;; Look for "Local variables:" line in last page.
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1391 (let (mode-specified)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1392 (save-excursion
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1393 (goto-char (point-max))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1394 (search-backward "\n\^L" (max (- (point-max) 3000) (point-min)) 'move)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1395 (if (let ((case-fold-search t))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1396 (and (search-forward "Local Variables:" nil t)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1397 (or (eq enable-local-variables t)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1398 mode-only
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1399 (and enable-local-variables
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1400 (save-window-excursion
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1401 (switch-to-buffer (current-buffer))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1402 (save-excursion
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1403 (beginning-of-line)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1404 (set-window-start (selected-window) (point)))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1405 (y-or-n-p (format "Set local variables as specified at end of %s? "
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1406 (if buffer-file-name
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1407 (file-name-nondirectory
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1408 buffer-file-name)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1409 (concat "buffer "
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1410 (buffer-name))))))))))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1411 (let ((continue t)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1412 prefix prefixlen suffix beg
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1413 mode-specified
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1414 (enable-local-eval enable-local-eval))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1415 ;; The prefix is what comes before "local variables:" in its line.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1416 ;; The suffix is what comes after "local variables:" in its line.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1417 (skip-chars-forward " \t")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1418 (or (eolp)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1419 (setq suffix (buffer-substring (point)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1420 (progn (end-of-line) (point)))))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1421 (goto-char (match-beginning 0))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1422 (or (bolp)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1423 (setq prefix
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1424 (buffer-substring (point)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1425 (progn (beginning-of-line) (point)))))
566
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1426
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1427 (if prefix (setq prefixlen (length prefix)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1428 prefix (regexp-quote prefix)))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1429 (if suffix (setq suffix (concat (regexp-quote suffix) "$")))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1430 (while continue
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1431 ;; Look at next local variable spec.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1432 (if selective-display (re-search-forward "[\n\C-m]")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1433 (forward-line 1))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1434 ;; Skip the prefix, if any.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1435 (if prefix
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1436 (if (looking-at prefix)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1437 (forward-char prefixlen)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1438 (error "Local variables entry is missing the prefix")))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1439 ;; Find the variable name; strip whitespace.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1440 (skip-chars-forward " \t")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1441 (setq beg (point))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1442 (skip-chars-forward "^:\n")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1443 (if (eolp) (error "Missing colon in local variables entry"))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1444 (skip-chars-backward " \t")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1445 (let* ((str (buffer-substring beg (point)))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1446 (var (read str))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1447 val)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1448 ;; Setting variable named "end" means end of list.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1449 (if (string-equal (downcase str) "end")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1450 (setq continue nil)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1451 ;; Otherwise read the variable value.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1452 (skip-chars-forward "^:")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1453 (forward-char 1)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1454 (setq val (read (current-buffer)))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1455 (skip-chars-backward "\n")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1456 (skip-chars-forward " \t")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1457 (or (if suffix (looking-at suffix) (eolp))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1458 (error "Local variables entry is terminated incorrectly"))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1459 (if mode-only
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1460 (if (eq var 'mode)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1461 (setq mode-specified t))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1462 ;; Set the variable. "Variables" mode and eval are funny.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1463 (hack-one-local-variable var val))))))))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1464 (unless mode-only
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1465 (run-hooks 'hack-local-variables-hook))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1466 mode-specified))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1467
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
1468 (defvar ignored-local-variables
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1469 '(enable-local-eval)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1470 "Variables to be ignored in a file's local variable spec.")
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1471
6734
6e61dbbfce80 (hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 6733
diff changeset
1472 ;; Get confirmation before setting these variables as locals in a file.
8148
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
1473 (put 'debugger 'risky-local-variable t)
7682
ce09b4fd6cc8 Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents: 7662
diff changeset
1474 (put 'enable-local-eval 'risky-local-variable t)
10149
c1704135914f (ignored-local-variables): Mark it risky.
Richard M. Stallman <rms@gnu.org>
parents: 10132
diff changeset
1475 (put 'ignored-local-variables 'risky-local-variable t)
6734
6e61dbbfce80 (hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 6733
diff changeset
1476 (put 'eval 'risky-local-variable t)
6e61dbbfce80 (hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 6733
diff changeset
1477 (put 'file-name-handler-alist 'risky-local-variable t)
6e61dbbfce80 (hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 6733
diff changeset
1478 (put 'minor-mode-map-alist 'risky-local-variable t)
6e61dbbfce80 (hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 6733
diff changeset
1479 (put 'after-load-alist 'risky-local-variable t)
7682
ce09b4fd6cc8 Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents: 7662
diff changeset
1480 (put 'buffer-file-name 'risky-local-variable t)
ce09b4fd6cc8 Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents: 7662
diff changeset
1481 (put 'buffer-auto-save-file-name 'risky-local-variable t)
ce09b4fd6cc8 Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents: 7662
diff changeset
1482 (put 'buffer-file-truename 'risky-local-variable t)
8171
750282040c17 (process-environment, exec-path, load-path,exec-directory):
Richard M. Stallman <rms@gnu.org>
parents: 8165
diff changeset
1483 (put 'exec-path 'risky-local-variable t)
750282040c17 (process-environment, exec-path, load-path,exec-directory):
Richard M. Stallman <rms@gnu.org>
parents: 8165
diff changeset
1484 (put 'load-path 'risky-local-variable t)
750282040c17 (process-environment, exec-path, load-path,exec-directory):
Richard M. Stallman <rms@gnu.org>
parents: 8165
diff changeset
1485 (put 'exec-directory 'risky-local-variable t)
750282040c17 (process-environment, exec-path, load-path,exec-directory):
Richard M. Stallman <rms@gnu.org>
parents: 8165
diff changeset
1486 (put 'process-environment 'risky-local-variable t)
15753
4d76ffbc2be1 (dabbrev-case-fold-search, dabbrev-case-replace): Set
Richard M. Stallman <rms@gnu.org>
parents: 15611
diff changeset
1487 (put 'dabbrev-case-fold-search 'risky-local-variable t)
4d76ffbc2be1 (dabbrev-case-fold-search, dabbrev-case-replace): Set
Richard M. Stallman <rms@gnu.org>
parents: 15611
diff changeset
1488 (put 'dabbrev-case-replace 'risky-local-variable t)
8177
defefddf88db (outline-level): Mark it risky.
Richard M. Stallman <rms@gnu.org>
parents: 8171
diff changeset
1489 ;; Don't wait for outline.el to be loaded, for the sake of outline-minor-mode.
defefddf88db (outline-level): Mark it risky.
Richard M. Stallman <rms@gnu.org>
parents: 8171
diff changeset
1490 (put 'outline-level 'risky-local-variable t)
8251
6f692cc01d52 (rmail-output-file-alist): Mark it risky.
Richard M. Stallman <rms@gnu.org>
parents: 8232
diff changeset
1491 (put 'rmail-output-file-alist 'risky-local-variable t)
7682
ce09b4fd6cc8 Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents: 7662
diff changeset
1492
9162
53d02761f5b7 (hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 9068
diff changeset
1493 ;; This one is safe because the user gets to check it before it is used.
53d02761f5b7 (hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 9068
diff changeset
1494 (put 'compile-command 'safe-local-variable t)
53d02761f5b7 (hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 9068
diff changeset
1495
7217
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1496 (defun hack-one-local-variable-quotep (exp)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1497 (and (consp exp) (eq (car exp) 'quote) (consp (cdr exp))))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1498
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1499 ;; "Set" one variable in a local variables spec.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1500 ;; A few variable names are treated specially.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1501 (defun hack-one-local-variable (var val)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1502 (cond ((eq var 'mode)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1503 (funcall (intern (concat (downcase (symbol-name val))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1504 "-mode"))))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1505 ((memq var ignored-local-variables)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1506 nil)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1507 ;; "Setting" eval means either eval it or do nothing.
3626
ae0389767674 (hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents: 3624
diff changeset
1508 ;; Likewise for setting hook variables.
6734
6e61dbbfce80 (hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 6733
diff changeset
1509 ((or (get var 'risky-local-variable)
9162
53d02761f5b7 (hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 9068
diff changeset
1510 (and
53d02761f5b7 (hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 9068
diff changeset
1511 (string-match "-hooks?$\\|-functions?$\\|-forms?$\\|-program$\\|-command$"
53d02761f5b7 (hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 9068
diff changeset
1512 (symbol-name var))
53d02761f5b7 (hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 9068
diff changeset
1513 (not (get var 'safe-local-variable))))
13980
ad74bc8e877f (make-directory): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13903
diff changeset
1514 ;; Permit evalling a put of a harmless property.
7217
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1515 ;; if the args do nothing tricky.
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1516 (if (or (and (eq var 'eval)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1517 (consp val)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1518 (eq (car val) 'put)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1519 (hack-one-local-variable-quotep (nth 1 val))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1520 (hack-one-local-variable-quotep (nth 2 val))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1521 ;; Only allow safe values of lisp-indent-hook;
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1522 ;; not functions.
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1523 (or (numberp (nth 3 val))
7643
86001e904ef3 (hack-one-local-variable): Check properly for `defun.
Richard M. Stallman <rms@gnu.org>
parents: 7440
diff changeset
1524 (equal (nth 3 val) ''defun))
7217
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1525 (memq (nth 1 (nth 2 val))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1526 '(lisp-indent-hook)))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1527 ;; Permit eval if not root and user says ok.
8181
a5c67d37141b (hack-one-local-variable): Check for root using user-uid.
Richard M. Stallman <rms@gnu.org>
parents: 8177
diff changeset
1528 (and (not (zerop (user-uid)))
7217
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1529 (or (eq enable-local-eval t)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1530 (and enable-local-eval
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1531 (save-window-excursion
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1532 (switch-to-buffer (current-buffer))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1533 (save-excursion
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1534 (beginning-of-line)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1535 (set-window-start (selected-window) (point)))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1536 (setq enable-local-eval
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1537 (y-or-n-p (format "Process `eval' or hook local variables in file %s? "
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1538 (file-name-nondirectory buffer-file-name)))))))))
3626
ae0389767674 (hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents: 3624
diff changeset
1539 (if (eq var 'eval)
ae0389767674 (hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents: 3624
diff changeset
1540 (save-excursion (eval val))
ae0389767674 (hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents: 3624
diff changeset
1541 (make-local-variable var)
ae0389767674 (hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents: 3624
diff changeset
1542 (set var val))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1543 (message "Ignoring `eval:' in file's local variables")))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1544 ;; Ordinary variable, really set it.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1545 (t (make-local-variable var)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1546 (set var val))))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1547
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1548
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
1549 (defcustom change-major-mode-with-file-name t
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1550 "*Non-nil means \\[write-file] should set the major mode from the file name.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1551 However, the mode will not be changed if
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1552 \(1) a local variables list or the `-*-' line specifies a major mode, or
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1553 \(2) the current major mode is a \"special\" mode,
17666
ca11152dcad5 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17660
diff changeset
1554 \ not suitable for ordinary files, or
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
1555 \(3) the new file name does not particularly specify any mode."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
1556 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
1557 :group 'editing-basics)
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1558
16971
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1559 (defun set-visited-file-name (filename &optional no-query along-with-file)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1560 "Change name of file visited in current buffer to FILENAME.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1561 The next time the buffer is saved it will go in the newly specified file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1562 nil or empty string as argument means make buffer not be visiting any file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1563 Remember to delete the initial contents of the minibuffer
15570
6ec32e968edb (set-visited-file-name): New optional arg NO-QUERY.
Richard M. Stallman <rms@gnu.org>
parents: 15548
diff changeset
1564 if you wish to pass an empty string as the argument.
6ec32e968edb (set-visited-file-name): New optional arg NO-QUERY.
Richard M. Stallman <rms@gnu.org>
parents: 15548
diff changeset
1565
6ec32e968edb (set-visited-file-name): New optional arg NO-QUERY.
Richard M. Stallman <rms@gnu.org>
parents: 15548
diff changeset
1566 The optional second argument NO-QUERY, if non-nil, inhibits asking for
16971
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1567 confirmation in the case where another buffer is already visiting FILENAME.
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1568
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1569 The optional third argument ALONG-WITH-FILE, if non-nil, means that
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1570 the old visited file has been renamed to the new name FILENAME."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1571 (interactive "FSet visited file name: ")
10298
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
1572 (if (buffer-base-buffer)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
1573 (error "An indirect buffer cannot visit a file"))
8140
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1574 (let (truename)
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1575 (if filename
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1576 (setq filename
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1577 (if (string-equal filename "")
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1578 nil
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1579 (expand-file-name filename))))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1580 (if filename
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1581 (progn
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1582 (setq truename (file-truename filename))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1583 (if find-file-visit-truename
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1584 (setq filename truename))))
14883
f8a7a08fb9dd (set-visited-file-name): Don't call find-buffer-visiting if filename is nil.
Richard M. Stallman <rms@gnu.org>
parents: 14734
diff changeset
1585 (let ((buffer (and filename (find-buffer-visiting filename))))
14731
3682b5e64ce3 (set-visited-file-name): Query if there's already another
Richard M. Stallman <rms@gnu.org>
parents: 14636
diff changeset
1586 (and buffer (not (eq buffer (current-buffer)))
15570
6ec32e968edb (set-visited-file-name): New optional arg NO-QUERY.
Richard M. Stallman <rms@gnu.org>
parents: 15548
diff changeset
1587 (not no-query)
14731
3682b5e64ce3 (set-visited-file-name): Query if there's already another
Richard M. Stallman <rms@gnu.org>
parents: 14636
diff changeset
1588 (not (y-or-n-p (message "A buffer is visiting %s; proceed? "
3682b5e64ce3 (set-visited-file-name): Query if there's already another
Richard M. Stallman <rms@gnu.org>
parents: 14636
diff changeset
1589 filename)))
3682b5e64ce3 (set-visited-file-name): Query if there's already another
Richard M. Stallman <rms@gnu.org>
parents: 14636
diff changeset
1590 (error "Aborted")))
8140
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1591 (or (equal filename buffer-file-name)
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1592 (progn
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1593 (and filename (lock-buffer filename))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1594 (unlock-buffer)))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1595 (setq buffer-file-name filename)
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1596 (if filename ; make buffer name reflect filename.
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1597 (let ((new-name (file-name-nondirectory buffer-file-name)))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1598 (if (string= new-name "")
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1599 (error "Empty file name"))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1600 (if (eq system-type 'vax-vms)
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1601 (setq new-name (downcase new-name)))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1602 (setq default-directory (file-name-directory buffer-file-name))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1603 (or (string= new-name (buffer-name))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1604 (rename-buffer new-name t))))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1605 (setq buffer-backed-up nil)
16971
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1606 (or along-with-file
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1607 (clear-visited-file-modtime))
13289
c4f93bb943b7 (set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents: 13182
diff changeset
1608 ;; Abbreviate the file names of the buffer.
8151
2ac4479dd0ff (set-visited-file-name): Avoid crash if TRUENAME is nil.
Richard M. Stallman <rms@gnu.org>
parents: 8148
diff changeset
1609 (if truename
13289
c4f93bb943b7 (set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents: 13182
diff changeset
1610 (progn
c4f93bb943b7 (set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents: 13182
diff changeset
1611 (setq buffer-file-truename (abbreviate-file-name truename))
c4f93bb943b7 (set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents: 13182
diff changeset
1612 (if find-file-visit-truename
c4f93bb943b7 (set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents: 13182
diff changeset
1613 (setq buffer-file-name buffer-file-truename))))
8140
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1614 (setq buffer-file-number
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1615 (if filename
13326
4e1b078121ad (set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 13289
diff changeset
1616 (nthcdr 10 (file-attributes buffer-file-name))
8140
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1617 nil)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1618 ;; write-file-hooks is normally used for things like ftp-find-file
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1619 ;; that visit things that are not local files as if they were files.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1620 ;; Changing to visit an ordinary local file instead should flush the hook.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1621 (kill-local-variable 'write-file-hooks)
2375
94e135f2d64d (local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2335
diff changeset
1622 (kill-local-variable 'local-write-file-hooks)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1623 (kill-local-variable 'revert-buffer-function)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1624 (kill-local-variable 'backup-inhibited)
6546
8eb722515c31 (set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 6454
diff changeset
1625 ;; If buffer was read-only because of version control,
8eb722515c31 (set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 6454
diff changeset
1626 ;; that reason is gone now, so make it writable.
8eb722515c31 (set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 6454
diff changeset
1627 (if vc-mode
8eb722515c31 (set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 6454
diff changeset
1628 (setq buffer-read-only nil))
8eb722515c31 (set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 6454
diff changeset
1629 (kill-local-variable 'vc-mode)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1630 ;; Turn off backup files for certain file names.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1631 ;; Since this is a permanent local, the major mode won't eliminate it.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1632 (and (not (funcall backup-enable-predicate buffer-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1633 (progn
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1634 (make-local-variable 'backup-inhibited)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1635 (setq backup-inhibited t)))
3944
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1636 (let ((oauto buffer-auto-save-file-name))
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1637 ;; If auto-save was not already on, turn it on if appropriate.
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1638 (if (not buffer-auto-save-file-name)
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1639 (and buffer-file-name auto-save-default
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1640 (auto-save-mode t))
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1641 ;; If auto save is on, start using a new name.
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1642 ;; We deliberately don't rename or delete the old auto save
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1643 ;; for the old visited file name. This is because perhaps
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1644 ;; the user wants to save the new state and then compare with the
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1645 ;; previous state from the auto save file.
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1646 (setq buffer-auto-save-file-name
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1647 (make-auto-save-file-name)))
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1648 ;; Rename the old auto save file if any.
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1649 (and oauto buffer-auto-save-file-name
3946
535f1f575d04 (set-visited-file-name): Rename auto-save file only if it exists.
Richard M. Stallman <rms@gnu.org>
parents: 3944
diff changeset
1650 (file-exists-p oauto)
3944
5e740ac08e39 (set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents: 3835
diff changeset
1651 (rename-file oauto buffer-auto-save-file-name t)))
16971
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1652 (and buffer-file-name
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1653 (not along-with-file)
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1654 (set-buffer-modified-p t))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1655 ;; Update the major mode, if the file name determines it.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1656 (condition-case nil
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1657 ;; Don't change the mode if it is special.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1658 (or (not change-major-mode-with-file-name)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1659 (get major-mode 'mode-class)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1660 ;; Don't change the mode if the local variable list specifies it.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1661 (hack-local-variables t)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1662 (set-auto-mode t))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1663 (error nil)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1664
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
1665 (defun write-file (filename &optional confirm)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1666 "Write current buffer into file FILENAME.
2003
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
1667 Makes buffer visit that file, and marks it not modified.
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
1668 If the buffer is already visiting a file, you can specify
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
1669 a directory name as FILENAME, to write a file of the same
11340
5c97fabe0ab9 (write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents: 11222
diff changeset
1670 old name in that directory.
14469
713f9bf02e20 (auto-mode-alist): .ksh suffix means sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14401
diff changeset
1671
11340
5c97fabe0ab9 (write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents: 11222
diff changeset
1672 If optional second arg CONFIRM is non-nil,
14469
713f9bf02e20 (auto-mode-alist): .ksh suffix means sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14401
diff changeset
1673 ask for confirmation for overwriting an existing file.
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
1674 Interactively, confirmation is required unless you supply a prefix argument."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1675 ;; (interactive "FWrite file: ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1676 (interactive
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1677 (list (if buffer-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1678 (read-file-name "Write file: "
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1679 nil nil nil nil)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1680 (read-file-name "Write file: "
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1681 (cdr (assq 'default-directory
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1682 (buffer-local-variables)))
11340
5c97fabe0ab9 (write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents: 11222
diff changeset
1683 nil nil (buffer-name)))
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
1684 (not current-prefix-arg)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1685 (or (null filename) (string-equal filename "")
2003
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
1686 (progn
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
1687 ;; If arg is just a directory,
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
1688 ;; use same file name, but in that directory.
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
1689 (if (and (file-directory-p filename) buffer-file-name)
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
1690 (setq filename (concat (file-name-as-directory filename)
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
1691 (file-name-nondirectory buffer-file-name))))
11340
5c97fabe0ab9 (write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents: 11222
diff changeset
1692 (and confirm
5c97fabe0ab9 (write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents: 11222
diff changeset
1693 (file-exists-p filename)
5c97fabe0ab9 (write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents: 11222
diff changeset
1694 (or (y-or-n-p (format "File `%s' exists; overwrite? " filename))
5c97fabe0ab9 (write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents: 11222
diff changeset
1695 (error "Canceled")))
16470
b050d980c422 (set-visited-file-name): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16440
diff changeset
1696 (set-visited-file-name filename (not confirm))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1697 (set-buffer-modified-p t)
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
1698 (save-buffer))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1699
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1700 (defun backup-buffer ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1701 "Make a backup of the disk file visited by the current buffer, if appropriate.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1702 This is normally done before saving the buffer the first time.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1703 If the value is non-nil, it is the result of `file-modes' on the original
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1704 file; this means that the caller, after saving the buffer, should change
16614
895dc357b9a2 (backup-buffer): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16586
diff changeset
1705 the modes of the new file to agree with the old modes.
895dc357b9a2 (backup-buffer): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16586
diff changeset
1706
895dc357b9a2 (backup-buffer): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16586
diff changeset
1707 A backup may be done by renaming or by copying; see documentation of
895dc357b9a2 (backup-buffer): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16586
diff changeset
1708 variable `make-backup-files'. If it's done by renaming, then the file is
895dc357b9a2 (backup-buffer): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16586
diff changeset
1709 no longer accessible under its old name."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1710 (if (and make-backup-files (not backup-inhibited)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1711 (not buffer-backed-up)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1712 (file-exists-p buffer-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1713 (memq (aref (elt (file-attributes buffer-file-name) 8) 0)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1714 '(?- ?l)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1715 (let ((real-file-name buffer-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1716 backup-info backupname targets setmodes)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1717 ;; If specified name is a symbolic link, chase it to the target.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1718 ;; Thus we make the backups in the directory where the real file is.
3260
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
1719 (setq real-file-name (file-chase-links real-file-name))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1720 (setq backup-info (find-backup-file-name real-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1721 backupname (car backup-info)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1722 targets (cdr backup-info))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1723 ;;; (if (file-directory-p buffer-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1724 ;;; (error "Cannot save buffer in directory %s" buffer-file-name))
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1725 (if backup-info
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1726 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1727 (let ((delete-old-versions
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1728 ;; If have old versions to maybe delete,
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1729 ;; ask the user to confirm now, before doing anything.
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1730 ;; But don't actually delete til later.
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1731 (and targets
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1732 (or (eq delete-old-versions t) (eq delete-old-versions nil))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1733 (or delete-old-versions
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1734 (y-or-n-p (format "Delete excess backup versions of %s? "
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1735 real-file-name))))))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1736 ;; Actually write the back up file.
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1737 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1738 (if (or file-precious-flag
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1739 ; (file-symlink-p buffer-file-name)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1740 backup-by-copying
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1741 (and backup-by-copying-when-linked
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1742 (> (file-nlinks real-file-name) 1))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1743 (and backup-by-copying-when-mismatch
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1744 (let ((attr (file-attributes real-file-name)))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1745 (or (nth 9 attr)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1746 (not (file-ownership-preserved-p real-file-name))))))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1747 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1748 (copy-file real-file-name backupname t t)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1749 (file-error
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1750 ;; If copying fails because file BACKUPNAME
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1751 ;; is not writable, delete that file and try again.
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1752 (if (and (file-exists-p backupname)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1753 (not (file-writable-p backupname)))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1754 (delete-file backupname))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1755 (copy-file real-file-name backupname t t)))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1756 ;; rename-file should delete old backup.
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1757 (rename-file real-file-name backupname t)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1758 (setq setmodes (file-modes backupname)))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1759 (file-error
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1760 ;; If trouble writing the backup, write it in ~.
13903
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
1761 (setq backupname (expand-file-name
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
1762 (convert-standard-filename
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
1763 "~/%backup%~")))
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
1764 (message "Cannot write backup file; backing up in %s"
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
1765 (file-name-nondirectory backupname))
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1766 (sleep-for 1)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1767 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1768 (copy-file real-file-name backupname t t)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1769 (file-error
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1770 ;; If copying fails because file BACKUPNAME
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1771 ;; is not writable, delete that file and try again.
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1772 (if (and (file-exists-p backupname)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1773 (not (file-writable-p backupname)))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1774 (delete-file backupname))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1775 (copy-file real-file-name backupname t t)))))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1776 (setq buffer-backed-up t)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1777 ;; Now delete the old versions, if desired.
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1778 (if delete-old-versions
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1779 (while targets
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1780 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1781 (delete-file (car targets))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1782 (file-error nil))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1783 (setq targets (cdr targets))))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1784 setmodes)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1785 (file-error nil))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1786
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1787 (defun file-name-sans-versions (name &optional keep-backup-version)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1788 "Return FILENAME sans backup versions or strings.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1789 This is a separate procedure so your site-init or startup file can
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1790 redefine it.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1791 If the optional argument KEEP-BACKUP-VERSION is non-nil,
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1792 we do not remove backup version numbers, only true file version numbers."
7030
9e51b51e8595 Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents: 6899
diff changeset
1793 (let ((handler (find-file-name-handler name 'file-name-sans-versions)))
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1794 (if handler
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1795 (funcall handler 'file-name-sans-versions name keep-backup-version)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1796 (substring name 0
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1797 (if (eq system-type 'vax-vms)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1798 ;; VMS version number is (a) semicolon, optional
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1799 ;; sign, zero or more digits or (b) period, option
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1800 ;; sign, zero or more digits, provided this is the
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1801 ;; second period encountered outside of the
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1802 ;; device/directory part of the file name.
6309
9217f29851c2 Don't use triple-hyphen in a character class.
Karl Heuer <kwzh@gnu.org>
parents: 6294
diff changeset
1803 (or (string-match ";[-+]?[0-9]*\\'" name)
9217f29851c2 Don't use triple-hyphen in a character class.
Karl Heuer <kwzh@gnu.org>
parents: 6294
diff changeset
1804 (if (string-match "\\.[^]>:]*\\(\\.[-+]?[0-9]*\\)\\'"
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1805 name)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1806 (match-beginning 1))
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1807 (length name))
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1808 (if keep-backup-version
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1809 (length name)
12591
7caa97ba6a7b (file-name-sans-versions): Recognize version control version numbers.
Richard M. Stallman <rms@gnu.org>
parents: 12587
diff changeset
1810 (or (string-match "\\.~[0-9.]+~\\'" name)
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1811 (string-match "~\\'" name)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
1812 (length name))))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1813
8987
1db2285cec99 (file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8937
diff changeset
1814 (defun file-ownership-preserved-p (file)
1db2285cec99 (file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8937
diff changeset
1815 "Returns t if deleting FILE and rewriting it would preserve the owner."
1db2285cec99 (file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8937
diff changeset
1816 (let ((handler (find-file-name-handler file 'file-ownership-preserved-p)))
1db2285cec99 (file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8937
diff changeset
1817 (if handler
1db2285cec99 (file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8937
diff changeset
1818 (funcall handler 'file-ownership-preserved-p file)
11867
b00d51017e13 (file-ownership-preserved-p): Fix typo in previous change.
Karl Heuer <kwzh@gnu.org>
parents: 11817
diff changeset
1819 (let ((attributes (file-attributes file)))
11817
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
1820 ;; Return t if the file doesn't exist, since it's true that no
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
1821 ;; information would be lost by an (attempted) delete and create.
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
1822 (or (null attributes)
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
1823 (= (nth 2 attributes) (user-uid)))))))
8987
1db2285cec99 (file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8937
diff changeset
1824
8908
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1825 (defun file-name-sans-extension (filename)
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1826 "Return FILENAME sans final \"extension\".
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1827 The extension, in a file name, is the part that follows the last `.'."
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1828 (save-match-data
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1829 (let ((file (file-name-sans-versions (file-name-nondirectory filename)))
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1830 directory)
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1831 (if (string-match "\\.[^.]*\\'" file)
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1832 (if (setq directory (file-name-directory filename))
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1833 (expand-file-name (substring file 0 (match-beginning 0))
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1834 directory)
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1835 (substring file 0 (match-beginning 0)))
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1836 filename))))
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
1837
16440
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1838 (defun file-name-extension (filename &optional period)
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1839 "Return FILENAME's final \"extension\".
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1840 The extension, in a file name, is the part that follows the last `.'.
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1841 Return nil for extensionless file names such as `foo'.
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1842 Return the empty string for file names such as `foo.'.
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1843
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1844 If PERIOD is non-nil, then the returned value includes the period
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1845 that delimits the extension, and if FILENAME has no extension,
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1846 the value is \"\"."
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1847 (save-match-data
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1848 (let ((file (file-name-sans-versions (file-name-nondirectory filename))))
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1849 (if (string-match "\\.[^.]*\\'" file)
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1850 (substring file (+ (match-beginning 0) (if period 0 1)))
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1851 (if period
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1852 "")))))
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1853
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1854 (defun make-backup-file-name (file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1855 "Create the non-numeric backup file name for FILE.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1856 This is a separate function so you can redefine it for customization."
15269
b6381b3a6c99 (make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents: 15056
diff changeset
1857 (if (and (eq system-type 'ms-dos)
b6381b3a6c99 (make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents: 15056
diff changeset
1858 (not (msdos-long-file-names)))
5453
691f7961e32c [ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents: 5398
diff changeset
1859 (let ((fn (file-name-nondirectory file)))
691f7961e32c [ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents: 5398
diff changeset
1860 (concat (file-name-directory file)
13749
2015901ab992 (make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents: 13743
diff changeset
1861 (or
2015901ab992 (make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents: 13743
diff changeset
1862 (and (string-match "\\`[^.]+\\'" fn)
2015901ab992 (make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents: 13743
diff changeset
1863 (concat (match-string 0 fn) ".~"))
2015901ab992 (make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents: 13743
diff changeset
1864 (and (string-match "\\`[^.]+\\.\\(..?\\)?" fn)
2015901ab992 (make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents: 13743
diff changeset
1865 (concat (match-string 0 fn) "~")))))
5453
691f7961e32c [ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents: 5398
diff changeset
1866 (concat file "~")))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1867
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1868 (defun backup-file-name-p (file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1869 "Return non-nil if FILE is a backup file name (numeric or not).
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1870 This is a separate function so you can redefine it for customization.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1871 You may need to redefine `file-name-sans-versions' as well."
13749
2015901ab992 (make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents: 13743
diff changeset
1872 (string-match "~\\'" file))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1873
17734
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1874 (defvar backup-extract-version-start)
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1875
890
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
1876 ;; This is used in various files.
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
1877 ;; The usage of bv-length is not very clean,
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
1878 ;; but I can't see a good alternative,
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
1879 ;; so as of now I am leaving it alone.
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
1880 (defun backup-extract-version (fn)
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
1881 "Given the name of a numeric backup file, return the backup number.
17734
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1882 Uses the free variable `backup-extract-version-start', whose value should be
890
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
1883 the index in the name where the version number begins."
17734
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1884 (if (and (string-match "[0-9]+~$" fn backup-extract-version-start)
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1885 (= (match-beginning 0) backup-extract-version-start))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1886 (string-to-int (substring fn backup-extract-version-start -1))
890
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
1887 0))
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
1888
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1889 ;; I believe there is no need to alter this behavior for VMS;
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1890 ;; since backup files are not made on VMS, it should not get called.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1891 (defun find-backup-file-name (fn)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1892 "Find a file name for a backup file, and suggestions for deletions.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1893 Value is a list whose car is the name for the backup file
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1894 and whose cdr is a list of old versions to consider deleting now.
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1895 If the value is nil, don't make a backup."
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1896 (let ((handler (find-file-name-handler fn 'find-backup-file-name)))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1897 ;; Run a handler for this function so that ange-ftp can refuse to do it.
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1898 (if handler
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1899 (funcall handler 'find-backup-file-name fn)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1900 (if (eq version-control 'never)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1901 (list (make-backup-file-name fn))
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1902 (let* ((base-versions (concat (file-name-nondirectory fn) ".~"))
17734
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1903 (backup-extract-version-start (length base-versions))
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1904 possibilities
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1905 (versions nil)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1906 (high-water-mark 0)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1907 (deserve-versions-p nil)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1908 (number-to-delete 0))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1909 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1910 (setq possibilities (file-name-all-completions
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1911 base-versions
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1912 (file-name-directory fn))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1913 versions (sort (mapcar
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1914 (function backup-extract-version)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1915 possibilities)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1916 '<)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1917 high-water-mark (apply 'max 0 versions)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1918 deserve-versions-p (or version-control
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1919 (> high-water-mark 0))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1920 number-to-delete (- (length versions)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1921 kept-old-versions kept-new-versions -1))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1922 (file-error
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1923 (setq possibilities nil)))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1924 (if (not deserve-versions-p)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1925 (list (make-backup-file-name fn))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1926 (cons (concat fn ".~" (int-to-string (1+ high-water-mark)) "~")
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1927 (if (and (> number-to-delete 0)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1928 ;; Delete nothing if there is overflow
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1929 ;; in the number of versions to keep.
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1930 (>= (+ kept-new-versions kept-old-versions -1) 0))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1931 (mapcar (function (lambda (n)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1932 (concat fn ".~" (int-to-string n) "~")))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1933 (let ((v (nthcdr kept-old-versions versions)))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1934 (rplacd (nthcdr (1- number-to-delete) v) ())
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
1935 v))))))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1936
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1937 (defun file-nlinks (filename)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1938 "Return number of names file FILENAME has."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1939 (car (cdr (file-attributes filename))))
1229
d4324e885a41 (file-relative-name): New function.
Roland McGrath <roland@gnu.org>
parents: 1212
diff changeset
1940
d4324e885a41 (file-relative-name): New function.
Roland McGrath <roland@gnu.org>
parents: 1212
diff changeset
1941 (defun file-relative-name (filename &optional directory)
17379
3147024a8918 (file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents: 17256
diff changeset
1942 "Convert FILENAME to be relative to DIRECTORY (default: default-directory).
3147024a8918 (file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents: 17256
diff changeset
1943 This function returns a relative file name which is equivalent to FILENAME
3147024a8918 (file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents: 17256
diff changeset
1944 when used with that default directory as the default.
3147024a8918 (file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents: 17256
diff changeset
1945 If this is impossible (which can happen on MSDOS and Windows
3147024a8918 (file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents: 17256
diff changeset
1946 when the file name and directory use different drive names)
3147024a8918 (file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents: 17256
diff changeset
1947 then it returns FILENAME."
16976
c7683cba14c7 (file-relative-name): Protect the match-data.
Erik Naggum <erik@naggum.no>
parents: 16971
diff changeset
1948 (save-match-data
17734
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1949 (let ((fname (expand-file-name filename)))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1950 (setq directory (file-name-as-directory
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1951 (expand-file-name (or directory default-directory))))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1952 ;; On Microsoft OSes, if FILENAME and DIRECTORY have different
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1953 ;; drive names, they can't be relative, so return the absolute name.
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1954 (if (and (or (eq system-type 'ms-dos)
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1955 (eq system-type 'windows-nt))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1956 (not (string-equal (substring fname 0 2)
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1957 (substring directory 0 2))))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1958 filename
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1959 (let ((ancestor ""))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1960 (while (not (string-match (concat "^" (regexp-quote directory)) fname))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1961 (setq directory (file-name-directory (substring directory 0 -1))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1962 ancestor (concat "../" ancestor)))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
1963 (concat ancestor (substring fname (match-end 0))))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1964
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1965 (defun save-buffer (&optional args)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1966 "Save current buffer in visited file if modified. Versions described below.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1967 By default, makes the previous version into a backup file
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1968 if previously requested or if this is the first save.
13823
881e5c4a01cb (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13749
diff changeset
1969 With 1 \\[universal-argument], marks this version
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1970 to become a backup when the next save is done.
13823
881e5c4a01cb (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13749
diff changeset
1971 With 2 \\[universal-argument]'s,
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1972 unconditionally makes the previous version into a backup file.
13823
881e5c4a01cb (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13749
diff changeset
1973 With 3 \\[universal-argument]'s, marks this version
881e5c4a01cb (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13749
diff changeset
1974 to become a backup when the next save is done,
881e5c4a01cb (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13749
diff changeset
1975 and unconditionally makes the previous version into a backup file.
881e5c4a01cb (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13749
diff changeset
1976
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1977 With argument of 0, never makes the previous version into a backup file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1978
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1979 If a file's name is FOO, the names of its numbered backup versions are
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1980 FOO.~i~ for various integers i. A non-numbered backup file is called FOO~.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1981 Numeric backups (rather than FOO~) will be made if value of
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1982 `version-control' is not the atom `never' and either there are already
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1983 numeric versions of the file being backed up, or `version-control' is
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1984 non-nil.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1985 We don't want excessive versions piling up, so there are variables
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1986 `kept-old-versions', which tells Emacs how many oldest versions to keep,
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1987 and `kept-new-versions', which tells how many newest versions to keep.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1988 Defaults are 2 old versions and 2 new.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1989 `dired-kept-versions' controls dired's clean-directory (.) command.
8157
14766204c0fe (delete-old-versions): Var renamed from trim-versions-without-asking.
Richard M. Stallman <rms@gnu.org>
parents: 8151
diff changeset
1990 If `delete-old-versions' is nil, system will query user
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1991 before trimming versions. Otherwise it does it silently."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1992 (interactive "p")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1993 (let ((modp (buffer-modified-p))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1994 (large (> (buffer-size) 50000))
8462
c281b470d633 (save-buffer): Unconditionally make a backup with 2 or
Richard M. Stallman <rms@gnu.org>
parents: 8374
diff changeset
1995 (make-backup-files (or (and make-backup-files (not (eq args 0)))
c281b470d633 (save-buffer): Unconditionally make a backup with 2 or
Richard M. Stallman <rms@gnu.org>
parents: 8374
diff changeset
1996 (memq args '(16 64)))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1997 (and modp (memq args '(16 64)) (setq buffer-backed-up nil))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1998 (if (and modp large) (message "Saving file %s..." (buffer-file-name)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1999 (basic-save-buffer)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2000 (and modp (memq args '(4 64)) (setq buffer-backed-up nil))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2001
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2002 (defun delete-auto-save-file-if-necessary (&optional force)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2003 "Delete auto-save file for current buffer if `delete-auto-save-files' is t.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2004 Normally delete only if the file was written by this Emacs since
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2005 the last real save, but optional arg FORCE non-nil means delete anyway."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2006 (and buffer-auto-save-file-name delete-auto-save-files
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2007 (not (string= buffer-file-name buffer-auto-save-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2008 (or force (recent-auto-save-p))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2009 (progn
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2010 (condition-case ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2011 (delete-file buffer-auto-save-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2012 (file-error nil))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2013 (set-buffer-auto-saved))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2014
12963
337ba86981f5 (basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12930
diff changeset
2015 (defvar after-save-hook nil
337ba86981f5 (basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12930
diff changeset
2016 "Normal hook that is run after a buffer is saved to its file.")
337ba86981f5 (basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12930
diff changeset
2017
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2018 (defun basic-save-buffer ()
12963
337ba86981f5 (basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12930
diff changeset
2019 "Save the current buffer in its visited file, if it has been modified.
337ba86981f5 (basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12930
diff changeset
2020 After saving the buffer, run `after-save-hook'."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2021 (interactive)
10298
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2022 (save-excursion
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2023 ;; In an indirect buffer, save its base buffer instead.
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2024 (if (buffer-base-buffer)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2025 (set-buffer (buffer-base-buffer)))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2026 (if (buffer-modified-p)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2027 (let ((recent-save (recent-auto-save-p))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2028 setmodes tempsetmodes)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2029 ;; On VMS, rename file and buffer to get rid of version number.
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2030 (if (and (eq system-type 'vax-vms)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2031 (not (string= buffer-file-name
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2032 (file-name-sans-versions buffer-file-name))))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2033 (let (buffer-new-name)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2034 ;; Strip VMS version number before save.
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2035 (setq buffer-file-name
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2036 (file-name-sans-versions buffer-file-name))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2037 ;; Construct a (unique) buffer name to correspond.
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2038 (let ((buf (create-file-buffer (downcase buffer-file-name))))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2039 (setq buffer-new-name (buffer-name buf))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2040 (kill-buffer buf))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2041 (rename-buffer buffer-new-name)))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2042 ;; If buffer has no file name, ask user for one.
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2043 (or buffer-file-name
12895
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2044 (let ((filename
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2045 (expand-file-name
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2046 (read-file-name "File to save in: ") nil)))
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2047 (and (file-exists-p filename)
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2048 (or (y-or-n-p (format "File `%s' exists; overwrite? "
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2049 filename))
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2050 (error "Canceled")))
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2051 (set-visited-file-name filename)))
10298
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2052 (or (verify-visited-file-modtime (current-buffer))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2053 (not (file-exists-p buffer-file-name))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2054 (yes-or-no-p
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2055 (format "%s has changed since visited or saved. Save anyway? "
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2056 (file-name-nondirectory buffer-file-name)))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2057 (error "Save not confirmed"))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2058 (save-restriction
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2059 (widen)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2060 (and (> (point-max) 1)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2061 (/= (char-after (1- (point-max))) ?\n)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2062 (not (and (eq selective-display t)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2063 (= (char-after (1- (point-max))) ?\r)))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2064 (or (eq require-final-newline t)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2065 (and require-final-newline
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2066 (y-or-n-p
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2067 (format "Buffer %s does not end in newline. Add one? "
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2068 (buffer-name)))))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2069 (save-excursion
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2070 (goto-char (point-max))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2071 (insert ?\n)))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2072 (or (run-hook-with-args-until-success 'write-contents-hooks)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2073 (run-hook-with-args-until-success 'local-write-file-hooks)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2074 (run-hook-with-args-until-success 'write-file-hooks)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2075 ;; If a hook returned t, file is already "written".
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2076 ;; Otherwise, write it the usual way now.
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2077 (setq setmodes (basic-save-buffer-1)))
13326
4e1b078121ad (set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 13289
diff changeset
2078 (setq buffer-file-number
4e1b078121ad (set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 13289
diff changeset
2079 (nthcdr 10 (file-attributes buffer-file-name)))
10298
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2080 (if setmodes
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2081 (condition-case ()
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2082 (set-file-modes buffer-file-name setmodes)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2083 (error nil))))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2084 ;; If the auto-save file was recent before this command,
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2085 ;; delete it now.
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2086 (delete-auto-save-file-if-necessary recent-save)
12930
0fac64b0452e (basic-save-buffer): Call vc-after-save.
Richard M. Stallman <rms@gnu.org>
parents: 12929
diff changeset
2087 ;; Support VC `implicit' locking.
0fac64b0452e (basic-save-buffer): Call vc-after-save.
Richard M. Stallman <rms@gnu.org>
parents: 12929
diff changeset
2088 (vc-after-save)
10298
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2089 (run-hooks 'after-save-hook))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2090 (message "(No changes need to be saved)"))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2091
6574
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2092 ;; This does the "real job" of writing a buffer into its visited file
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2093 ;; and making a backup file. This is what is normally done
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2094 ;; but inhibited if one of write-file-hooks returns non-nil.
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2095 ;; It returns a value to store in setmodes.
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2096 (defun basic-save-buffer-1 ()
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2097 (let (tempsetmodes setmodes)
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2098 (if (not (file-writable-p buffer-file-name))
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2099 (let ((dir (file-name-directory buffer-file-name)))
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2100 (if (not (file-directory-p dir))
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2101 (error "%s is not a directory" dir)
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2102 (if (not (file-exists-p buffer-file-name))
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2103 (error "Directory %s write-protected" dir)
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2104 (if (yes-or-no-p
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2105 (format "File %s is write-protected; try to save anyway? "
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2106 (file-name-nondirectory
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2107 buffer-file-name)))
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2108 (setq tempsetmodes t)
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2109 (error "Attempt to save to a file which you aren't allowed to write"))))))
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2110 (or buffer-backed-up
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2111 (setq setmodes (backup-buffer)))
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2112 (let ((dir (file-name-directory buffer-file-name)))
8362
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2113 (if (and file-precious-flag
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2114 (file-writable-p dir))
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2115 ;; If file is precious, write temp name, then rename it.
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2116 ;; This requires write access to the containing dir,
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2117 ;; which is why we don't try it if we don't have that access.
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2118 (let ((realname buffer-file-name)
8937
065d01c10c78 (basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents: 8908
diff changeset
2119 tempname temp nogood i succeed
065d01c10c78 (basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents: 8908
diff changeset
2120 (old-modtime (visited-file-modtime)))
8362
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2121 (setq i 0)
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2122 (setq nogood t)
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2123 ;; Find the temporary name to write under.
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2124 (while nogood
13903
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
2125 (setq tempname (format
15269
b6381b3a6c99 (make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents: 15056
diff changeset
2126 (if (and (eq system-type 'ms-dos)
b6381b3a6c99 (make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents: 15056
diff changeset
2127 (not (msdos-long-file-names)))
13903
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
2128 "%s#%d.tm#" ; MSDOS limits files to 8+3
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
2129 "%s#tmp#%d")
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
2130 dir i))
8362
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2131 (setq nogood (file-exists-p tempname))
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2132 (setq i (1+ i)))
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2133 (unwind-protect
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2134 (progn (clear-visited-file-modtime)
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2135 (write-region (point-min) (point-max)
12852
0b04a441c06d (basic-save-buffer-1): Pass new arg to write-region.
Richard M. Stallman <rms@gnu.org>
parents: 12850
diff changeset
2136 tempname nil realname
0b04a441c06d (basic-save-buffer-1): Pass new arg to write-region.
Richard M. Stallman <rms@gnu.org>
parents: 12850
diff changeset
2137 buffer-file-truename)
8362
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2138 (setq succeed t))
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2139 ;; If writing the temp file fails,
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2140 ;; delete the temp file.
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2141 (or succeed
8937
065d01c10c78 (basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents: 8908
diff changeset
2142 (progn
065d01c10c78 (basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents: 8908
diff changeset
2143 (delete-file tempname)
065d01c10c78 (basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents: 8908
diff changeset
2144 (set-visited-file-modtime old-modtime))))
8362
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2145 ;; Since we have created an entirely new file
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2146 ;; and renamed it, make sure it gets the
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2147 ;; right permission bits set.
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2148 (setq setmodes (file-modes buffer-file-name))
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2149 ;; We succeeded in writing the temp file,
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2150 ;; so rename it.
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2151 (rename-file tempname buffer-file-name t))
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2152 ;; If file not writable, see if we can make it writable
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2153 ;; temporarily while we write it.
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2154 ;; But no need to do so if we have just backed it up
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2155 ;; (setmodes is set) because that says we're superseding.
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2156 (cond ((and tempsetmodes (not setmodes))
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2157 ;; Change the mode back, after writing.
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2158 (setq setmodes (file-modes buffer-file-name))
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2159 (set-file-modes buffer-file-name 511)))
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2160 (write-region (point-min) (point-max)
12852
0b04a441c06d (basic-save-buffer-1): Pass new arg to write-region.
Richard M. Stallman <rms@gnu.org>
parents: 12850
diff changeset
2161 buffer-file-name nil t buffer-file-truename)))
6574
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2162 setmodes))
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2163
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2164 (defun save-some-buffers (&optional arg exiting)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2165 "Save some modified file-visiting buffers. Asks user about each one.
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
2166 Optional argument (the prefix) non-nil means save all with no questions.
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
2167 Optional second argument EXITING means ask about certain non-file buffers
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
2168 as well as about file buffers."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2169 (interactive "P")
891
f7de428cb8bf *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 890
diff changeset
2170 (save-window-excursion
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2171 (let* ((queried nil)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2172 (files-done
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2173 (map-y-or-n-p
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2174 (function
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2175 (lambda (buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2176 (and (buffer-modified-p buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2177 (not (buffer-base-buffer buffer))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2178 (or
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2179 (buffer-file-name buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2180 (and exiting
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2181 (progn
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2182 (set-buffer buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2183 (and buffer-offer-save (> (buffer-size) 0)))))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2184 (if arg
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2185 t
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2186 (setq queried t)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2187 (if (buffer-file-name buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2188 (format "Save file %s? "
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2189 (buffer-file-name buffer))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2190 (format "Save buffer %s? "
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2191 (buffer-name buffer)))))))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2192 (function
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2193 (lambda (buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2194 (set-buffer buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2195 (save-buffer)))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2196 (buffer-list)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2197 '("buffer" "buffers" "save")
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2198 (list (list ?\C-r (lambda (buf)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2199 (view-buffer buf)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2200 (setq view-exit-action
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2201 '(lambda (ignore)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2202 (exit-recursive-edit)))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2203 (recursive-edit)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2204 ;; Return nil to ask about BUF again.
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2205 nil)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2206 "display the current buffer"))))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2207 (abbrevs-done
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2208 (and save-abbrevs abbrevs-changed
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2209 (progn
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2210 (if (or arg
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2211 (y-or-n-p (format "Save abbrevs in %s? "
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2212 abbrev-file-name)))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2213 (write-abbrev-file nil))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2214 ;; Don't keep bothering user if he says no.
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2215 (setq abbrevs-changed nil)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2216 t))))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2217 (or queried (> files-done 0) abbrevs-done
5398
499f25507242 (save-some-buffers): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 5389
diff changeset
2218 (message "(No files need saving)")))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2219
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2220 (defun not-modified (&optional arg)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2221 "Mark current buffer as unmodified, not needing to be saved.
10430
3499c4e1e82f (not-modified): Doc fix.
Roland McGrath <roland@gnu.org>
parents: 10412
diff changeset
2222 With prefix arg, mark buffer as modified, so \\[save-buffer] will save.
3499c4e1e82f (not-modified): Doc fix.
Roland McGrath <roland@gnu.org>
parents: 10412
diff changeset
2223
3499c4e1e82f (not-modified): Doc fix.
Roland McGrath <roland@gnu.org>
parents: 10412
diff changeset
2224 It is not a good idea to use this function in Lisp programs, because it
3499c4e1e82f (not-modified): Doc fix.
Roland McGrath <roland@gnu.org>
parents: 10412
diff changeset
2225 prints a message in the minibuffer. Instead, use `set-buffer-modified-p'."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2226 (interactive "P")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2227 (message (if arg "Modification-flag set"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2228 "Modification-flag cleared"))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2229 (set-buffer-modified-p arg))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2230
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2231 (defun toggle-read-only (&optional arg)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2232 "Change whether this buffer is visiting its file read-only.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2233 With arg, set read-only iff arg is positive."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2234 (interactive "P")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2235 (setq buffer-read-only
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2236 (if (null arg)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2237 (not buffer-read-only)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2238 (> (prefix-numeric-value arg) 0)))
11563
63215d2a1e3f (toggle-read-only, rename-uniquely): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 11553
diff changeset
2239 (force-mode-line-update))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2240
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2241 (defun insert-file (filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2242 "Insert contents of file FILENAME into buffer after point.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2243 Set mark after the inserted text.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2244
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2245 This function is meant for the user to run interactively.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2246 Don't call it from programs! Use `insert-file-contents' instead.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2247 \(Its calling sequence is different; see its documentation)."
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2248 (interactive "*fInsert file: ")
3835
e3a00a940cf4 (insert-file): Report error if file is directory.
Richard M. Stallman <rms@gnu.org>
parents: 3709
diff changeset
2249 (if (file-directory-p filename)
e3a00a940cf4 (insert-file): Report error if file is directory.
Richard M. Stallman <rms@gnu.org>
parents: 3709
diff changeset
2250 (signal 'file-error (list "Opening input file" "file is a directory"
e3a00a940cf4 (insert-file): Report error if file is directory.
Richard M. Stallman <rms@gnu.org>
parents: 3709
diff changeset
2251 filename)))
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2252 (let ((tem (insert-file-contents filename)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2253 (push-mark (+ (point) (car (cdr tem))))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2254
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2255 (defun append-to-file (start end filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2256 "Append the contents of the region to the end of file FILENAME.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2257 When called from a function, expects three arguments,
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2258 START, END and FILENAME. START and END are buffer positions
17004
cd1d930a2c98 (find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents: 16976
diff changeset
2259 saying what text to write.
cd1d930a2c98 (find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents: 16976
diff changeset
2260 A prefix argument enables user to specify the coding-system interactively."
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2261 (interactive "r\nFAppend to file: ")
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2262 (write-region start end filename t))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2263
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2264 (defun file-newest-backup (filename)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2265 "Return most recent backup file for FILENAME or nil if no backups exist."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2266 (let* ((filename (expand-file-name filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2267 (file (file-name-nondirectory filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2268 (dir (file-name-directory filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2269 (comp (file-name-all-completions file dir))
14927
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2270 (newest nil)
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2271 tem)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2272 (while comp
14927
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2273 (setq tem (car comp)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2274 comp (cdr comp))
14927
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2275 (cond ((and (backup-file-name-p tem)
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2276 (string= (file-name-sans-versions tem) file))
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2277 (setq tem (concat dir tem))
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2278 (if (or (null newest)
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2279 (file-newer-than-file-p tem newest))
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2280 (setq newest tem)))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2281 newest))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2282
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2283 (defun rename-uniquely ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2284 "Rename current buffer to a similar name not already taken.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2285 This function is useful for creating multiple shell process buffers
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2286 or multiple mail buffers, etc."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2287 (interactive)
11522
5177611e8e4d (rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents: 11463
diff changeset
2288 (save-match-data
11553
03aaf11843d1 (rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents: 11522
diff changeset
2289 (let* ((base-name (if (and (string-match "<[0-9]+>\\'" (buffer-name))
03aaf11843d1 (rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents: 11522
diff changeset
2290 (not (and buffer-file-name
03aaf11843d1 (rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents: 11522
diff changeset
2291 (string= (buffer-name)
03aaf11843d1 (rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents: 11522
diff changeset
2292 (file-name-nondirectory
03aaf11843d1 (rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents: 11522
diff changeset
2293 buffer-file-name)))))
03aaf11843d1 (rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents: 11522
diff changeset
2294 ;; If the existing buffer name has a <NNN>,
03aaf11843d1 (rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents: 11522
diff changeset
2295 ;; which isn't part of the file name (if any),
03aaf11843d1 (rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents: 11522
diff changeset
2296 ;; then get rid of that.
11522
5177611e8e4d (rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents: 11463
diff changeset
2297 (substring (buffer-name) 0 (match-beginning 0))
5177611e8e4d (rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents: 11463
diff changeset
2298 (buffer-name)))
5177611e8e4d (rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents: 11463
diff changeset
2299 (new-buf (generate-new-buffer base-name))
5177611e8e4d (rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents: 11463
diff changeset
2300 (name (buffer-name new-buf)))
5177611e8e4d (rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents: 11463
diff changeset
2301 (kill-buffer new-buf)
5177611e8e4d (rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents: 11463
diff changeset
2302 (rename-buffer name)
11563
63215d2a1e3f (toggle-read-only, rename-uniquely): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 11553
diff changeset
2303 (force-mode-line-update))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
2304
1537
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2305 (defun make-directory (dir &optional parents)
3672
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2306 "Create the directory DIR and any nonexistent parent dirs.
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2307 Interactively, the default choice of directory to create
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2308 is the current default directory for file names.
13980
ad74bc8e877f (make-directory): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13903
diff changeset
2309 That is useful when you have visited a file in a nonexistent directory.
3672
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2310
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2311 Noninteractively, the second (optional) argument PARENTS says whether
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2312 to create parent directories if they don't exist."
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2313 (interactive
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2314 (list (read-file-name "Make directory: " default-directory default-directory
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2315 nil nil)
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2316 t))
7030
9e51b51e8595 Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents: 6899
diff changeset
2317 (let ((handler (find-file-name-handler dir 'make-directory)))
1537
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2318 (if handler
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2319 (funcall handler 'make-directory dir parents)
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2320 (if (not parents)
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2321 (make-directory-internal dir)
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2322 (let ((dir (directory-file-name (expand-file-name dir)))
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2323 create-list)
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2324 (while (not (file-exists-p dir))
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2325 (setq create-list (cons dir create-list)
1537
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2326 dir (directory-file-name (file-name-directory dir))))
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2327 (while create-list
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2328 (make-directory-internal (car create-list))
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2329 (setq create-list (cdr create-list))))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2330
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2331 (put 'revert-buffer-function 'permanent-local t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2332 (defvar revert-buffer-function nil
8160
1013d56a1133 (revert-buffer-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8158
diff changeset
2333 "Function to use to revert this buffer, or nil to do the default.
1013d56a1133 (revert-buffer-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8158
diff changeset
2334 The function receives two arguments IGNORE-AUTO and NOCONFIRM,
1013d56a1133 (revert-buffer-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8158
diff changeset
2335 which are the arguments that `revert-buffer' received.")
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2336
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2337 (put 'revert-buffer-insert-file-contents-function 'permanent-local t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2338 (defvar revert-buffer-insert-file-contents-function nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2339 "Function to use to insert contents when reverting this buffer.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2340 Gets two args, first the nominal file name to use,
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2341 and second, t if reading the auto-save file.")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2342
11995
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2343 (defvar before-revert-hook nil
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2344 "Normal hook for `revert-buffer' to run before reverting.
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2345 If `revert-buffer-function' is used to override the normal revert
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2346 mechanism, this hook is not used.")
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2347
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2348 (defvar after-revert-hook nil
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2349 "Normal hook for `revert-buffer' to run after reverting.
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2350 Note that the hook value that it runs is the value that was in effect
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2351 before reverting; that makes a difference if you have buffer-local
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2352 hook functions.
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2353
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2354 If `revert-buffer-function' is used to override the normal revert
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2355 mechanism, this hook is not used.")
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2356
13857
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
2357 (defun revert-buffer (&optional ignore-auto noconfirm preserve-modes)
16544
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2358 "Replace current buffer text with the text of the visited file on disk.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2359 This undoes all changes since the file was visited or saved.
605
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
2360 With a prefix argument, offer to revert from latest auto-save file, if
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
2361 that is more recent than the visited file.
1905
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2362
16544
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2363 This command also works for special buffers that contain text which
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2364 doesn't come from a file, but reflects some other data base instead:
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2365 for example, Dired buffers and buffer-list buffers. In these cases,
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2366 it reconstructs the buffer contents from the appropriate data base.
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2367
10942
3f77513d0a77 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10901
diff changeset
2368 When called from Lisp, the first argument is IGNORE-AUTO; only offer
1905
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2369 to revert from the auto-save file when this is nil. Note that the
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2370 sense of this argument is the reverse of the prefix argument, for the
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2371 sake of backward compatibility. IGNORE-AUTO is optional, defaulting
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2372 to nil.
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2373
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2374 Optional second argument NOCONFIRM means don't ask for confirmation at
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2375 all.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2376
15890
c2ef756791fe (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15753
diff changeset
2377 Optional third argument PRESERVE-MODES non-nil means don't alter
c2ef756791fe (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15753
diff changeset
2378 the files modes. Normally we reinitialize them using `normal-mode'.
c2ef756791fe (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15753
diff changeset
2379
605
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
2380 If the value of `revert-buffer-function' is non-nil, it is called to
16544
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2381 do all the work for this command. Otherwise, the hooks
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2382 `before-revert-hook' and `after-revert-hook' are run at the beginning
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2383 and the end, and if `revert-buffer-insert-file-contents-function' is
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2384 non-nil, it is called instead of rereading visited file contents."
5624
76f618230217 (revert-buffer): Run after-revert-hook.
Richard M. Stallman <rms@gnu.org>
parents: 5621
diff changeset
2385
1905
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2386 ;; I admit it's odd to reverse the sense of the prefix argument, but
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2387 ;; there is a lot of code out there which assumes that the first
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2388 ;; argument should be t to avoid consulting the auto-save file, and
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2389 ;; there's no straightforward way to encourage authors to notice a
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2390 ;; reversal of the argument sense. So I'm just changing the user
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2391 ;; interface, but leaving the programmatic interface the same.
10847
c79a2dca8f75 (revert-buffer): Use current-prefix-arg, not prefix-arg.
Karl Heuer <kwzh@gnu.org>
parents: 10735
diff changeset
2392 (interactive (list (not current-prefix-arg)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2393 (if revert-buffer-function
1905
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2394 (funcall revert-buffer-function ignore-auto noconfirm)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2395 (let* ((opoint (point))
1905
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2396 (auto-save-p (and (not ignore-auto)
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2397 (recent-auto-save-p)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2398 buffer-auto-save-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2399 (file-readable-p buffer-auto-save-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2400 (y-or-n-p
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2401 "Buffer has been auto-saved recently. Revert from auto-save file? ")))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2402 (file-name (if auto-save-p
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2403 buffer-auto-save-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2404 buffer-file-name)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2405 (cond ((null file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2406 (error "Buffer does not seem to be associated with any file"))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2407 ((or noconfirm
17894
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2408 (and (not (buffer-modified-p))
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2409 (let ((tail revert-without-query)
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2410 (found nil))
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2411 (while tail
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2412 (if (string-match (car tail) file-name)
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2413 (setq found t))
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2414 (setq tail (cdr tail)))
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2415 found))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2416 (yes-or-no-p (format "Revert buffer from file %s? "
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2417 file-name)))
5716
82588f97d478 (revert-buffer): reposition after-revert-hook, and add before-revert-hook.
Karl Heuer <kwzh@gnu.org>
parents: 5624
diff changeset
2418 (run-hooks 'before-revert-hook)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2419 ;; If file was backed up but has changed since,
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2420 ;; we shd make another backup.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2421 (and (not auto-save-p)
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
2422 (not (verify-visited-file-modtime (current-buffer)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2423 (setq buffer-backed-up nil))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2424 ;; Get rid of all undo records for this buffer.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2425 (or (eq buffer-undo-list t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2426 (setq buffer-undo-list nil))
11982
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2427 ;; Effectively copy the after-revert-hook status,
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2428 ;; since after-find-file will clobber it.
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2429 (let ((global-hook (default-value 'after-revert-hook))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2430 (local-hook-p (local-variable-p 'after-revert-hook))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2431 (local-hook (and (local-variable-p 'after-revert-hook)
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2432 after-revert-hook)))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2433 (let (buffer-read-only
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2434 ;; Don't make undo records for the reversion.
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2435 (buffer-undo-list t))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2436 (if revert-buffer-insert-file-contents-function
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2437 (funcall revert-buffer-insert-file-contents-function
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2438 file-name auto-save-p)
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2439 (if (not (file-exists-p file-name))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2440 (error "File %s no longer exists!" file-name))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2441 ;; Bind buffer-file-name to nil
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2442 ;; so that we don't try to lock the file.
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2443 (let ((buffer-file-name nil))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2444 (or auto-save-p
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2445 (unlock-buffer)))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2446 (widen)
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2447 (insert-file-contents file-name (not auto-save-p)
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2448 nil nil t)))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2449 (goto-char (min opoint (point-max)))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2450 ;; Recompute the truename in case changes in symlinks
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2451 ;; have changed the truename.
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2452 (setq buffer-file-truename
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2453 (abbreviate-file-name (file-truename buffer-file-name)))
13857
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
2454 (after-find-file nil nil t t preserve-modes)
11982
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2455 ;; Run after-revert-hook as it was before we reverted.
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2456 (setq-default revert-buffer-internal-hook global-hook)
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2457 (if local-hook-p
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2458 (progn
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2459 (make-local-variable 'revert-buffer-internal-hook)
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2460 (setq revert-buffer-internal-hook local-hook))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2461 (kill-local-variable 'revert-buffer-internal-hook))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
2462 (run-hooks 'revert-buffer-internal-hook))
5716
82588f97d478 (revert-buffer): reposition after-revert-hook, and add before-revert-hook.
Karl Heuer <kwzh@gnu.org>
parents: 5624
diff changeset
2463 t)))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2464
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2465 (defun recover-file (file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2466 "Visit file FILE, but get contents from its last auto-save file."
10712
5b86ce0cddb5 (recover-file): Use ordinary `f' to read file name.
Richard M. Stallman <rms@gnu.org>
parents: 10430
diff changeset
2467 ;; Actually putting the file name in the minibuffer should be used
5b86ce0cddb5 (recover-file): Use ordinary `f' to read file name.
Richard M. Stallman <rms@gnu.org>
parents: 10430
diff changeset
2468 ;; only rarely.
5b86ce0cddb5 (recover-file): Use ordinary `f' to read file name.
Richard M. Stallman <rms@gnu.org>
parents: 10430
diff changeset
2469 ;; Not just because users often use the default.
13693
40766c32c127 (recover-file): Also recover new, unsaved files.
Erik Naggum <erik@naggum.no>
parents: 13662
diff changeset
2470 (interactive "FRecover file: ")
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2471 (setq file (expand-file-name file))
5958
64fa4e0f3fce (recover-file): Call auto-save-file-name-p correctly.
Richard M. Stallman <rms@gnu.org>
parents: 5956
diff changeset
2472 (if (auto-save-file-name-p (file-name-nondirectory file))
64fa4e0f3fce (recover-file): Call auto-save-file-name-p correctly.
Richard M. Stallman <rms@gnu.org>
parents: 5956
diff changeset
2473 (error "%s is an auto-save file" file))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2474 (let ((file-name (let ((buffer-file-name file))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2475 (make-auto-save-file-name))))
12846
fc74ffbce5a9 (recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents: 12740
diff changeset
2476 (cond ((if (file-exists-p file)
fc74ffbce5a9 (recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents: 12740
diff changeset
2477 (not (file-newer-than-file-p file-name file))
fc74ffbce5a9 (recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents: 12740
diff changeset
2478 (not (file-exists-p file-name)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2479 (error "Auto-save file %s not current" file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2480 ((save-window-excursion
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2481 (if (not (eq system-type 'vax-vms))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2482 (with-output-to-temp-buffer "*Directory*"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2483 (buffer-disable-undo standard-output)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2484 (call-process "ls" nil standard-output nil
736
18b892513cb7 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 735
diff changeset
2485 (if (file-symlink-p file) "-lL" "-l")
18b892513cb7 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 735
diff changeset
2486 file file-name)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2487 (yes-or-no-p (format "Recover auto save file %s? " file-name)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2488 (switch-to-buffer (find-file-noselect file t))
17004
cd1d930a2c98 (find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents: 16976
diff changeset
2489 (let ((buffer-read-only nil)
cd1d930a2c98 (find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents: 16976
diff changeset
2490 ;; Auto-saved file shoule be read without any code conversion.
cd1d930a2c98 (find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents: 16976
diff changeset
2491 (coding-system-for-read 'no-conversion))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2492 (erase-buffer)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2493 (insert-file-contents file-name nil))
1212
de70f50101c0 (after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents: 1182
diff changeset
2494 (after-find-file nil nil t))
17525
a92a4702711a (recover-file): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 17421
diff changeset
2495 (t (error "Recover-file cancelled")))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2496
11739
a9614b779859 (recover-session): Renamed from multiple-recover.
Richard M. Stallman <rms@gnu.org>
parents: 11636
diff changeset
2497 (defun recover-session ()
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2498 "Recover auto save files from a previous Emacs session.
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2499 This command first displays a Dired buffer showing you the
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2500 previous sessions that you could recover from.
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2501 To choose one, move point to the proper line and then type C-c C-c.
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2502 Then you'll be asked about a number of files to recover."
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2503 (interactive)
16372
e311d5372d8c (recover-session): Error if session files turned off.
Richard M. Stallman <rms@gnu.org>
parents: 16334
diff changeset
2504 (if (null auto-save-list-file-prefix)
e311d5372d8c (recover-session): Error if session files turned off.
Richard M. Stallman <rms@gnu.org>
parents: 16334
diff changeset
2505 (error "You set `auto-save-list-file-prefix' to disable making session files"))
13879
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2506 (let ((ls-lisp-support-shell-wildcards t))
17208
67515c200d09 (recover-session): Add `t' to switches.
Richard M. Stallman <rms@gnu.org>
parents: 17004
diff changeset
2507 (dired (concat auto-save-list-file-prefix "*")
67515c200d09 (recover-session): Add `t' to switches.
Richard M. Stallman <rms@gnu.org>
parents: 17004
diff changeset
2508 (concat dired-listing-switches "t")))
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2509 (goto-char (point-min))
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2510 (or (looking-at "Move to the session you want to recover,")
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2511 (let ((inhibit-read-only t))
12740
8b44b70e655d (recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents: 12719
diff changeset
2512 (insert "Move to the session you want to recover,\n"
8b44b70e655d (recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents: 12719
diff changeset
2513 "then type C-c C-c to select it.\n\n"
8b44b70e655d (recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents: 12719
diff changeset
2514 "You can also delete some of these files;\n"
8b44b70e655d (recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents: 12719
diff changeset
2515 "type d on a line to mark that file for deletion.\n\n")))
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2516 (use-local-map (nconc (make-sparse-keymap) (current-local-map)))
12050
b740095d6a47 (multiple-recover-finish): Renamed to recover-session-finish.
Roland McGrath <roland@gnu.org>
parents: 11995
diff changeset
2517 (define-key (current-local-map) "\C-c\C-c" 'recover-session-finish))
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2518
12050
b740095d6a47 (multiple-recover-finish): Renamed to recover-session-finish.
Roland McGrath <roland@gnu.org>
parents: 11995
diff changeset
2519 (defun recover-session-finish ()
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2520 "Choose one saved session to recover auto-save files from.
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2521 This command is used in the special Dired buffer created by
12050
b740095d6a47 (multiple-recover-finish): Renamed to recover-session-finish.
Roland McGrath <roland@gnu.org>
parents: 11995
diff changeset
2522 \\[recover-session]."
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2523 (interactive)
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2524 ;; Get the name of the session file to recover from.
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2525 (let ((file (dired-get-filename))
13115
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2526 files
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2527 (buffer (get-buffer-create " *recover*")))
12740
8b44b70e655d (recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents: 12719
diff changeset
2528 (dired-do-flagged-delete t)
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2529 (unwind-protect
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2530 (save-excursion
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2531 ;; Read in the auto-save-list file.
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2532 (set-buffer buffer)
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2533 (erase-buffer)
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2534 (insert-file-contents file)
13115
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2535 ;; Loop thru the text of that file
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2536 ;; and get out the names of the files to recover.
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2537 (while (not (eobp))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2538 (let (thisfile autofile)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2539 (if (eolp)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2540 ;; This is a pair of lines for a non-file-visiting buffer.
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2541 ;; Get the auto-save file name and manufacture
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2542 ;; a "visited file name" from that.
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2543 (progn
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2544 (forward-line 1)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2545 (setq autofile
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2546 (buffer-substring-no-properties
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2547 (point)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2548 (save-excursion
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2549 (end-of-line)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2550 (point))))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2551 (setq thisfile
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2552 (expand-file-name
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2553 (substring
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2554 (file-name-nondirectory autofile)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2555 1 -1)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2556 (file-name-directory autofile)))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2557 (forward-line 1))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2558 ;; This pair of lines is a file-visiting
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2559 ;; buffer. Use the visited file name.
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2560 (progn
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2561 (setq thisfile
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2562 (buffer-substring-no-properties
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2563 (point) (progn (end-of-line) (point))))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2564 (forward-line 1)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2565 (setq autofile
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2566 (buffer-substring-no-properties
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2567 (point) (progn (end-of-line) (point))))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2568 (forward-line 1)))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2569 ;; Ignore a file if its auto-save file does not exist now.
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2570 (if (file-exists-p autofile)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2571 (setq files (cons thisfile files)))))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2572 (setq files (nreverse files))
12846
fc74ffbce5a9 (recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents: 12740
diff changeset
2573 ;; The file contains a pair of line for each auto-saved buffer.
fc74ffbce5a9 (recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents: 12740
diff changeset
2574 ;; The first line of the pair contains the visited file name
fc74ffbce5a9 (recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents: 12740
diff changeset
2575 ;; or is empty if the buffer was not visiting a file.
fc74ffbce5a9 (recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents: 12740
diff changeset
2576 ;; The second line is the auto-save file name.
13115
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2577 (if files
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2578 (map-y-or-n-p "Recover %s? "
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2579 (lambda (file)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2580 (condition-case nil
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2581 (save-excursion (recover-file file))
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2582 (error
13115
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2583 "Failed to recover `%s'" file)))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2584 files
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2585 '("file" "files" "recover"))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
2586 (message "No files can be recovered from this session now")))
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2587 (kill-buffer buffer))))
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
2588
15963
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2589 (defun kill-some-buffers (&optional list)
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2590 "For each buffer in LIST, ask whether to kill it.
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2591 LIST defaults to all existing live buffers."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2592 (interactive)
15963
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2593 (if (null list)
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2594 (setq list (buffer-list)))
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2595 (while list
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2596 (let* ((buffer (car list))
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2597 (name (buffer-name buffer)))
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2598 (and (not (string-equal name ""))
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2599 (/= (aref name 0) ? )
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2600 (yes-or-no-p
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2601 (format "Buffer %s %s. Kill? "
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2602 name
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2603 (if (buffer-modified-p buffer)
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2604 "HAS BEEN EDITED" "is unmodified")))
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2605 (kill-buffer buffer)))
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
2606 (setq list (cdr list))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2607
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2608 (defun auto-save-mode (arg)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2609 "Toggle auto-saving of contents of current buffer.
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
2610 With prefix argument ARG, turn auto-saving on if positive, else off."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2611 (interactive "P")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2612 (setq buffer-auto-save-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2613 (and (if (null arg)
8158
a6fa25ffa764 (auto-save-mode): If autosave is off because buffer has
Richard M. Stallman <rms@gnu.org>
parents: 8157
diff changeset
2614 (or (not buffer-auto-save-file-name)
a6fa25ffa764 (auto-save-mode): If autosave is off because buffer has
Richard M. Stallman <rms@gnu.org>
parents: 8157
diff changeset
2615 ;; If autosave is off because buffer has shrunk,
a6fa25ffa764 (auto-save-mode): If autosave is off because buffer has
Richard M. Stallman <rms@gnu.org>
parents: 8157
diff changeset
2616 ;; then toggling should turn it on.
a6fa25ffa764 (auto-save-mode): If autosave is off because buffer has
Richard M. Stallman <rms@gnu.org>
parents: 8157
diff changeset
2617 (< buffer-saved-size 0))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2618 (or (eq arg t) (listp arg) (and (integerp arg) (> arg 0))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2619 (if (and buffer-file-name auto-save-visited-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2620 (not buffer-read-only))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2621 buffer-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2622 (make-auto-save-file-name))))
6677
3c7e3d1cc3ad (auto-save-mode): Don't let buffer-saved-size stay negative.
Richard M. Stallman <rms@gnu.org>
parents: 6664
diff changeset
2623 ;; If -1 was stored here, to temporarily turn off saving,
3c7e3d1cc3ad (auto-save-mode): Don't let buffer-saved-size stay negative.
Richard M. Stallman <rms@gnu.org>
parents: 6664
diff changeset
2624 ;; turn it back on.
3c7e3d1cc3ad (auto-save-mode): Don't let buffer-saved-size stay negative.
Richard M. Stallman <rms@gnu.org>
parents: 6664
diff changeset
2625 (and (< buffer-saved-size 0)
3c7e3d1cc3ad (auto-save-mode): Don't let buffer-saved-size stay negative.
Richard M. Stallman <rms@gnu.org>
parents: 6664
diff changeset
2626 (setq buffer-saved-size 0))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2627 (if (interactive-p)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2628 (message "Auto-save %s (in this buffer)"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2629 (if buffer-auto-save-file-name "on" "off")))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2630 buffer-auto-save-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2631
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2632 (defun rename-auto-save-file ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2633 "Adjust current buffer's auto save file name for current conditions.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2634 Also rename any existing auto save file, if it was made in this session."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2635 (let ((osave buffer-auto-save-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2636 (setq buffer-auto-save-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2637 (make-auto-save-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2638 (if (and osave buffer-auto-save-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2639 (not (string= buffer-auto-save-file-name buffer-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2640 (not (string= buffer-auto-save-file-name osave))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2641 (file-exists-p osave)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2642 (recent-auto-save-p))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2643 (rename-file osave buffer-auto-save-file-name t))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2644
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2645 (defun make-auto-save-file-name ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2646 "Return file name to use for auto-saves of current buffer.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2647 Does not consider `auto-save-visited-file-name' as that variable is checked
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2648 before calling this function. You can redefine this for customization.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2649 See also `auto-save-file-name-p'."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2650 (if buffer-file-name
15269
b6381b3a6c99 (make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents: 15056
diff changeset
2651 (if (and (eq system-type 'ms-dos)
b6381b3a6c99 (make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents: 15056
diff changeset
2652 (not (msdos-long-file-names)))
13885
bcb436f256e3 (make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents: 13879
diff changeset
2653 (let ((fn (file-name-nondirectory buffer-file-name)))
bcb436f256e3 (make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents: 13879
diff changeset
2654 (string-match "\\`\\([^.]+\\)\\(\\.\\(..?\\)?.?\\|\\)\\'" fn)
bcb436f256e3 (make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents: 13879
diff changeset
2655 (concat (file-name-directory buffer-file-name)
bcb436f256e3 (make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents: 13879
diff changeset
2656 "#" (match-string 1 fn)
bcb436f256e3 (make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents: 13879
diff changeset
2657 "." (match-string 3 fn) "#"))
bcb436f256e3 (make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents: 13879
diff changeset
2658 (concat (file-name-directory buffer-file-name)
bcb436f256e3 (make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents: 13879
diff changeset
2659 "#"
bcb436f256e3 (make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents: 13879
diff changeset
2660 (file-name-nondirectory buffer-file-name)
bcb436f256e3 (make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents: 13879
diff changeset
2661 "#"))
7944
a114bbe9a63c (make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents: 7895
diff changeset
2662
a114bbe9a63c (make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents: 7895
diff changeset
2663 ;; Deal with buffers that don't have any associated files. (Mail
a114bbe9a63c (make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents: 7895
diff changeset
2664 ;; mode tends to create a good number of these.)
a114bbe9a63c (make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents: 7895
diff changeset
2665
7895
fac7ff0a7aeb (make-auto-save-file-name): Don't use slashes in autosave name for a non-file
Karl Heuer <kwzh@gnu.org>
parents: 7730
diff changeset
2666 (let ((buffer-name (buffer-name))
7944
a114bbe9a63c (make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents: 7895
diff changeset
2667 (limit 0))
17256
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2668 ;; Eliminate all slashes and backslashes by
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2669 ;; replacing them with sequences that start with %.
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2670 ;; Quote % also, to keep distinct names distinct.
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2671 (while (string-match "[/\\%]" buffer-name limit)
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2672 (let* ((character (aref buffer-name (match-beginning 0)))
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2673 (replacement
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2674 (cond ((eq character ?%) "%%")
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2675 ((eq character ?/) "%+")
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2676 ((eq character ?\\) "%-"))))
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2677 (setq buffer-name (replace-match replacement t t buffer-name))
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
2678 (setq limit (1+ (match-end 0)))))
16015
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
2679 ;; Generate the file name.
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
2680 (expand-file-name
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
2681 (format "#%s#%s#" buffer-name (make-temp-name ""))
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
2682 ;; Try a few alternative directories, to get one we can write it.
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
2683 (cond
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
2684 ((file-writable-p default-directory) default-directory)
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
2685 ((file-writable-p "/var/tmp/") "/var/tmp/")
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
2686 ("~/"))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2687
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2688 (defun auto-save-file-name-p (filename)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2689 "Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2690 FILENAME should lack slashes. You can redefine this for customization."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2691 (string-match "^#.*#$" filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2692
13879
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2693 (defun wildcard-to-regexp (wildcard)
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2694 "Given a shell file name pattern WILDCARD, return an equivalent regexp.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2695 The generated regexp will match a filename iff the filename
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2696 matches that wildcard according to shell rules. Only wildcards known
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2697 by `sh' are supported."
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2698 (let* ((i (string-match "[[.*+\\^$?]" wildcard))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2699 ;; Copy the initial run of non-special characters.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2700 (result (substring wildcard 0 i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2701 (len (length wildcard)))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2702 ;; If no special characters, we're almost done.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2703 (if i
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2704 (while (< i len)
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2705 (let ((ch (aref wildcard i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2706 j)
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2707 (setq
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2708 result
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2709 (concat result
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2710 (cond
16544
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2711 ((and (eq ch ?\[)
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2712 (< (1+ i) len)
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2713 (eq (aref wildcard (1+ i)) ?\]))
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2714 "\\[")
13879
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2715 ((eq ch ?\[) ; [...] maps to regexp char class
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2716 (progn
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2717 (setq i (1+ i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2718 (concat
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2719 (cond
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2720 ((eq (aref wildcard i) ?!) ; [!...] -> [^...]
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2721 (progn
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2722 (setq i (1+ i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2723 (if (eq (aref wildcard i) ?\])
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2724 (progn
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2725 (setq i (1+ i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2726 "[^]")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2727 "[^")))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2728 ((eq (aref wildcard i) ?^)
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2729 ;; Found "[^". Insert a `\0' character
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2730 ;; (which cannot happen in a filename)
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2731 ;; into the character class, so that `^'
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2732 ;; is not the first character after `[',
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2733 ;; and thus non-special in a regexp.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2734 (progn
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2735 (setq i (1+ i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2736 "[\000^"))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2737 ((eq (aref wildcard i) ?\])
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2738 ;; I don't think `]' can appear in a
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2739 ;; character class in a wildcard, but
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2740 ;; let's be general here.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2741 (progn
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2742 (setq i (1+ i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2743 "[]"))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2744 (t "["))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2745 (prog1 ; copy everything upto next `]'.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2746 (substring wildcard
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2747 i
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2748 (setq j (string-match
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2749 "]" wildcard i)))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2750 (setq i (if j (1- j) (1- len)))))))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2751 ((eq ch ?.) "\\.")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2752 ((eq ch ?*) "[^\000]*")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2753 ((eq ch ?+) "\\+")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2754 ((eq ch ?^) "\\^")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2755 ((eq ch ?$) "\\$")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2756 ((eq ch ?\\) "\\\\") ; probably cannot happen...
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2757 ((eq ch ??) "[^\000]")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2758 (t (char-to-string ch)))))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2759 (setq i (1+ i)))))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2760 ;; Shell wildcards should match the entire filename,
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2761 ;; not its part. Make the regexp say so.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2762 (concat "\\`" result "\\'")))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
2763
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
2764 (defcustom list-directory-brief-switches
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2765 (if (eq system-type 'vax-vms) "" "-CF")
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
2766 "*Switches for list-directory to pass to `ls' for brief listing,"
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
2767 :type 'string
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
2768 :group 'dired)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2769
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
2770 (defcustom list-directory-verbose-switches
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2771 (if (eq system-type 'vax-vms)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2772 "/PROTECTION/SIZE/DATE/OWNER/WIDTH=(OWNER:10)"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2773 "-l")
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
2774 "*Switches for list-directory to pass to `ls' for verbose listing,"
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
2775 :type 'string
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
2776 :group 'dired)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2777
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2778 (defun list-directory (dirname &optional verbose)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2779 "Display a list of files in or matching DIRNAME, a la `ls'.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2780 DIRNAME is globbed by the shell if necessary.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2781 Prefix arg (second arg if noninteractive) means supply -l switch to `ls'.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2782 Actions controlled by variables `list-directory-brief-switches'
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2783 and `list-directory-verbose-switches'."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2784 (interactive (let ((pfx current-prefix-arg))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2785 (list (read-file-name (if pfx "List directory (verbose): "
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2786 "List directory (brief): ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2787 nil default-directory nil)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2788 pfx)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2789 (let ((switches (if verbose list-directory-verbose-switches
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2790 list-directory-brief-switches)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2791 (or dirname (setq dirname default-directory))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2792 (setq dirname (expand-file-name dirname))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2793 (with-output-to-temp-buffer "*Directory*"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2794 (buffer-disable-undo standard-output)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2795 (princ "Directory ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2796 (princ dirname)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2797 (terpri)
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2798 (save-excursion
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2799 (set-buffer "*Directory*")
14401
83e1b1f5ce8f (list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents: 14287
diff changeset
2800 (setq default-directory
83e1b1f5ce8f (list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents: 14287
diff changeset
2801 (if (file-directory-p dirname)
83e1b1f5ce8f (list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents: 14287
diff changeset
2802 (file-name-as-directory dirname)
83e1b1f5ce8f (list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents: 14287
diff changeset
2803 (file-name-directory dirname)))
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2804 (let ((wildcard (not (file-directory-p dirname))))
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2805 (insert-directory dirname switches wildcard (not wildcard)))))))
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2806
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2807 (defvar insert-directory-program "ls"
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2808 "Absolute or relative name of the `ls' program used by `insert-directory'.")
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2809
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2810 ;; insert-directory
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2811 ;; - must insert _exactly_one_line_ describing FILE if WILDCARD and
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2812 ;; FULL-DIRECTORY-P is nil.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2813 ;; The single line of output must display FILE's name as it was
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2814 ;; given, namely, an absolute path name.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2815 ;; - must insert exactly one line for each file if WILDCARD or
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2816 ;; FULL-DIRECTORY-P is t, plus one optional "total" line
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2817 ;; before the file lines, plus optional text after the file lines.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2818 ;; Lines are delimited by "\n", so filenames containing "\n" are not
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2819 ;; allowed.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2820 ;; File lines should display the basename.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2821 ;; - must be consistent with
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2822 ;; - functions dired-move-to-filename, (these two define what a file line is)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2823 ;; dired-move-to-end-of-filename,
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2824 ;; dired-between-files, (shortcut for (not (dired-move-to-filename)))
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2825 ;; dired-insert-headerline
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2826 ;; dired-after-subdir-garbage (defines what a "total" line is)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2827 ;; - variable dired-subdir-regexp
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2828 (defun insert-directory (file switches &optional wildcard full-directory-p)
4148
6b065ebb9090 * files.el (insert-directory): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 4032
diff changeset
2829 "Insert directory listing for FILE, formatted according to SWITCHES.
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2830 Leaves point after the inserted text.
8207
96e6518c209b (insert-directory): Allow list for SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 8181
diff changeset
2831 SWITCHES may be a string of options, or a list of strings.
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2832 Optional third arg WILDCARD means treat FILE as shell wildcard.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2833 Optional fourth arg FULL-DIRECTORY-P means file is a directory and
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2834 switches do not contain `d', so that a full listing is expected.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2835
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2836 This works by running a directory listing program
1892
c4ff65277bb3 (insert-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 1879
diff changeset
2837 whose name is in the variable `insert-directory-program'.
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2838 If WILDCARD, it also runs the shell specified by `shell-file-name'."
7730
3846302b9c9c (insert-directory): Use expanded file name to find handler.
Richard M. Stallman <rms@gnu.org>
parents: 7686
diff changeset
2839 ;; We need the directory in order to find the right handler.
3846302b9c9c (insert-directory): Use expanded file name to find handler.
Richard M. Stallman <rms@gnu.org>
parents: 7686
diff changeset
2840 (let ((handler (find-file-name-handler (expand-file-name file)
3846302b9c9c (insert-directory): Use expanded file name to find handler.
Richard M. Stallman <rms@gnu.org>
parents: 7686
diff changeset
2841 'insert-directory)))
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2842 (if handler
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2843 (funcall handler 'insert-directory file switches
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2844 wildcard full-directory-p)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2845 (if (eq system-type 'vax-vms)
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2846 (vms-read-directory file switches (current-buffer))
16052
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2847 (or (= 0
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2848 (if wildcard
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2849 ;; Run ls in the directory of the file pattern we asked for.
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2850 (let ((default-directory
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2851 (if (file-name-absolute-p file)
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2852 (file-name-directory file)
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2853 (file-name-directory (expand-file-name file))))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2854 (pattern (file-name-nondirectory file))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2855 (beg 0))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2856 ;; Quote some characters that have special meanings in shells;
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2857 ;; but don't quote the wildcards--we want them to be special.
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2858 ;; We also currently don't quote the quoting characters
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2859 ;; in case people want to use them explicitly to quote
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2860 ;; wildcard characters.
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2861 (while (string-match "[ \t\n;<>&|()#$]" pattern beg)
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2862 (setq pattern
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2863 (concat (substring pattern 0 (match-beginning 0))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2864 "\\"
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2865 (substring pattern (match-beginning 0)))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2866 beg (1+ (match-end 0))))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2867 (call-process shell-file-name nil t nil
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2868 "-c" (concat "\\" ;; Disregard shell aliases!
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2869 insert-directory-program
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2870 " -d "
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2871 (if (stringp switches)
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2872 switches
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2873 (mapconcat 'identity switches " "))
16792
8ae41d9d350d (insert-directory): Use -- as arg
Richard M. Stallman <rms@gnu.org>
parents: 16687
diff changeset
2874 " -- "
16052
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2875 pattern)))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2876 ;; SunOS 4.1.3, SVr4 and others need the "." to list the
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2877 ;; directory if FILE is a symbolic link.
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2878 (apply 'call-process
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2879 insert-directory-program nil t nil
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2880 (let (list)
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2881 (if (listp switches)
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2882 (setq list switches)
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2883 (if (not (equal switches ""))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2884 (progn
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2885 ;; Split the switches at any spaces
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2886 ;; so we can pass separate options as separate args.
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2887 (while (string-match " " switches)
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2888 (setq list (cons (substring switches 0 (match-beginning 0))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2889 list)
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2890 switches (substring switches (match-end 0))))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2891 (setq list (nreverse (cons switches list))))))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2892 (append list
16792
8ae41d9d350d (insert-directory): Use -- as arg
Richard M. Stallman <rms@gnu.org>
parents: 16687
diff changeset
2893 ;; Avoid lossage if FILE starts with `-'.
8ae41d9d350d (insert-directory): Use -- as arg
Richard M. Stallman <rms@gnu.org>
parents: 16687
diff changeset
2894 '("--")
16052
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2895 (list
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2896 (if full-directory-p
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2897 (concat (file-name-as-directory file) ".")
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2898 file)))))))
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2899 ;; We get here if ls failed.
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2900 ;; Access the file to get a suitable error.
e528e99859e3 (insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents: 16015
diff changeset
2901 (access-file file "Reading directory"))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2902
6050
afc731c614d3 (kill-emacs-query-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5974
diff changeset
2903 (defvar kill-emacs-query-functions nil
7686
814e18e2d3d4 (kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7682
diff changeset
2904 "Functions to call with no arguments to query about killing Emacs.
10901
218400c0a4a7 (kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10847
diff changeset
2905 If any of these functions returns nil, killing Emacs is cancelled.
218400c0a4a7 (kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10847
diff changeset
2906 `save-buffers-kill-emacs' (\\[save-buffers-kill-emacs]) calls these functions,
218400c0a4a7 (kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10847
diff changeset
2907 but `kill-emacs', the low level primitive, does not.
218400c0a4a7 (kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10847
diff changeset
2908 See also `kill-emacs-hook'.")
6050
afc731c614d3 (kill-emacs-query-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5974
diff changeset
2909
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2910 (defun save-buffers-kill-emacs (&optional arg)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2911 "Offer to save each buffer, then kill this Emacs process.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2912 With prefix arg, silently save all file-visiting buffers, then kill."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2913 (interactive "P")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2914 (save-some-buffers arg t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2915 (and (or (not (memq t (mapcar (function
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2916 (lambda (buf) (and (buffer-file-name buf)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2917 (buffer-modified-p buf))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2918 (buffer-list))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2919 (yes-or-no-p "Modified buffers exist; exit anyway? "))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2920 (or (not (fboundp 'process-list))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2921 ;; process-list is not defined on VMS.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2922 (let ((processes (process-list))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2923 active)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2924 (while processes
739
0bb85f26b79c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 736
diff changeset
2925 (and (memq (process-status (car processes)) '(run stop open))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2926 (let ((val (process-kill-without-query (car processes))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2927 (process-kill-without-query (car processes) val)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2928 val)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2929 (setq active t))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2930 (setq processes (cdr processes)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2931 (or (not active)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2932 (yes-or-no-p "Active processes exist; kill them and exit anyway? "))))
6050
afc731c614d3 (kill-emacs-query-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5974
diff changeset
2933 ;; Query the user for other things, perhaps.
10236
013842475608 (save-buffers-kill-emacs): Fix backward test of value of
Richard M. Stallman <rms@gnu.org>
parents: 10169
diff changeset
2934 (run-hook-with-args-until-failure 'kill-emacs-query-functions)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2935 (kill-emacs)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2936
16387
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2937 ;; We use /: as a prefix to "quote" a file name
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2938 ;; so that magic file name handlers will not apply to it.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2939
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2940 (setq file-name-handler-alist
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2941 (cons '("\\`/:" . file-name-non-special)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2942 file-name-handler-alist))
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2943
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2944 ;; We depend on being the last handler on the list,
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2945 ;; so that anything else which does need handling
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2946 ;; has been handled already.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2947 ;; So it is safe for us to inhibit *all* magic file name handlers.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2948
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2949 (defun file-name-non-special (operation &rest arguments)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2950 (let ((file-name-handler-alist nil)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2951 ;; Get a list of the indices of the args which are file names.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2952 (file-arg-indices
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2953 (cdr (or (assq operation
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2954 ;; The first four are special because they
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2955 ;; return a file name. We want to include the /:
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2956 ;; in the return value.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2957 ;; So just avoid stripping it in the first place.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2958 '((expand-file-name . nil)
18040
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
2959 ;; `identity' means just return the first arg
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
2960 ;; as stripped of its quoting.
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
2961 (substitute-in-file-name . identity)
16387
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2962 (file-name-directory . nil)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2963 (file-name-as-directory . nil)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2964 (directory-file-name . nil)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2965 (rename-file 0 1)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2966 (copy-file 0 1)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2967 (make-symbolic-link 0 1)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2968 (add-name-to-file 0 1)))
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2969 ;; For all other operations, treat the first argument only
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2970 ;; as the file name.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2971 '(nil 0))))
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2972 ;; Copy ARGUMENTS so we can replace elements in it.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2973 (arguments (copy-sequence arguments)))
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2974 ;; Strip off the /: from the file names that have this handler.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2975 (save-match-data
18040
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
2976 (while (consp file-arg-indices)
16387
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2977 (and (nth (car file-arg-indices) arguments)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2978 (string-match "\\`/:" (nth (car file-arg-indices) arguments))
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2979 (setcar (nthcdr (car file-arg-indices) arguments)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2980 (substring (nth (car file-arg-indices) arguments) 2)))
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2981 (setq file-arg-indices (cdr file-arg-indices))))
18040
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
2982 (if (eq file-arg-indices 'identity)
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
2983 (car arguments)
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
2984 (apply operation arguments))))
16387
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
2985
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2986 (define-key ctl-x-map "\C-f" 'find-file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2987 (define-key ctl-x-map "\C-q" 'toggle-read-only)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2988 (define-key ctl-x-map "\C-r" 'find-file-read-only)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2989 (define-key ctl-x-map "\C-v" 'find-alternate-file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2990 (define-key ctl-x-map "\C-s" 'save-buffer)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2991 (define-key ctl-x-map "s" 'save-some-buffers)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2992 (define-key ctl-x-map "\C-w" 'write-file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2993 (define-key ctl-x-map "i" 'insert-file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2994 (define-key esc-map "~" 'not-modified)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2995 (define-key ctl-x-map "\C-d" 'list-directory)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2996 (define-key ctl-x-map "\C-c" 'save-buffers-kill-emacs)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2997
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2998 (define-key ctl-x-4-map "f" 'find-file-other-window)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2999 (define-key ctl-x-4-map "r" 'find-file-read-only-other-window)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3000 (define-key ctl-x-4-map "\C-f" 'find-file-other-window)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3001 (define-key ctl-x-4-map "b" 'switch-to-buffer-other-window)
854
0b4f3a91f207 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
3002 (define-key ctl-x-4-map "\C-o" 'display-buffer)
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
3003
778
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
3004 (define-key ctl-x-5-map "b" 'switch-to-buffer-other-frame)
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
3005 (define-key ctl-x-5-map "f" 'find-file-other-frame)
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
3006 (define-key ctl-x-5-map "\C-f" 'find-file-other-frame)
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
3007 (define-key ctl-x-5-map "r" 'find-file-read-only-other-frame)
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 638
diff changeset
3008
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 638
diff changeset
3009 ;;; files.el ends here