annotate lisp/files.el @ 34097:0225d8e15f2c

(coordinates_in_window): Handle computations for positions on the vertical bar and fringes differently for window-system frames. Consider some pixels near the vertical bar as on the bar if the frame doesn't have vertical scroll bars. Associate positions between mode or header lines with the right window, the left one.
author Gerd Moellmann <gerd@gnu.org>
date Fri, 01 Dec 2000 20:44:31 +0000
parents da2a5d1550b7
children 98daea465817
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,
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
4 ;; 94, 95, 96, 97, 98, 99, 2000 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."
18316
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
35 :group 'files)
17673
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
18316
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
38 "Finding files."
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
39 :group 'files)
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
20596
bda7ed815582 (delete-auto-save-files): Say in the doc string that
Eli Zaretskii <eliz@gnu.org>
parents: 20501
diff changeset
43 "*Non-nil means delete auto-save file when a buffer is saved or killed.
bda7ed815582 (delete-auto-save-files): Say in the doc string that
Eli Zaretskii <eliz@gnu.org>
parents: 20501
diff changeset
44
bda7ed815582 (delete-auto-save-files): Say in the doc string that
Eli Zaretskii <eliz@gnu.org>
parents: 20501
diff changeset
45 Note that auto-save file will not be deleted if the buffer is killed
bda7ed815582 (delete-auto-save-files): Say in the doc string that
Eli Zaretskii <eliz@gnu.org>
parents: 20501
diff changeset
46 when it has unsaved changes."
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
47 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
48 :group 'auto-save)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
49
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
50 (defcustom directory-abbrev-alist
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
51 nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
52 "*Alist of abbreviations for file directories.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
53 A list of elements of the form (FROM . TO), each meaning to replace
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
54 FROM with TO when it appears in a directory name. This replacement is
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
55 done when setting up the default directory of a newly visited file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
56 *Every* FROM string should start with `^'.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
57
4735
97c1e7309a2d (directory-abbrev-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4699
diff changeset
58 Do not use `~' in the TO strings.
97c1e7309a2d (directory-abbrev-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4699
diff changeset
59 They should be ordinary absolute directory names.
97c1e7309a2d (directory-abbrev-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4699
diff changeset
60
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
61 Use this feature when you have directories which you normally refer to
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
62 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
63 the name it is linked to."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
64 :type '(repeat (cons :format "%v"
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
65 :value ("" . "")
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
66 (regexp :tag "From")
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
67 (regexp :tag "To")))
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
68 :group 'abbrev
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
69 :group 'find-file)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
70
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
71 ;;; 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
72 (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
73 "*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
74 This can be done by renaming the file or by copying.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
75
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
76 Renaming means that Emacs renames the existing file so that it is a
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
77 backup file, then writes the buffer into a new file. Any other names
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
78 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
79 is owned by you and its group is defaulted.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
80
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
81 Copying means that Emacs copies the existing file into the backup
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
82 file, then writes the buffer on top of the existing file. Any other
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
83 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
84 The file's owner and group are unchanged.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
85
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
86 The choice of renaming or copying is controlled by the variables
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
87 `backup-by-copying', `backup-by-copying-when-linked',
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
88 `backup-by-copying-when-mismatch' and
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
89 `backup-by-copying-when-privileged-mismatch'. See also `backup-inhibited'."
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
90 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
91 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
92
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
93 ;; Do this so that local variables based on the file name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
94 ;; are not overridden by the major mode.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
95 (defvar backup-inhibited nil
4597
7ae2e83e40ea (backup-inhibited): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 4466
diff changeset
96 "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
97 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
98 But it is local only if you make it local.")
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
99 (put 'backup-inhibited 'permanent-local t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
100
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
101 (defcustom backup-by-copying nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
102 "*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
103 See documentation of variable `make-backup-files'."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
104 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
105 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
106
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
107 (defcustom backup-by-copying-when-linked nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
108 "*Non-nil means use copying to create backups for files with multiple names.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
109 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
110 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
111 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
112 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
113
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
114 (defcustom backup-by-copying-when-mismatch nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
115 "*Non-nil means create backups by copying if this preserves owner or group.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
116 Renaming may still be used (subject to control of other variables)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
117 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
118 that is, for files which are owned by you and whose group matches
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
119 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
120 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
121 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
122 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
123
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
124 (defcustom backup-by-copying-when-privileged-mismatch 200
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
125 "*Non-nil means create backups by copying to preserve a privileged owner.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
126 Renaming may still be used (subject to control of other variables)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
127 when it would not result in changing the owner of the file or if the owner
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
128 has a user id greater than the value of this variable. This is useful
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
129 when low-numbered uid's are used for special system users (such as root)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
130 that must maintain ownership of certain files.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
131 This variable is relevant only if `backup-by-copying' and
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
132 `backup-by-copying-when-mismatch' are nil."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
133 :type '(choice (const nil) integer)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
134 :group 'backup)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
135
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
136 (defun normal-backup-enable-predicate (name)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
137 "Default `backup-enable-predicate' function.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
138 Checks for files in `temporary-file-directory' or
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
139 `small-temporary-file-directory'."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
140 (not (or (let ((comp (compare-strings temporary-file-directory 0 nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
141 name 0 nil)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
142 ;; Directory is under temporary-file-directory.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
143 (and (not (eq comp t))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
144 (< comp (- (length temporary-file-directory)))))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
145 (if small-temporary-file-directory
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
146 (let ((comp (compare-strings small-temporary-file-directory
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
147 0 nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
148 name 0 nil)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
149 ;; Directory is under small-temporary-file-directory.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
150 (and (not (eq comp t))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
151 (< comp (- (length small-temporary-file-directory)))))))))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
152
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
153 (defvar backup-enable-predicate 'normal-backup-enable-predicate
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
154 "Predicate that looks at a file name and decides whether to make backups.
29391
43abee1ebeca (convert-standard-filename): Doc fix.
Dave Love <fx@gnu.org>
parents: 29111
diff changeset
155 Called with an absolute file name as argument, it returns t to enable backup.")
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
156
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
157 (defcustom buffer-offer-save nil
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
158 "*Non-nil in a buffer means always offer to save buffer on exit.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
159 Do so 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
160 Automatically local in all buffers."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
161 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
162 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
163 (make-variable-buffer-local 'buffer-offer-save)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
164
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
165 (defcustom find-file-existing-other-name t
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
166 "*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
167 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
168 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
169 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
170 :group 'find-file)
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
171
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
172 (defcustom find-file-visit-truename nil
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
173 "*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
174 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
175 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
176 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
177 :group 'find-file)
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
178
17894
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
179 (defcustom revert-without-query
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
180 nil
16684
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
181 "*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
182 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
183 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
184 then `revert-buffer' reverts the file without querying
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
185 if the file has changed on disk and you have not edited the buffer."
20018
eb109838909d (revert-without-query): Fix customize type.
Karl Heuer <kwzh@gnu.org>
parents: 19812
diff changeset
186 :type '(repeat regexp)
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
187 :group 'find-file)
16684
483a15efdf87 (find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 16614
diff changeset
188
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
189 (defvar buffer-file-number nil
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
190 "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
191 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
192 This pair of numbers uniquely identifies the file.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
193 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
194 (make-variable-buffer-local 'buffer-file-number)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
195 (put 'buffer-file-number 'permanent-local t)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
196
15329
19008fd7774d (buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents: 15269
diff changeset
197 (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
198 "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
199
22175
0a2e8ec2a766 (file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents: 22143
diff changeset
200 (defvar file-name-invalid-regexp
0a2e8ec2a766 (file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents: 22143
diff changeset
201 (cond ((and (eq system-type 'ms-dos) (not (msdos-long-file-names)))
22762
1de4d5771a8f (file-name-invalid-regexp): Fix the part which handles colons in file names.
Eli Zaretskii <eliz@gnu.org>
parents: 22738
diff changeset
202 (concat "^\\([^A-Z[-`a-z]\\|..+\\)?:\\|" ; colon except after drive
22175
0a2e8ec2a766 (file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents: 22143
diff changeset
203 "[+, ;=|<>\"?*]\\|\\[\\|\\]\\|" ; invalid characters
23094
7099472e122b (file-name-invalid-regexp): Fix regex for ms-dos without long file names.
Andreas Schwab <schwab@suse.de>
parents: 23000
diff changeset
204 "[\000-\031]\\|" ; control characters
22175
0a2e8ec2a766 (file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents: 22143
diff changeset
205 "\\(/\\.\\.?[^/]\\)\\|" ; leading dots
0a2e8ec2a766 (file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents: 22143
diff changeset
206 "\\(/[^/.]+\\.[^/.]*\\.\\)")) ; more than a single dot
0a2e8ec2a766 (file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents: 22143
diff changeset
207 ((memq system-type '(ms-dos windows-nt))
22762
1de4d5771a8f (file-name-invalid-regexp): Fix the part which handles colons in file names.
Eli Zaretskii <eliz@gnu.org>
parents: 22738
diff changeset
208 (concat "^\\([^A-Z[-`a-z]\\|..+\\)?:\\|" ; colon except after drive
22480
a85ad07a6e4b (file-name-invalid-regexp): Add control characters for DOS/Windows
Eli Zaretskii <eliz@gnu.org>
parents: 22476
diff changeset
209 "[|<>\"?*\000-\031]")) ; invalid characters
22175
0a2e8ec2a766 (file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents: 22143
diff changeset
210 (t "[\000]"))
0a2e8ec2a766 (file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents: 22143
diff changeset
211 "Regexp recognizing file names which aren't allowed by the filesystem.")
0a2e8ec2a766 (file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents: 22143
diff changeset
212
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
213 (defcustom file-precious-flag nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
214 "*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
215 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
216
bd3e59a5c0b3 (file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents: 12105
diff changeset
217 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
218 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
219 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
220 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
221
bd3e59a5c0b3 (file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents: 12105
diff changeset
222 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
223 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
224 breaks any hard links between it and other files."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
225 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
226 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
227
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
228 (defcustom version-control nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
229 "*Control use of version numbers for backup files.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
230 t means make numeric backup versions unconditionally.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
231 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
232 `never' means do not make them."
22582
122946298ba4 (version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents: 22558
diff changeset
233 :type '(choice (const :tag "Never" never)
122946298ba4 (version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents: 22558
diff changeset
234 (const :tag "If existing" nil)
122946298ba4 (version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents: 22558
diff changeset
235 (other :tag "Always" t))
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
236 :group 'backup
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
237 :group 'vc)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
238
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
239 (defcustom dired-kept-versions 2
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
240 "*When cleaning directory, number of versions to keep."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
241 :type 'integer
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
242 :group 'backup
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
243 :group 'dired)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
244
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
245 (defcustom delete-old-versions nil
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
246 "*If t, delete excess backup versions silently.
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
247 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
248 :type '(choice (const :tag "Delete" t)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
249 (const :tag "Ask" nil)
22582
122946298ba4 (version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents: 22558
diff changeset
250 (other :tag "Leave" other))
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
251 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
252
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
253 (defcustom kept-old-versions 2
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
254 "*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
255 :type 'integer
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
256 :group 'backup)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
257
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
258 (defcustom kept-new-versions 2
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
259 "*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
260 Includes the new backup. Must be > 0"
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
261 :type 'integer
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
262 :group 'backup)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
263
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
264 (defcustom require-final-newline nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
265 "*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
266 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
267 nil means don't add newlines."
18340
f984a38eda06 (require-final-newline): Fix custom :type.
Richard M. Stallman <rms@gnu.org>
parents: 18317
diff changeset
268 :type '(choice (const :tag "Off" nil)
f984a38eda06 (require-final-newline): Fix custom :type.
Richard M. Stallman <rms@gnu.org>
parents: 18317
diff changeset
269 (const :tag "Add" t)
22582
122946298ba4 (version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents: 22558
diff changeset
270 (other :tag "Ask" ask))
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
271 :group 'editing-basics)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
272
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
273 (defcustom auto-save-default t
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
274 "*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
275 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
276 :group 'auto-save)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
277
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
278 (defcustom auto-save-visited-file-name nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
279 "*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
280 Normally auto-save files are written under other names."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
281 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
282 :group 'auto-save)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
283
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
284 (defcustom auto-save-file-name-transforms
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
285 '(("\\`/[^/]*:\\(.+/\\)*\\(.*\\)" "/tmp/\\2"))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
286 "*Transforms to apply to buffer file name before making auto-save file name.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
287 Each transform is a list (REGEXP REPLACEMENT):
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
288 REGEXP is a regular expression to match against the file name.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
289 If it matches, `replace-match' is used to replace the
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
290 matching part with REPLACEMENT.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
291 All the transforms in the list are tried, in the order they are listed.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
292 When one transform applies, its result is final;
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
293 no further transforms are tried.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
294
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
295 The default value is set up to put the auto-save file into `/tmp'
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
296 for editing a remote file."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
297 :group 'auto-save
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
298 :type '(repeat (list (string :tag "Regexp") (string :tag "Replacement")))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
299 :version "21.1")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
300
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
301 (defcustom save-abbrevs nil
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
302 "*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
303 Loading an abbrev file sets this to t."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
304 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
305 :group 'abbrev)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
306
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
307 (defcustom find-file-run-dired t
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
308 "*Non-nil means allow `find-file' to visit directories.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
309 To visit the directory, `find-file' runs `find-directory-functions'."
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
310 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
311 :group 'find-file)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
312
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
313 (defcustom find-directory-functions '(cvs-dired-noselect dired-noselect)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
314 "*List of functions to try in sequence to visit a directory.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
315 Each function is called with the directory name as the sole argument
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
316 and should return either a buffer or nil."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
317 :type '(hook :options (cvs-dired-noselect dired-noselect))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
318 :group 'find-file)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
319
1879
c9b4ece292cc (find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents: 1799
diff changeset
320 ;;;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
321 ;;;(put 'find-file-not-found-hooks 'permanent-local t)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
322 (defvar find-file-not-found-hooks nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
323 "List of functions to be called for `find-file' on nonexistent file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
324 These functions are called as soon as the error is detected.
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
325 Variable `buffer-file-name' is already set up.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
326 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
327
1879
c9b4ece292cc (find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents: 1799
diff changeset
328 ;;;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
329 ;;;(put 'find-file-hooks 'permanent-local t)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
330 (defvar find-file-hooks nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
331 "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
332 The buffer's local variables (if any) will have been processed before the
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
333 functions are called.")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
334
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
335 (defvar write-file-hooks nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
336 "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
337 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
338 and the rest are not called.
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
339 These hooks are considered to pertain to the visited file.
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
340 So any buffer-local binding of `write-file-hooks' is
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
341 discarded if you change the visited file name with \\[set-visited-file-name].
14112
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
342
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
343 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
344 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
345 ;;; 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
346 (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
347
94e135f2d64d (local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2335
diff changeset
348 (defvar local-write-file-hooks nil
94e135f2d64d (local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2335
diff changeset
349 "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
350 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
351 `write-file-hooks'.
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
352
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
353 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
354 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
355 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
356 `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
357 (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
358 (put 'local-write-file-hooks 'permanent-local t)
605
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
359
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
360 (defvar write-contents-hooks nil
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
361 "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
362 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
363 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
364
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
365 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
366 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
367 `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
368 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
369
5e5779fa54cb (auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14112
diff changeset
370 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
371 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
372 LOCAL argument.
14112
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
373
605
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
374 See also `write-file-hooks'.")
14112
271075f54794 (write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents: 14025
diff changeset
375 (make-variable-buffer-local 'write-contents-hooks)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
376
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
377 (defcustom enable-local-variables t
16440
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
378 "*Control use of local variables in files you visit.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
379 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
380 A value of t means file local variables specifications are obeyed;
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
381 nil means they are ignored; anything else means query.
23657
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
382 This variable also controls use of major modes specified in
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
383 a -*- line.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
384
23657
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
385 The command \\[normal-mode], when used interactively,
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
386 always obeys file local variable specifications and the -*- line,
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
387 and ignores this variable."
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
388 :type '(choice (const :tag "Obey" t)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
389 (const :tag "Ignore" nil)
22582
122946298ba4 (version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents: 22558
diff changeset
390 (other :tag "Query" other))
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
391 :group 'find-file)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
392
22476
f4871f285a9d (user-init-file): Default value now nil.
Richard M. Stallman <rms@gnu.org>
parents: 22466
diff changeset
393 (defvar local-enable-local-variables t
f4871f285a9d (user-init-file): Default value now nil.
Richard M. Stallman <rms@gnu.org>
parents: 22466
diff changeset
394 "Like `enable-local-variables' but meant for buffer-local bindings.
23657
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
395 The meaningful values are nil and non-nil. The default is non-nil.
22476
f4871f285a9d (user-init-file): Default value now nil.
Richard M. Stallman <rms@gnu.org>
parents: 22466
diff changeset
396 If a major mode sets this to nil, buffer-locally, then any local
23657
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
397 variables list in the file will be ignored.
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
398
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
399 This variable does not affect the use of major modes
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
400 specified in a -*- line.")
22476
f4871f285a9d (user-init-file): Default value now nil.
Richard M. Stallman <rms@gnu.org>
parents: 22466
diff changeset
401
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
402 (defcustom enable-local-eval 'maybe
722
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
403 "*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
404 The value can be t, nil or something else.
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
405 A value of t means obey `eval' variables;
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
406 nil means ignore them; anything else means query.
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
407
0a2391511b46 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 705
diff changeset
408 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
409 and ignores this variable."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
410 :type '(choice (const :tag "Obey" t)
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
411 (const :tag "Ignore" nil)
22582
122946298ba4 (version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents: 22558
diff changeset
412 (other :tag "Query" other))
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
413 :group 'find-file)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
414
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
415 ;; Avoid losing in versions where CLASH_DETECTION is disabled.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
416 (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
417 (defalias 'lock-buffer 'ignore))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
418 (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
419 (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
420 (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
421 (defalias 'file-locked-p 'ignore))
4186
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
422
18316
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
423 (defvar view-read-only nil
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
424 "*Non-nil means buffers visiting files read-only, do it in view mode.")
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
425
22143
468e3489f1c0 (temporary-file-directory): Renamed from system-tmp-directory.
Richard M. Stallman <rms@gnu.org>
parents: 22084
diff changeset
426 (defvar temporary-file-directory
468e3489f1c0 (temporary-file-directory): Renamed from system-tmp-directory.
Richard M. Stallman <rms@gnu.org>
parents: 22084
diff changeset
427 (file-name-as-directory
22084
08f31e440c92 (system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22026
diff changeset
428 (cond ((memq system-type '(ms-dos windows-nt))
08f31e440c92 (system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22026
diff changeset
429 (or (getenv "TEMP") (getenv "TMPDIR") (getenv "TMP") "c:/temp"))
08f31e440c92 (system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22026
diff changeset
430 ((memq system-type '(vax-vms axp-vms))
08f31e440c92 (system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22026
diff changeset
431 (or (getenv "TMPDIR") (getenv "TMP") (getenv "TEMP") "SYS$SCRATCH:"))
08f31e440c92 (system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22026
diff changeset
432 (t
08f31e440c92 (system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22026
diff changeset
433 (or (getenv "TMPDIR") (getenv "TMP") (getenv "TEMP") "/tmp"))))
22143
468e3489f1c0 (temporary-file-directory): Renamed from system-tmp-directory.
Richard M. Stallman <rms@gnu.org>
parents: 22084
diff changeset
434 "The directory for writing temporary files.")
22084
08f31e440c92 (system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22026
diff changeset
435
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
436 (defvar small-temporary-file-directory
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
437 (if (eq system-type 'ms-dos) (getenv "TMPDIR"))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
438 "The directory for writing small temporary files.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
439 If non-nil, this directory is used instead of `temporary-file-directory'
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
440 by programs that create small temporary files. This is for systems that
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
441 have fast storage with limited space, such as a RAM disk.")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
442
22405
9a8440593987 (null-device): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22403
diff changeset
443 ;; The system null device. (Should reference NULL_DEVICE from C.)
9a8440593987 (null-device): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22403
diff changeset
444 (defvar null-device "/dev/null" "The system null device.")
9a8440593987 (null-device): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22403
diff changeset
445
4186
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
446 (defun ange-ftp-completion-hook-function (op &rest args)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
447 "Provides support for ange-ftp host name completion.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
448 Runs the usual ange-ftp hook, but only for completion operations."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
449 ;; Having this here avoids the need to load ange-ftp when it's not
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
450 ;; really in use.
4186
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
451 (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
452 (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
453 (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
454 (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
455 (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
456 inhibit-file-name-handlers)))
2b445c15563e (ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents: 7036
diff changeset
457 (inhibit-file-name-operation op))
4186
45fc16fdf07e (ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4148
diff changeset
458 (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
459
936c8364e15a (abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents: 13885
diff changeset
460 (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
461 "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
462 This function's standard definition is trivial; it just returns the argument.
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
463 However, on some systems, the function is redefined with a definition
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
464 that really does change some file names to canonicalize certain
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
465 patterns and to guarantee valid 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
466 filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
467
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
468 (defun pwd ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
469 "Show the current default directory."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
470 (interactive nil)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
471 (message "Directory %s" default-directory))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
472
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
473 (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
474 "Value of the CDPATH environment variable, as a list.
32240
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
475 Not actually set up until the first time you use it.")
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
476
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
477 (defun parse-colon-path (cd-path)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
478 "Explode a colon-separated search path into a list of directory names.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
479 \(For values of `colon' equal to `path-separator'.)"
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
480 ;; We could use split-string here.
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
481 (and cd-path
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
482 (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
483 (setq cd-path (concat cd-path path-separator))
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
484 (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
485 (setq cd-list
3038
4bdac10d920a (cd): Set cd-path to a list.
Richard M. Stallman <rms@gnu.org>
parents: 2896
diff changeset
486 (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
487 (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
488 nil
6f940dcec978 (parse-colon-path): Really make nil, not ".", for empty path element.
Richard M. Stallman <rms@gnu.org>
parents: 4196
diff changeset
489 (substitute-in-file-name
4196
20f7ea2f83ef (parse-colon-path): Turn empty substring into nil.
Richard M. Stallman <rms@gnu.org>
parents: 4186
diff changeset
490 (file-name-as-directory
20f7ea2f83ef (parse-colon-path): Turn empty substring into nil.
Richard M. Stallman <rms@gnu.org>
parents: 4186
diff changeset
491 (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
492 (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
493 cd-list)))
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
494
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
495 (defun cd-absolute (dir)
3652
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
496 "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
497 ;; 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
498 ;; because otherwise expand-file-name may give some bad results.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
499 (if (not (eq system-type 'vax-vms))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
500 (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
501 (setq dir (abbreviate-file-name (expand-file-name dir)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
502 (if (not (file-directory-p dir))
18819
881a46c98ddf (set-auto-mode): If -*- line specifies a mode,
Richard M. Stallman <rms@gnu.org>
parents: 18676
diff changeset
503 (if (file-exists-p dir)
881a46c98ddf (set-auto-mode): If -*- line specifies a mode,
Richard M. Stallman <rms@gnu.org>
parents: 18676
diff changeset
504 (error "%s is not a directory" dir)
19159
4bfebbf0f6a8 (cd-absolute): Add missing arg to `error'.
Richard M. Stallman <rms@gnu.org>
parents: 19145
diff changeset
505 (error "%s: no such directory" dir))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
506 (if (file-executable-p dir)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
507 (setq default-directory dir)
3038
4bdac10d920a (cd): Set cd-path to a list.
Richard M. Stallman <rms@gnu.org>
parents: 2896
diff changeset
508 (error "Cannot cd to %s: Permission denied" dir))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
509
2575
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
510 (defun cd (dir)
1c5dca7628cb (cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2553
diff changeset
511 "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
512 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
513 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
514 (interactive
dde58f45b00a (cd): When reading arg, use just directory as the default.
Richard M. Stallman <rms@gnu.org>
parents: 12591
diff changeset
515 (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
516 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
517 (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
518 (null (getenv "CDPATH"))))))
3652
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
519 (if (file-name-absolute-p dir)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
520 (cd-absolute (expand-file-name dir))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
521 (if (null cd-path)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
522 (let ((trypath (parse-colon-path (getenv "CDPATH"))))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
523 (setq cd-path (or trypath (list "./")))))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
524 (if (not (catch 'found
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
525 (mapcar
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
526 (function (lambda (x)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
527 (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
528 (if (file-directory-p f)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
529 (progn
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
530 (cd-absolute f)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
531 (throw 'found t))))))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
532 cd-path)
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
533 nil))
31e55359fcdb (cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents: 3634
diff changeset
534 (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
535
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
536 (defun load-file (file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
537 "Load the Lisp file named FILE."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
538 (interactive "fLoad file: ")
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
539 (let ((completion-ignored-extensions
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
540 (delete ".elc" completion-ignored-extensions)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
541 (load (expand-file-name file) nil nil t)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
542
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
543 (defun load-library (library)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
544 "Load the library named LIBRARY.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
545 This is an interface to the function `load'."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
546 (interactive "sLoad library: ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
547 (load library))
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
548
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
549 (defun file-local-copy (file)
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
550 "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
551 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
552 accessible."
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
553 ;; This formerly had an optional BUFFER argument that wasn't used by
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
554 ;; anything.
7030
9e51b51e8595 Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents: 6899
diff changeset
555 (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
556 (if handler
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
557 (funcall handler 'file-local-copy file)
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1109
diff changeset
558 nil)))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
559
8148
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
560 (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
561 "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
562 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
563 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
564 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
565
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
566 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
567 Do not specify them in other calls."
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
568 ;; 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
569 ;; to chase before getting an error.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
570 ;; 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
571 ;; 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
572
0bd2831dff40 Test for "" too; let it go to expand-file-name if it is equal.
Simon Marshall <simon@gnu.org>
parents: 12145
diff changeset
573 ;; 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
574 (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
575 (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
576 (string-match "~[^/]*" filename)))
2613
709f672f450e (find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2600
diff changeset
577 (progn
709f672f450e (find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2600
diff changeset
578 (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
579 (if (string= filename "")
709f672f450e (find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents: 2600
diff changeset
580 (setq filename "/"))))
8148
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
581 (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
582 (let (done
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
583 ;; 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
584 ;; 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
585 ;; 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
586 (file-name-handler-alist
4c6590fc242e (file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents: 8362
diff changeset
587 (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
588 (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
589 (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
590 (or prev-dirs (setq prev-dirs (list nil)))
19680
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
591
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
592 ;; andrewi@harlequin.co.uk - none of the following code (except for
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
593 ;; invoking the file-name handler) currently applies on Windows
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
594 ;; (ie. there are no native symlinks), but there is an issue with
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
595 ;; case differences being ignored by the OS, and short "8.3 DOS"
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
596 ;; name aliases existing for all files. (The short names are not
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
597 ;; reported by directory-files, but can be used to refer to files.)
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
598 ;; It seems appropriate for file-truename to resolve these issues in
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
599 ;; the most natural way, which on Windows is to call the function
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
600 ;; `w32-long-file-name' - this returns the exact name of a file as
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
601 ;; it is stored on disk (expanding short name aliases with the full
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
602 ;; name in the process).
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
603 (if (eq system-type 'windows-nt)
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
604 (let ((handler (find-file-name-handler filename 'file-truename))
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
605 newname)
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
606 ;; For file name that has a special handler, call handler.
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
607 ;; This is so that ange-ftp can save time by doing a no-op.
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
608 (if handler
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
609 (setq filename (funcall handler 'file-truename filename))
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
610 ;; If filename contains a wildcard, newname will be the old name.
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
611 (if (string-match "[[*?]" filename)
19680
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
612 (setq newname filename)
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
613 ;; If filename doesn't exist, newname will be nil.
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
614 (setq newname (w32-long-file-name filename)))
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
615 (setq filename (or newname filename)))
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
616 (setq done t)))
90127e640713 (file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents: 19663
diff changeset
617
8148
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
618 ;; 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
619 ;; 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
620 (while (not done)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
621 (setcar counter (1- (car counter)))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
622 (if (< (car counter) 0)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
623 (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
624 (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
625 ;; 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
626 ;; 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
627 (if handler
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
628 (setq filename (funcall handler 'file-truename filename)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
629 done t)
9234
da491f38518c (file-truename): If name has no dir, use default-directory.
Richard M. Stallman <rms@gnu.org>
parents: 9212
diff changeset
630 (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
631 target dirfile)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
632 ;; Get the truename of the directory.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
633 (setq dirfile (directory-file-name dir))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
634 ;; 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
635 (or (string= dir dirfile)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
636 ;; 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
637 ;; save time--don't recalculate.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
638 (if (assoc dir (car prev-dirs))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
639 (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
640 (let ((old dir)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
641 (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
642 (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
643 (setq dir new))))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
644 (if (equal ".." (file-name-nondirectory filename))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
645 (setq filename
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
646 (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
647 done t)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
648 (if (equal "." (file-name-nondirectory filename))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
649 (setq filename (directory-file-name dir)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
650 done t)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
651 ;; Put it back on the file name.
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
652 (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
653 ;; 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
654 (setq target (file-symlink-p filename))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
655 (if target
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
656 ;; 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
657 ;; 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
658 ;; 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
659 ;; 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
660 ;; 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
661 (setq filename
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
662 (if (file-name-absolute-p target)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
663 target
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
664 (concat dir target))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
665 done nil)
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
666 ;; No, we are done!
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
667 (setq done t))))))))
0035bfc4bc9d (file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents: 8140
diff changeset
668 filename))
1672
ecf43116a845 The find-file-name-handler function in ../src/fileio.c is now
Jim Blandy <jimb@redhat.com>
parents: 1537
diff changeset
669
3260
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
670 (defun file-chase-links (filename)
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
671 "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
672 Does not examine containing directories for links,
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
673 unlike `file-truename'."
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
674 (let (tem (count 100) (newname filename))
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
675 (while (setq tem (file-symlink-p newname))
18466
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
676 (save-match-data
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
677 (if (= count 0)
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
678 (error "Apparent cycle of symbolic links for %s" filename))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
679 ;; In the context of a link, `//' doesn't mean what Emacs thinks.
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
680 (while (string-match "//+" tem)
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
681 (setq tem (replace-match "/" nil nil tem)))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
682 ;; Handle `..' by hand, since it needs to work in the
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
683 ;; target of any directory symlink.
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
684 ;; This code is not quite complete; it does not handle
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
685 ;; embedded .. in some cases such as ./../foo and foo/bar/../../../lose.
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
686 (while (string-match "\\`\\.\\./" tem)
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
687 (setq tem (substring tem 3))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
688 (setq newname (expand-file-name newname))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
689 ;; Chase links in the default dir of the symlink.
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
690 (setq newname
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
691 (file-chase-links
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
692 (directory-file-name (file-name-directory newname))))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
693 ;; Now find the parent of that dir.
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
694 (setq newname (file-name-directory newname)))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
695 (setq newname (expand-file-name tem (file-name-directory newname)))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
696 (setq count (1- count))))
3260
eecf2c0ca9b9 (file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents: 3240
diff changeset
697 newname))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
698
16831
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
699 (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
700 "Select buffer BUFFER in another window.
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
701 Optional second arg NORECORD non-nil means
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
702 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
703 (interactive "BSwitch to buffer in other window: ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
704 (let ((pop-up-windows t))
16831
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
705 (pop-to-buffer buffer t norecord)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
706
16831
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
707 (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
708 "Switch to buffer BUFFER in another frame.
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
709 Optional second arg NORECORD non-nil means
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
710 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
711 (interactive "BSwitch to buffer in other frame: ")
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
712 (let ((pop-up-frames t))
16831
3626b6cd2ad1 (switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents: 16792
diff changeset
713 (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
714 (raise-frame (window-frame (selected-window)))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
715
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
716 (defun find-file (filename &optional wildcards)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
717 "Edit file FILENAME.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
718 Switch to a buffer visiting file FILENAME,
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
719 creating one if none already exists.
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
720 Interactively, or if WILDCARDS is non-nil in a call from Lisp,
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
721 expand wildcards (if any) and visit multiple files. Wildcard expansion
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
722 can be suppressed by setting `find-file-wildcards'."
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
723 (interactive "FFind file: \np")
24167
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
724 (let ((value (find-file-noselect filename nil nil wildcards)))
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
725 (if (listp value)
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
726 (mapcar 'switch-to-buffer (nreverse value))
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
727 (switch-to-buffer value))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
728
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
729 (defun find-file-other-window (filename &optional wildcards)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
730 "Edit file FILENAME, in another window.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
731 May create a new window, or reuse an existing one.
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
732 See the function `display-buffer'.
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
733 Interactively, or if WILDCARDS is non-nil in a call from Lisp,
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
734 expand wildcards (if any) and visit multiple files."
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
735 (interactive "FFind file in other window: \np")
24167
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
736 (let ((value (find-file-noselect filename nil nil wildcards)))
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
737 (if (listp value)
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
738 (progn
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
739 (setq value (nreverse value))
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
740 (switch-to-buffer-other-window (car value))
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
741 (mapcar 'switch-to-buffer (cdr value)))
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
742 (switch-to-buffer-other-window value))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
743
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
744 (defun find-file-other-frame (filename &optional wildcards)
778
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
745 "Edit file FILENAME, in another frame.
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
746 May create a new frame, or reuse an existing one.
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
747 See the function `display-buffer'.
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
748 Interactively, or if WILDCARDS is non-nil in a call from Lisp,
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
749 expand wildcards (if any) and visit multiple files."
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
750 (interactive "FFind file in other frame: \np")
24167
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
751 (let ((value (find-file-noselect filename nil nil wildcards)))
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
752 (if (listp value)
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
753 (progn
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
754 (setq value (nreverse value))
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
755 (switch-to-buffer-other-frame (car value))
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
756 (mapcar 'switch-to-buffer (cdr value)))
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
757 (switch-to-buffer-other-frame value))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
758
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
759 (defun find-file-read-only (filename &optional wildcards)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
760 "Edit file FILENAME but don't allow changes.
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
761 Like `find-file' but marks buffer as read-only.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
762 Use \\[toggle-read-only] to permit editing."
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
763 (interactive "fFind file read-only: \np")
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
764 (find-file filename wildcards)
18316
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
765 (toggle-read-only 1)
3280
3b3717164db0 (find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3263
diff changeset
766 (current-buffer))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
767
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
768 (defun find-file-read-only-other-window (filename &optional wildcards)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
769 "Edit file FILENAME in another window but don't allow changes.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
770 Like \\[find-file-other-window] but marks buffer as read-only.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
771 Use \\[toggle-read-only] to permit editing."
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
772 (interactive "fFind file read-only other window: \np")
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
773 (find-file-other-window filename wildcards)
18316
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
774 (toggle-read-only 1)
3280
3b3717164db0 (find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3263
diff changeset
775 (current-buffer))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
776
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
777 (defun find-file-read-only-other-frame (filename &optional wildcards)
778
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
778 "Edit file FILENAME in another frame but don't allow changes.
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
779 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
780 Use \\[toggle-read-only] to permit editing."
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
781 (interactive "fFind file read-only other frame: \np")
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
782 (find-file-other-frame filename wildcards)
18316
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
783 (toggle-read-only 1)
3280
3b3717164db0 (find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 3263
diff changeset
784 (current-buffer))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
785
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
786 (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
787 "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
788 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
789 (interactive
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
790 (save-selected-window
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
791 (other-window 1)
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
792 (let ((file buffer-file-name)
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
793 (file-name nil)
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
794 (file-dir nil))
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
795 (and file
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
796 (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
797 file-dir (file-name-directory file)))
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
798 (list (read-file-name
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
799 "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
800 (if (one-window-p)
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
801 (find-file-other-window filename)
13182
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
802 (save-selected-window
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
803 (other-window 1)
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
804 (find-alternate-file filename))))
13182
55c6e0f3c2f4 (find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13118
diff changeset
805
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
806 (defun find-alternate-file (filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
807 "Find file FILENAME, select its buffer, kill previous buffer.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
808 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
809 \(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
810 (interactive
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
811 (let ((file buffer-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
812 (file-name nil)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
813 (file-dir nil))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
814 (and file
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
815 (setq file-name (file-name-nondirectory file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
816 file-dir (file-name-directory file)))
941
eb8a7ea2798e *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 909
diff changeset
817 (list (read-file-name
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
818 "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
819 (and (buffer-modified-p) (buffer-file-name)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
820 ;; (not buffer-read-only)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
821 (not (yes-or-no-p (format "Buffer %s is modified; kill anyway? "
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
822 (buffer-name))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
823 (error "Aborted"))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
824 (let ((obuf (current-buffer))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
825 (ofile buffer-file-name)
3191
d96fd9315996 (find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents: 3151
diff changeset
826 (onum buffer-file-number)
d96fd9315996 (find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents: 3151
diff changeset
827 (otrue buffer-file-truename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
828 (oname (buffer-name)))
13037
3946c18462c8 (find-alternate-file): Kill any preexisting ` **lose**' buf.
Richard M. Stallman <rms@gnu.org>
parents: 13032
diff changeset
829 (if (get-buffer " **lose**")
3946c18462c8 (find-alternate-file): Kill any preexisting ` **lose**' buf.
Richard M. Stallman <rms@gnu.org>
parents: 13032
diff changeset
830 (kill-buffer " **lose**"))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
831 (rename-buffer " **lose**")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
832 (unwind-protect
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
833 (progn
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
834 (unlock-buffer)
15410
559d91fe836a (find-alternate-file): Don't clear buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents: 15365
diff changeset
835 (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
836 (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
837 (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
838 (find-file filename))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
839 (cond ((eq obuf (current-buffer))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
840 (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
841 (setq buffer-file-number onum)
d96fd9315996 (find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents: 3151
diff changeset
842 (setq buffer-file-truename otrue)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
843 (lock-buffer)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
844 (rename-buffer oname))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
845 (or (eq (current-buffer) obuf)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
846 (kill-buffer obuf))))
19305
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
847
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
848 (defun create-file-buffer (filename)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
849 "Create a suitably named buffer for visiting FILENAME, and return it.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
850 FILENAME (sans directory) is used unchanged if that name is free;
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
851 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
852 (let ((lastname (file-name-nondirectory filename)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
853 (if (string= lastname "")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
854 (setq lastname filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
855 (generate-new-buffer lastname)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
856
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
857 (defun generate-new-buffer (name)
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
858 "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
859 Choose the buffer's name using `generate-new-buffer-name'."
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
860 (get-buffer-create (generate-new-buffer-name name)))
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
861
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
862 (defcustom automount-dir-prefix "^/tmp_mnt/"
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
863 "Regexp to match the automounter prefix in a directory name."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
864 :group 'files
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
865 :type 'regexp)
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
866
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
867 (defvar abbreviated-home-dir nil
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
868 "The user's homedir abbreviated according to `directory-abbrev-alist'.")
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
869
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
870 (defun abbreviate-file-name (filename)
1461
1905025a8709 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 1453
diff changeset
871 "Return a version of FILENAME shortened using `directory-abbrev-alist'.
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
872 This also substitutes \"~\" for the user's home directory.
1461
1905025a8709 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 1453
diff changeset
873 Type \\[describe-variable] directory-abbrev-alist RET for more information."
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
874 ;; 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
875 (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
876 (string-match automount-dir-prefix filename)
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
877 (file-exists-p (file-name-directory
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
878 (substring filename (1- (match-end 0))))))
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
879 (setq filename (substring filename (1- (match-end 0)))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
880 (let ((tail directory-abbrev-alist))
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
881 ;; 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
882 ;; abbreviate accordingly.
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
883 (while tail
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
884 (if (string-match (car (car tail)) filename)
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
885 (setq filename
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
886 (concat (cdr (car tail)) (substring filename (match-end 0)))))
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
887 (setq tail (cdr tail)))
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
888 ;; Compute and save the abbreviated homedir name.
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
889 ;; 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
890 ;; 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
891 ;; 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
892 ;; 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
893 (or abbreviated-home-dir
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
894 (setq abbreviated-home-dir
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
895 (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
896 (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
897 "\\(/\\|$\\)"))))
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
898
1725
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
899 ;; If FILENAME starts with the abbreviated homedir,
ac890f97e78b (abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1672
diff changeset
900 ;; 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
901 (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
902 ;; 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
903 (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
904 (= (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
905 ;; 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
906 ;; 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
907 (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
908 (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
909 (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
910 (string-match "^[a-zA-`]:/$" filename)))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
911 (setq filename
2630
47cf3a387530 * files.el (insert-directory): Undo change of March 23;
Jim Blandy <jimb@redhat.com>
parents: 2622
diff changeset
912 (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
913 (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
914 (substring filename (match-end 0)))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
915 filename))
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
916
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
917 (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
918 "*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
919 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
920 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
921 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
922 name to this list as a string."
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
923 :type '(repeat (string :tag "Name"))
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
924 :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
925
6265
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
926 (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
927 "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
928 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
929 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
930 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
931 (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
932 (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
933 (or buf
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
934 (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
935 (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
936 (save-excursion
f901b6091821 (find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents: 6168
diff changeset
937 (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
938 (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
939 (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
940 (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
941 (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
942 found)
33703
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
943 (let* ((attributes (file-attributes truename))
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
944 (number (nthcdr 10 attributes))
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
945 (list (buffer-list)) found)
15329
19008fd7774d (buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents: 15269
diff changeset
946 (and buffer-file-numbers-unique
19008fd7774d (buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents: 15269
diff changeset
947 number
6294
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
948 (while (and (not found) list)
33703
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
949 (with-current-buffer (car list)
6866
47bed999969a (find-buffer-visiting): Don't check buffer-file-number
Richard M. Stallman <rms@gnu.org>
parents: 6780
diff changeset
950 (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
951 (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
952 ;; 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
953 ;; 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
954 (file-exists-p buffer-file-name)
33703
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
955 (equal (file-attributes buffer-file-name)
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
956 attributes))
6294
6044f2615082 (find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 6272
diff changeset
957 (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
958 (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
959 found))))
19305
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
960
23473
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
961 (defcustom find-file-wildcards t
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
962 "*Non-nil means file-visiting commands should handle wildcards.
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
963 For example, if you specify `*.c', that would visit all the files
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
964 whose names match the pattern."
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
965 :group 'files
28325
6baee0eab769 Doc fixes.
Dave Love <fx@gnu.org>
parents: 28259
diff changeset
966 :version "20.4"
23473
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
967 :type 'boolean)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
968
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
969 (defcustom find-file-suppress-same-file-warnings nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
970 "*Non-nil means suppress warning messages for symlinked files.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
971 When nil, Emacs prints a warning when visiting a file that is already
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
972 visited, but with a different name. Setting this option to t
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
973 suppresses this warning."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
974 :group 'files
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
975 :version "21.1"
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
976 :type 'boolean)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
977
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
978 (defun find-file-noselect (filename &optional nowarn rawfile wildcards)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
979 "Read file FILENAME into a buffer and return the buffer.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
980 If a buffer exists visiting FILENAME, return that one, but
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
981 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
982 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
983 Optional first arg NOWARN non-nil means suppress any warning messages.
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
984 Optional second arg RAWFILE non-nil means the file is read literally.
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
985 Optional third arg WILDCARDS non-nil means do wildcard processing
24167
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
986 and visit all the matching files. When wildcards are actually
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
987 used and expanded, the value is a list of buffers
6b14770eb944 (find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents: 24166
diff changeset
988 that are visiting the various files."
817
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
989 (setq filename
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
990 (abbreviate-file-name
1dd126823b36 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 807
diff changeset
991 (expand-file-name filename)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
992 (if (file-directory-p filename)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
993 (or (and find-file-run-dired
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
994 (run-hook-with-args-until-success
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
995 'find-directory-functions
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
996 (if find-file-visit-truename
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
997 (abbreviate-file-name (file-truename filename))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
998 filename)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
999 (error "%s is a directory" filename))
24166
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
1000 (if (and wildcards
3d25e1fc71aa (find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents: 24061
diff changeset
1001 find-file-wildcards
23983
f81108c27669 (find-file-noselect): Let /: suppress wildcard matching.
Richard M. Stallman <rms@gnu.org>
parents: 23942
diff changeset
1002 (not (string-match "\\`/:" filename))
23473
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1003 (string-match "[[*?]" filename))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1004 (let ((files (condition-case nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1005 (file-expand-wildcards filename t)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1006 (error (list filename))))
23473
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1007 (find-file-wildcards nil))
23983
f81108c27669 (find-file-noselect): Let /: suppress wildcard matching.
Richard M. Stallman <rms@gnu.org>
parents: 23942
diff changeset
1008 (if (null files)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1009 (find-file-noselect filename)
33105
dd4bceb945d3 (find-file-noselect): When we expand a wildcard, return
Gerd Moellmann <gerd@gnu.org>
parents: 32830
diff changeset
1010 (mapcar #'find-file-noselect files)))
23473
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1011 (let* ((buf (get-file-buffer filename))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1012 (truename (abbreviate-file-name (file-truename filename)))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1013 (number (nthcdr 10 (file-attributes truename)))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1014 ;; Find any buffer for a file which has same truename.
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1015 (other (and (not buf) (find-buffer-visiting filename))))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1016 ;; Let user know if there is a buffer with the same truename.
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1017 (if other
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1018 (progn
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1019 (or nowarn
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1020 find-file-suppress-same-file-warnings
23473
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1021 (string-equal filename (buffer-file-name other))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1022 (message "%s and %s are the same file"
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1023 filename (buffer-file-name other)))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1024 ;; Optionally also find that buffer.
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1025 (if (or find-file-existing-other-name find-file-visit-truename)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1026 (setq buf other))))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1027 (if buf
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1028 ;; We are using an existing buffer.
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1029 (progn
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1030 (or nowarn
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1031 (verify-visited-file-modtime buf)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1032 (cond ((not (file-exists-p filename))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1033 (error "File %s no longer exists!" filename))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1034 ;; Certain files should be reverted automatically
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1035 ;; if they have changed on disk and not in the buffer.
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1036 ((and (not (buffer-modified-p buf))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1037 (let ((tail revert-without-query)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1038 (found nil))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1039 (while tail
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1040 (if (string-match (car tail) filename)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1041 (setq found t))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1042 (setq tail (cdr tail)))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1043 found))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1044 (with-current-buffer buf
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1045 (message "Reverting file %s..." filename)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1046 (revert-buffer t t)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1047 (message "Reverting file %s...done" filename)))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1048 ((yes-or-no-p
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1049 (if (string= (file-name-nondirectory filename)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1050 (buffer-name buf))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1051 (format
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1052 (if (buffer-modified-p buf)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1053 "File %s changed on disk. Discard your edits? "
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1054 "File %s changed on disk. Reread from disk? ")
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1055 (file-name-nondirectory filename))
22403
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1056 (format
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1057 (if (buffer-modified-p buf)
23473
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1058 "File %s changed on disk. Discard your edits in %s? "
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1059 "File %s changed on disk. Reread from disk into %s? ")
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1060 (file-name-nondirectory filename)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1061 (buffer-name buf))))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1062 (with-current-buffer buf
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1063 (revert-buffer t t)))))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1064 (with-current-buffer buf
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1065 (when (not (eq (not (null rawfile))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1066 (not (null find-file-literally))))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1067 (if (buffer-modified-p)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1068 (if (y-or-n-p (if rawfile
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1069 "Save file and revisit literally? "
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1070 "Save file and revisit non-literally? "))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1071 (progn
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1072 (save-buffer)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1073 (find-file-noselect-1 buf filename nowarn
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1074 rawfile truename number))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1075 (if (y-or-n-p (if rawfile
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1076 "Discard your edits and revisit file literally? "
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1077 "Discard your edits and revisit file non-literally? "))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1078 (find-file-noselect-1 buf filename nowarn
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1079 rawfile truename number)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1080 (error (if rawfile "File already visited non-literally"
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1081 "File already visited literally"))))
22403
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1082 (if (y-or-n-p (if rawfile
23473
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1083 "Revisit file literally? "
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1084 "Revisit file non-literally? "))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1085 (find-file-noselect-1 buf filename nowarn
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1086 rawfile truename number)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1087 (error (if rawfile "File already visited non-literally"
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1088 "File already visited literally"))))))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1089 ;; Return the buffer we are using.
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1090 buf)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1091 ;; Create a new buffer.
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1092 (setq buf (create-file-buffer filename))
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1093 (set-buffer-major-mode buf)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1094 ;; find-file-noselect-1 may use a different buffer.
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1095 (find-file-noselect-1 buf filename nowarn
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
1096 rawfile truename number))))))
22403
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1097
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1098 (defun find-file-noselect-1 (buf filename nowarn rawfile truename number)
22466
7e79814e7263 (find-file-noselect): Delete unused local var `error'.
Richard M. Stallman <rms@gnu.org>
parents: 22465
diff changeset
1099 (let ((inhibit-read-only t)
7e79814e7263 (find-file-noselect): Delete unused local var `error'.
Richard M. Stallman <rms@gnu.org>
parents: 22465
diff changeset
1100 error)
22403
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1101 (with-current-buffer buf
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1102 (kill-local-variable 'find-file-literally)
22555
318d69b6292c (find-file-noselect-1): Init buffer-file-coding-system
Richard M. Stallman <rms@gnu.org>
parents: 22480
diff changeset
1103 ;; Needed in case we are re-visiting the file with a different
318d69b6292c (find-file-noselect-1): Init buffer-file-coding-system
Richard M. Stallman <rms@gnu.org>
parents: 22480
diff changeset
1104 ;; text representation.
22738
d35510185a2d (find-file-noselect-1): Use kill-local-variable on
Richard M. Stallman <rms@gnu.org>
parents: 22582
diff changeset
1105 (kill-local-variable 'buffer-file-coding-system)
22403
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1106 (erase-buffer)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1107 (and (default-value 'enable-multibyte-characters)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1108 (not rawfile)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1109 (set-buffer-multibyte t))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1110 (if rawfile
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1111 (condition-case ()
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1112 (insert-file-contents-literally filename t)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1113 (file-error
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1114 (when (and (file-exists-p filename)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1115 (not (file-readable-p filename)))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1116 (kill-buffer buf)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1117 (signal 'file-error (list "File is not readable"
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1118 filename)))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1119 ;; Unconditionally set error
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1120 (setq error t)))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1121 (condition-case ()
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1122 (insert-file-contents filename t)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1123 (file-error
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1124 (when (and (file-exists-p filename)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1125 (not (file-readable-p filename)))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1126 (kill-buffer buf)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1127 (signal 'file-error (list "File is not readable"
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1128 filename)))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1129 ;; Run find-file-not-found-hooks until one returns non-nil.
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1130 (or (run-hook-with-args-until-success 'find-file-not-found-hooks)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1131 ;; If they fail too, set error.
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1132 (setq error t)))))
24653
0d75a033fceb (find-file-noselect-1): If buffer-file-name has changed
Karl Heuer <kwzh@gnu.org>
parents: 24217
diff changeset
1133 ;; Record the file's truename, and maybe use that as visited name.
0d75a033fceb (find-file-noselect-1): If buffer-file-name has changed
Karl Heuer <kwzh@gnu.org>
parents: 24217
diff changeset
1134 (if (equal filename buffer-file-name)
0d75a033fceb (find-file-noselect-1): If buffer-file-name has changed
Karl Heuer <kwzh@gnu.org>
parents: 24217
diff changeset
1135 (setq buffer-file-truename truename)
24727
358a330c9931 [from rms]
Dave Love <fx@gnu.org>
parents: 24653
diff changeset
1136 (setq buffer-file-truename
358a330c9931 [from rms]
Dave Love <fx@gnu.org>
parents: 24653
diff changeset
1137 (abbreviate-file-name (file-truename buffer-file-name))))
22403
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1138 (setq buffer-file-number number)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1139 ;; On VMS, we may want to remember which directory in a search list
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1140 ;; the file was found in.
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1141 (and (eq system-type 'vax-vms)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1142 (let (logical)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1143 (if (string-match ":" (file-name-directory filename))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1144 (setq logical (substring (file-name-directory filename)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1145 0 (match-beginning 0))))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1146 (not (member logical find-file-not-true-dirname-list)))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1147 (setq buffer-file-name buffer-file-truename))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1148 (if find-file-visit-truename
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1149 (setq buffer-file-name
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1150 (setq filename
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1151 (expand-file-name buffer-file-truename))))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1152 ;; Set buffer's default directory to that of the file.
24653
0d75a033fceb (find-file-noselect-1): If buffer-file-name has changed
Karl Heuer <kwzh@gnu.org>
parents: 24217
diff changeset
1153 (setq default-directory (file-name-directory buffer-file-name))
22403
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1154 ;; Turn off backup files for certain file names. Since
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1155 ;; this is a permanent local, the major mode won't eliminate it.
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1156 (and (not (funcall backup-enable-predicate buffer-file-name))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1157 (progn
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1158 (make-local-variable 'backup-inhibited)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1159 (setq backup-inhibited t)))
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1160 (if rawfile
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1161 (progn
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1162 (set-buffer-multibyte nil)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1163 (setq buffer-file-coding-system 'no-conversion)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1164 (make-local-variable 'find-file-literally)
4b5a49aa186a (find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22338
diff changeset
1165 (setq find-file-literally t))
22555
318d69b6292c (find-file-noselect-1): Init buffer-file-coding-system
Richard M. Stallman <rms@gnu.org>
parents: 22480
diff changeset
1166 (after-find-file error (not nowarn)))
318d69b6292c (find-file-noselect-1): Init buffer-file-coding-system
Richard M. Stallman <rms@gnu.org>
parents: 22480
diff changeset
1167 (current-buffer))))
19305
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1168
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1169 (defun insert-file-contents-literally (filename &optional visit beg end replace)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1170 "Like `insert-file-contents', but only reads in the file literally.
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1171 A buffer may be modified in several ways after reading into the buffer,
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1172 to Emacs features such as format decoding, character code
33703
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
1173 conversion, `find-file-hooks', automatic uncompression, etc.
19305
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1174
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1175 This function ensures that none of these modifications will take place."
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1176 (let ((format-alist nil)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1177 (after-insert-file-functions nil)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1178 (coding-system-for-read 'no-conversion)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1179 (coding-system-for-write 'no-conversion)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1180 (jka-compr-compression-info-list nil)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1181 (find-buffer-file-type-function
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1182 (if (fboundp 'find-buffer-file-type)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1183 (symbol-function 'find-buffer-file-type)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1184 nil)))
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1185 (unwind-protect
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1186 (progn
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1187 (fset 'find-buffer-file-type (lambda (filename) t))
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1188 (insert-file-contents filename visit beg end replace))
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1189 (if find-buffer-file-type-function
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1190 (fset 'find-buffer-file-type find-buffer-file-type-function)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1191 (fmakunbound 'find-buffer-file-type)))))
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1192
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1193 (defun insert-file-literally (filename)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1194 "Insert contents of file FILENAME into buffer after point with no conversion.
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1195
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1196 This function is meant for the user to run interactively.
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1197 Don't call it from programs! Use `insert-file-contents-literally' instead.
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1198 \(Its calling sequence is different; see its documentation)."
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1199 (interactive "*fInsert file literally: ")
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1200 (if (file-directory-p filename)
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1201 (signal 'file-error (list "Opening input file" "file is a directory"
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1202 filename)))
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1203 (let ((tem (insert-file-contents-literally filename)))
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1204 (push-mark (+ (point) (car (cdr tem))))))
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1205
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1206 (defvar find-file-literally nil
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1207 "Non-nil if this buffer was made by `find-file-literally' or equivalent.
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1208 This is a permanent local.")
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1209 (put 'find-file-literally 'permanent-local t)
18676
3980293d3bbd (find-file-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18466
diff changeset
1210
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1211 (defun find-file-literally (filename)
18676
3980293d3bbd (find-file-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18466
diff changeset
1212 "Visit file FILENAME with no conversion of any kind.
3980293d3bbd (find-file-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18466
diff changeset
1213 Format conversion and character code conversion are both disabled,
3980293d3bbd (find-file-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18466
diff changeset
1214 and multibyte characters are disabled in the resulting buffer.
19122
e18ca4290312 (insert-file-contents-literally):
Richard M. Stallman <rms@gnu.org>
parents: 18923
diff changeset
1215 The major mode used is Fundamental mode regardless of the file name,
e18ca4290312 (insert-file-contents-literally):
Richard M. Stallman <rms@gnu.org>
parents: 18923
diff changeset
1216 and local variable specifications in the file are ignored.
33558
786f1533a10f (basic-save-buffer): Don't add a newline if
Gerd Moellmann <gerd@gnu.org>
parents: 33105
diff changeset
1217 Automatic uncompression and adding a newline at the end of the
786f1533a10f (basic-save-buffer): Don't add a newline if
Gerd Moellmann <gerd@gnu.org>
parents: 33105
diff changeset
1218 file due to `require-final-newline' is also disabled.
19305
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1219
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1220 You cannot absolutely rely on this function to result in
19575
d5de4cc3f899 (find-file-literally): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19552
diff changeset
1221 visiting the file literally. If Emacs already has a buffer
19305
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1222 which is visiting the file, you get the existing buffer,
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1223 regardless of whether it was created literally or not.
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1224
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1225 In a Lisp program, if you want to be sure of accessing a file's
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1226 contents literally, you should create a temporary buffer and then read
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1227 the file contents into it using `insert-file-contents-literally'."
18676
3980293d3bbd (find-file-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18466
diff changeset
1228 (interactive "FFind file literally: ")
19305
030c40d12288 (insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19199
diff changeset
1229 (switch-to-buffer (find-file-noselect filename nil t)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1230
8650
deb008af7049 (after-find-file-from-revert-buffer): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 8618
diff changeset
1231 (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
1232
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
1233 (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
1234 after-find-file-from-revert-buffer
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
1235 nomodes)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1236 "Called after finding a file and by the default revert function.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1237 Sets buffer mode, parses local variables.
1212
de70f50101c0 (after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents: 1182
diff changeset
1238 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
1239 error in reading the file. WARN non-nil means warn if there
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1240 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
1241 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
1242 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
1243 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
1244 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
1245 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
1246 unless NOMODES is non-nil."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1247 (setq buffer-read-only (not (file-writable-p buffer-file-name)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1248 (if noninteractive
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1249 nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1250 (let* (not-serious
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1251 (msg
32830
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1252 (cond
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1253 ((not warn) nil)
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1254 ((and error (file-attributes buffer-file-name))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1255 (setq buffer-read-only t)
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1256 "File exists, but cannot be read")
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1257 ((not buffer-read-only)
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1258 (if (and warn
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1259 ;; No need to warn if buffer is auto-saved
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1260 ;; under the name of the visited file.
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1261 (not (and buffer-file-name
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1262 auto-save-visited-file-name))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1263 (file-newer-than-file-p (or buffer-auto-save-file-name
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1264 (make-auto-save-file-name))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1265 buffer-file-name))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1266 (format "%s has auto save data; consider M-x recover-file"
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1267 (file-name-nondirectory buffer-file-name))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1268 (setq not-serious t)
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1269 (if error "(New file)" nil)))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1270 ((not error)
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1271 (setq not-serious t)
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1272 "Note: file is write protected")
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1273 ((file-attributes (directory-file-name default-directory))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1274 "File not found and directory write-protected")
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1275 ((file-exists-p (file-name-directory buffer-file-name))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1276 (setq buffer-read-only nil))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1277 (t
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1278 (setq buffer-read-only nil)
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1279 (if (file-exists-p (file-name-directory (directory-file-name (file-name-directory buffer-file-name))))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1280 "Use M-x make-directory RET RET to create the directory"
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1281 "Use C-u M-x make-directory RET RET to create directory and its parents")))))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1282 (when msg
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1283 (message msg)
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1284 (or not-serious (sit-for 1 nil t))))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1285 (when (and auto-save-default (not noauto))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1286 (auto-save-mode t)))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1287 ;; Make people do a little extra work (C-x C-q)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1288 ;; before altering a backup file.
32830
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1289 (when (backup-file-name-p buffer-file-name)
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1290 (setq buffer-read-only t))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1291 (unless nomodes
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1292 (when (and view-read-only view-mode)
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1293 (view-mode-disable))
13857
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
1294 (normal-mode t)
32830
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1295 (when (and buffer-read-only
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1296 view-read-only
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1297 (not (eq (get major-mode 'mode-class) 'special)))
1e6c5cca37db (after-find-file): Don't print any warnings if
Gerd Moellmann <gerd@gnu.org>
parents: 32828
diff changeset
1298 (view-mode-enter))
13857
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
1299 (run-hooks 'find-file-hooks)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1300
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1301 (defun normal-mode (&optional find-file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1302 "Choose the major mode for this buffer automatically.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1303 Also sets up any specified local variables of the file.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1304 Uses the visited file name, the -*- line, and the local variables spec.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1305
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1306 This function is called automatically from `find-file'. In that case,
23657
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1307 we may set up the file-specified mode and local variables,
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1308 depending on the value of `enable-local-variables': if it is t, we do;
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1309 if it is nil, we don't; otherwise, we query.
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1310 In addition, if `local-enable-local-variables' is nil, we do
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1311 not set local variables (though we do notice a mode specified with -*-.)
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1312
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1313 `enable-local-variables' is ignored if you run `normal-mode' interactively,
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1314 or from Lisp without specifying the optional argument FIND-FILE;
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1315 in that case, this function acts as if `enable-local-variables' were t."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1316 (interactive)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1317 (or find-file (funcall (or default-major-mode 'fundamental-mode)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1318 (condition-case err
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1319 (set-auto-mode)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1320 (error (message "File mode specification error: %s"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1321 (prin1-to-string err))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1322 (condition-case err
566
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1323 (let ((enable-local-variables (or (not find-file)
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1324 enable-local-variables)))
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1325 (hack-local-variables))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1326 (error (message "File local-variables error: %s"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1327 (prin1-to-string err)))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1328
13662
cb0496b98829 (auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents: 13497
diff changeset
1329 (defvar auto-mode-alist
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1330 (mapc
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1331 (lambda (elt)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1332 (cons (purecopy (car elt)) (cdr elt)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1333 '(("\\.te?xt\\'" . text-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1334 ("\\.c\\'" . c-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1335 ("\\.h\\'" . c-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1336 ("\\.tex\\'" . tex-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1337 ("\\.ltx\\'" . latex-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1338 ("\\.el\\'" . emacs-lisp-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1339 ("\\.scm\\'" . scheme-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1340 ("\\.l\\'" . lisp-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1341 ("\\.lisp\\'" . lisp-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1342 ("\\.f\\'" . fortran-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1343 ("\\.F\\'" . fortran-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1344 ("\\.for\\'" . fortran-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1345 ("\\.p\\'" . pascal-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1346 ("\\.pas\\'" . pascal-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1347 ("\\.ad[abs]\\'" . ada-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1348 ("\\.\\([pP][Llm]\\|al\\)\\'" . perl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1349 ("\\.s?html?\\'" . html-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1350 ("\\.cc\\'" . c++-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1351 ("\\.hh\\'" . c++-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1352 ("\\.hpp\\'" . c++-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1353 ("\\.C\\'" . c++-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1354 ("\\.H\\'" . c++-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1355 ("\\.cpp\\'" . c++-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1356 ("\\.cxx\\'" . c++-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1357 ("\\.hxx\\'" . c++-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1358 ("\\.c\\+\\+\\'" . c++-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1359 ("\\.h\\+\\+\\'" . c++-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1360 ("\\.m\\'" . objc-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1361 ("\\.java\\'" . java-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1362 ("\\.mk\\'" . makefile-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1363 ("\\(M\\|m\\|GNUm\\)akefile\\(\\.in\\)?\\'" . makefile-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1364 ("\\.am\\'" . makefile-mode) ;For Automake.
566
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1365 ;;; Less common extensions come here
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1366 ;;; so more common ones above are found faster.
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1367 ("\\.texinfo\\'" . texinfo-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1368 ("\\.te?xi\\'" . texinfo-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1369 ("\\.s\\'" . asm-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1370 ("\\.S\\'" . asm-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1371 ("\\.asm\\'" . asm-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1372 ("ChangeLog\\'" . change-log-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1373 ("change\\.log\\'" . change-log-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1374 ("changelo\\'" . change-log-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1375 ("ChangeLog\\.[0-9]+\\'" . change-log-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1376 ;; for MSDOS and MS-Windows (which are case-insensitive)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1377 ("changelog\\'" . change-log-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1378 ("changelog\\.[0-9]+\\'" . change-log-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1379 ("\\$CHANGE_LOG\\$\\.TXT" . change-log-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1380 ("\\.scm\\.[0-9]*\\'" . scheme-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1381 ("\\.[ck]?sh\\'\\|\\.shar\\'\\|/\\.z?profile\\'" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1382 ("\\(/\\|\\`\\)\\.\\(bash_profile\\|z?login\\|bash_login\\|z?logout\\)\\'" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1383 ("\\(/\\|\\`\\)\\.\\(bash_logout\\|shrc\\|[kz]shrc\\|bashrc\\|t?cshrc\\|esrc\\)\\'" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1384 ("\\(/\\|\\`\\)\\.\\([kz]shenv\\|xinitrc\\|startxrc\\|xsession\\)\\'" . sh-mode)
33703
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
1385 ("\\.m?spec\\'" . sh-mode)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1386 ("\\.mm\\'" . nroff-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1387 ("\\.me\\'" . nroff-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1388 ("\\.ms\\'" . nroff-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1389 ("\\.man\\'" . nroff-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1390 ("\\.\\(u?lpc\\|pike\\|pmod\\)\\'" . pike-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1391 ("\\.TeX\\'" . tex-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1392 ("\\.sty\\'" . latex-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1393 ("\\.cls\\'" . latex-mode) ;LaTeX 2e class
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1394 ("\\.clo\\'" . latex-mode) ;LaTeX 2e class option
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1395 ("\\.bbl\\'" . latex-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1396 ("\\.bib\\'" . bibtex-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1397 ("\\.sql\\'" . sql-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1398 ("\\.m4\\'" . m4-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1399 ("\\.mc\\'" . m4-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1400 ("\\.mf\\'" . metafont-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1401 ("\\.mp\\'" . metapost-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1402 ("\\.vhdl?\\'" . vhdl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1403 ("\\.article\\'" . text-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1404 ("\\.letter\\'" . text-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1405 ("\\.tcl\\'" . tcl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1406 ("\\.exp\\'" . tcl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1407 ("\\.itcl\\'" . tcl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1408 ("\\.itk\\'" . tcl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1409 ("\\.icn\\'" . icon-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1410 ("\\.sim\\'" . simula-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1411 ("\\.mss\\'" . scribe-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1412 ("\\.f90\\'" . f90-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1413 ("\\.pro\\'" . idlwave-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1414 ("\\.lsp\\'" . lisp-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1415 ("\\.awk\\'" . awk-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1416 ("\\.prolog\\'" . prolog-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1417 ("\\.tar\\'" . tar-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1418 ("\\.\\(arc\\|zip\\|lzh\\|zoo\\|jar\\)\\'" . archive-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1419 ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|JAR\\)\\'" . archive-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1420 ;; Mailer puts message to be edited in
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1421 ;; /tmp/Re.... or Message
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1422 ("\\`/tmp/Re" . text-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1423 ("/Message[0-9]*\\'" . text-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1424 ("/drafts/[0-9]+\\'" . mh-letter-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1425 ("\\.zone\\'" . zone-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1426 ;; some news reader is reported to use this
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1427 ("\\`/tmp/fol/" . text-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1428 ("\\.y\\'" . c-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1429 ("\\.lex\\'" . c-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1430 ("\\.oak\\'" . scheme-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1431 ("\\.sgml?\\'" . sgml-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1432 ("\\.xml\\'" . sgml-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1433 ("\\.dtd\\'" . sgml-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1434 ("\\.ds\\(ss\\)?l\\'" . dsssl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1435 ("\\.idl\\'" . idl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1436 ;; .emacs following a directory delimiter
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1437 ;; in Unix, MSDOG or VMS syntax.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1438 ("[]>:/\\]\\..*emacs\\'" . emacs-lisp-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1439 ("\\`\\..*emacs\\'" . emacs-lisp-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1440 ;; _emacs following a directory delimiter
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1441 ;; in MsDos syntax
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1442 ("[:/]_emacs\\'" . emacs-lisp-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1443 ("/crontab\\.X*[0-9]+\\'" . shell-script-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1444 ("\\.ml\\'" . lisp-mode)
33703
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
1445 ("\\.\\(asn\\|mib\\|smi\\)\\'" . snmp-mode)
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
1446 ("\\.\\(as\\|mi\\|sm\\)2\\'" . snmpv2-mode)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1447 ("\\.\\(diffs?\\|patch\\|rej\\)\\'" . diff-mode)
32579
d06fc5f25d6c (auto-mode-alist): Add .dif and .pat as diff-mode extensions, for MS-DOS.
Eli Zaretskii <eliz@gnu.org>
parents: 32253
diff changeset
1448 ("\\.\\(dif\\|pat\\)\\'" . diff-mode) ; for MSDOG
33703
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
1449 ("\\.[eE]?[pP][sS]\\'" . ps-mode)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1450 ("configure\\.in\\'" . autoconf-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1451 ("BROWSE\\'" . ebrowse-tree-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1452 ("\\.ebrowse\\'" . ebrowse-tree-mode)
32240
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1453 ("#\\*mail\\*" . mail-mode)
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1454 ;; Get rid of any trailing .n.m and try again.
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1455 ;; This is for files saved by cvs-merge that look like .#<file>.<rev>
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1456 ;; or .#<file>.<rev>-<rev> or VC's <file>.~<rev>~
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1457 ("\\.~?[0-9]+\\.[0-9][-.0-9]*~?\\'" nil t)
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1458 ;;; The following should come after the ChangeLog pattern
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1459 ;;; for the sake of ChangeLog.1, etc.
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1460 ;;; and after the .scm.[0-9] and CVS' <file>.<rev> patterns too.
34009
8091ba37be87 (auto-mode-alist): Add an entry for antlr-mode.
Gerd Moellmann <gerd@gnu.org>
parents: 33703
diff changeset
1461 ("\\.[12345678]\\'" . nroff-mode)
8091ba37be87 (auto-mode-alist): Add an entry for antlr-mode.
Gerd Moellmann <gerd@gnu.org>
parents: 33703
diff changeset
1462 ("\\.g\\'" . antlr-mode)))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1463 "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
1464 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
1465 \(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
1466 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
1467 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
1468
13106af26190 (auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 9601
diff changeset
1469 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
1470 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
1471 REGEXP and search the list again for another match.")
566
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1472
21069
e99cb5736904 (auto-mode-alist): Recognize zone-mode.
Richard M. Stallman <rms@gnu.org>
parents: 21046
diff changeset
1473
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
1474 (defvar interpreter-mode-alist
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1475 (mapc
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1476 (lambda (l)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1477 (cons (purecopy (car l)) (cdr l)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1478 '(("perl" . perl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1479 ("perl5" . perl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1480 ("miniperl" . perl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1481 ("wish" . tcl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1482 ("wishx" . tcl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1483 ("tcl" . tcl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1484 ("tclsh" . tcl-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1485 ("awk" . awk-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1486 ("mawk" . awk-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1487 ("nawk" . awk-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1488 ("gawk" . awk-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1489 ("scm" . scheme-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1490 ("ash" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1491 ("bash" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1492 ("bash2" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1493 ("csh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1494 ("dtksh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1495 ("es" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1496 ("itcsh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1497 ("jsh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1498 ("ksh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1499 ("oash" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1500 ("pdksh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1501 ("rc" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1502 ("rpm" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1503 ("sh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1504 ("sh5" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1505 ("tcsh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1506 ("wksh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1507 ("wsh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1508 ("zsh" . sh-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1509 ("tail" . text-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1510 ("more" . text-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1511 ("less" . text-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1512 ("pg" . text-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1513 ("make" . makefile-mode) ; Debian uses this
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1514 ("guile" . scheme-mode)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1515 ("clisp" . lisp-mode)))
5956
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1516 "Alist mapping interpreter names to major modes.
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1517 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
1518 Each element looks like (INTERPRETER . MODE).
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1519 The car of each element is compared with
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1520 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
1521 If it matches, mode MODE is selected.")
586a37656a31 (interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5804
diff changeset
1522
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
1523 (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
1524 "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
1525
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
1526 (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
1527 "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
1528 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
1529 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
1530
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1531 (defvar auto-mode-interpreter-regexp
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1532 "#![ \t]?\\([^ \t\n]*\
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1533 /bin/env[ \t]\\)?\\([^ \t\n]+\\)"
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1534 "Regular expression matching interpreters, for file mode determination.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1535 This regular expression is matched against the first line of a file
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1536 to determine the file's mode in `set-auto-mode' when Emacs can't deduce
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1537 a mode from the file's name. If it matches, the file is assumed to
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1538 be interpreted by the interpreter matched by the second group of the
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1539 regular expression. The mode is then determined as the mode associated
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1540 with that interpreter in `interpreter-mode-alist'.")
30689
194b7f43b959 (auto-mode-interpreter-regexp): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 30630
diff changeset
1541
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1542 (defun set-auto-mode (&optional just-from-file-name)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1543 "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
1544 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
1545 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
1546 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
1547 `interpreter-mode-alist'.
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1548
25cf7bc3b8c5 (interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents: 7643
diff changeset
1549 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
1550 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
1551
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1552 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
1553 -*- mode tag.
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1554
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1555 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
1556 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
1557 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
1558 ;; 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
1559 (let (beg end done modes)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1560 (save-excursion
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1561 (goto-char (point-min))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1562 (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
1563 (and enable-local-variables
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1564 ;; 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
1565 ;; 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
1566 (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
1567 (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
1568 (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
1569 (buffer-name))))
11189
a2a85a29cdd6 (set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 11180
diff changeset
1570 (while (let ((sufs inhibit-first-line-modes-suffixes))
a2a85a29cdd6 (set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 11180
diff changeset
1571 (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
1572 (setq sufs (cdr sufs)))
a2a85a29cdd6 (set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 11180
diff changeset
1573 sufs)
a2a85a29cdd6 (set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 11180
diff changeset
1574 (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
1575 (while (and temp
11180
7a9dceb0fb96 (inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11160
diff changeset
1576 (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
1577 (setq temp (cdr temp)))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1578 (not temp))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1579 (search-forward "-*-" (save-excursion
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1580 ;; If the file begins with "#!"
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1581 ;; (exec interpreter magic), look
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1582 ;; 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
1583 ;; lines. You cannot necessarily
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1584 ;; 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
1585 ;; 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
1586 ;; the interpreter invocation.
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1587 (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
1588 (point)) t)
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1589 (progn
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1590 (skip-chars-forward " \t")
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1591 (setq beg (point))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1592 (search-forward "-*-"
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1593 (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
1594 t))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1595 (progn
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1596 (forward-char -3)
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1597 (skip-chars-backward " \t")
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1598 (setq end (point))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1599 (goto-char beg)
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1600 (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
1601 ;; Find all specifications for the `mode:' variable
6322
62886e6eefe6 Fix typo in comment.
Karl Heuer <kwzh@gnu.org>
parents: 6309
diff changeset
1602 ;; 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
1603 (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
1604 (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
1605 (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
1606 (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
1607 (skip-chars-forward " \t")
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1608 (setq beg (point))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1609 (if (search-forward ";" end t)
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1610 (forward-char -1)
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1611 (goto-char end))
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1612 (skip-chars-backward " \t")
32240
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1613 (push (intern (concat (downcase (buffer-substring beg (point))) "-mode"))
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1614 modes))
4699
f57fe6dbf4a0 (hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents: 4645
diff changeset
1615 ;; Simple -*-MODE-*- case.
32240
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1616 (push (intern (concat (downcase (buffer-substring beg end))
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1617 "-mode"))
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1618 modes)))))
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1619 ;; 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
1620 ;; outside the save-excursion.
32240
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1621 (unless just-from-file-name
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1622 (dolist (mode (nreverse modes))
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1623 (if (not (functionp mode))
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1624 (message "Ignoring unknown mode `%s'" mode)
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1625 (setq done t)
f2a40beeddaa (set-auto-mode): Ignore unknown -*- mode -*- rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32138
diff changeset
1626 (funcall mode))))
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1627 ;; 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
1628 (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
1629 (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
1630 (keep-going t))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1631 ;; 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
1632 (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
1633 (while keep-going
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1634 (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
1635 (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
1636 (mode nil))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1637 ;; 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
1638 (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
1639 (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
1640 (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
1641 (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
1642 (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
1643 (nth 2 (car alist)))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1644 (setq mode (car (cdr (car alist)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1645 name (substring name 0 (match-beginning 0))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1646 keep-going t)
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1647 (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
1648 keep-going nil)))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1649 (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
1650 (if mode
21773
c718d675ee93 (set-auto-mode): When just-from-file-name is set, don't
Richard M. Stallman <rms@gnu.org>
parents: 21619
diff changeset
1651 ;; When JUST-FROM-FILE-NAME is set,
c718d675ee93 (set-auto-mode): When just-from-file-name is set, don't
Richard M. Stallman <rms@gnu.org>
parents: 21619
diff changeset
1652 ;; we are working on behalf of set-visited-file-name.
c718d675ee93 (set-auto-mode): When just-from-file-name is set, don't
Richard M. Stallman <rms@gnu.org>
parents: 21619
diff changeset
1653 ;; In that case, if the major mode specified is the
c718d675ee93 (set-auto-mode): When just-from-file-name is set, don't
Richard M. Stallman <rms@gnu.org>
parents: 21619
diff changeset
1654 ;; same one we already have, don't actually reset it.
c718d675ee93 (set-auto-mode): When just-from-file-name is set, don't
Richard M. Stallman <rms@gnu.org>
parents: 21619
diff changeset
1655 ;; We don't want to lose minor modes such as Font Lock.
c718d675ee93 (set-auto-mode): When just-from-file-name is set, don't
Richard M. Stallman <rms@gnu.org>
parents: 21619
diff changeset
1656 (unless (and just-from-file-name (eq mode major-mode))
c718d675ee93 (set-auto-mode): When just-from-file-name is set, don't
Richard M. Stallman <rms@gnu.org>
parents: 21619
diff changeset
1657 (funcall mode))
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1658 ;; 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
1659 ;; 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
1660 ;; 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
1661 ;; 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
1662 (let ((interpreter
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1663 (save-excursion
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1664 (goto-char (point-min))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1665 (if (looking-at auto-mode-interpreter-regexp)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1666 (match-string 2)
13496
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1667 "")))
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1668 elt)
1bd9f5d576ce (set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents: 13326
diff changeset
1669 ;; 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
1670 (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
1671 interpreter-mode-alist))
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1672 (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
1673 (if elt
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1674 (funcall (cdr elt))))))))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1675
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1676 (defun hack-local-variables-prop-line ()
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1677 "Set local variables specified in the -*- line.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1678 Ignore any specification for `mode:' and `coding:';
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1679 `set-auto-mode' should already have handled `mode:',
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1680 `set-auto-coding' should already have handled `coding:'."
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1681 (save-excursion
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1682 (goto-char (point-min))
6575
9aba6be8e460 (hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents: 6574
diff changeset
1683 (let ((result nil)
23657
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1684 (end (save-excursion (end-of-line (and (looking-at "^#!") 2)) (point)))
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1685 (enable-local-variables
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1686 (and local-enable-local-variables enable-local-variables)))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1687 ;; Parse the -*- line into the `result' alist.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1688 (cond ((not (search-forward "-*-" end t))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1689 ;; doesn't have one.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1690 nil)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1691 ((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
1692 ;; Simple form: "-*- MODENAME -*-". Already handled.
9aba6be8e460 (hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents: 6574
diff changeset
1693 nil)
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1694 (t
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1695 ;; Hairy form: '-*-' [ <variable> ':' <value> ';' ]* '-*-'
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1696 ;; (last ";" is optional).
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1697 (save-excursion
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1698 (if (search-forward "-*-" end t)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1699 (setq end (- (point) 3))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1700 (error "-*- not terminated before end of line")))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1701 (while (< (point) end)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1702 (or (looking-at "[ \t]*\\([^ \t\n:]+\\)[ \t]*:[ \t]*")
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1703 (error "Malformed -*- line"))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1704 (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
1705 ;; 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
1706 ;; 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
1707 ;; 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
1708 (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
1709 (match-beginning 1)
5d44c48f3b7b (hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents: 12050
diff changeset
1710 (match-end 1))))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1711 (val (save-restriction
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1712 (narrow-to-region (point) end)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1713 (read (current-buffer)))))
16440
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1714 ;; It is traditional to ignore
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1715 ;; 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
1716 ;; so we must do that here as well.
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1717 ;; That is inconsistent, but we're stuck with it.
19645
df1911293a5e (hack-local-variables-prop-line): Ignore coding: tag.
Kenichi Handa <handa@m17n.org>
parents: 19575
diff changeset
1718 ;; The same can be said for `coding' in set-auto-coding.
16440
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
1719 (or (equal (downcase (symbol-name key)) "mode")
19645
df1911293a5e (hack-local-variables-prop-line): Ignore coding: tag.
Kenichi Handa <handa@m17n.org>
parents: 19575
diff changeset
1720 (equal (downcase (symbol-name key)) "coding")
6575
9aba6be8e460 (hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents: 6574
diff changeset
1721 (setq result (cons (cons key val) result)))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1722 (skip-chars-forward " \t;")))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1723 (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
1724
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1725 (if (and result
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1726 (or (eq enable-local-variables t)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1727 (and enable-local-variables
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1728 (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
1729 (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
1730 (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
1731 (error
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1732 ;; 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
1733 ;; 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
1734 ;; 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
1735 (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
1736 (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
1737 (error
4b1f2e4dcf34 (hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents: 4965
diff changeset
1738 (switch-to-buffer-other-frame (current-buffer))))))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1739 (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
1740 (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
1741 (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
1742 (while result
104a97493dcc (hack-local-variables-prop-line): Bind enable-local-eval.
Richard M. Stallman <rms@gnu.org>
parents: 15329
diff changeset
1743 (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
1744 (setq result (cdr result))))))))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1745
10169
04425b872c5b (hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents: 10149
diff changeset
1746 (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
1747 "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
1748 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
1749 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
1750
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1751 (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
1752 "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
1753 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
1754 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
1755 (unless mode-only
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1756 (hack-local-variables-prop-line))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1757 ;; Look for "Local variables:" line in last page.
23657
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1758 (let (mode-specified
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1759 (enable-local-variables
7f5af9d1766d (hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents: 23606
diff changeset
1760 (and local-enable-local-variables enable-local-variables)))
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1761 (save-excursion
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1762 (goto-char (point-max))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1763 (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
1764 (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
1765 (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
1766 (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
1767 mode-only
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1768 (and enable-local-variables
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1769 (save-window-excursion
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1770 (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
1771 (save-excursion
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1772 (beginning-of-line)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1773 (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
1774 (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
1775 (if buffer-file-name
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1776 (file-name-nondirectory
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1777 buffer-file-name)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1778 (concat "buffer "
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1779 (buffer-name))))))))))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1780 (let ((continue t)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1781 prefix prefixlen suffix beg
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1782 mode-specified
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1783 (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
1784 ;; 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
1785 ;; 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
1786 (skip-chars-forward " \t")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1787 (or (eolp)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1788 (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
1789 (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
1790 (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
1791 (or (bolp)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1792 (setq prefix
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1793 (buffer-substring (point)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1794 (progn (beginning-of-line) (point)))))
566
601ba8ba6544 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 423
diff changeset
1795
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1796 (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
1797 prefix (regexp-quote prefix)))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1798 (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
1799 (while continue
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1800 ;; 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
1801 (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
1802 (forward-line 1))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1803 ;; 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
1804 (if prefix
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1805 (if (looking-at prefix)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1806 (forward-char prefixlen)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1807 (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
1808 ;; 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
1809 (skip-chars-forward " \t")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1810 (setq beg (point))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1811 (skip-chars-forward "^:\n")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1812 (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
1813 (skip-chars-backward " \t")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1814 (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
1815 (var (read str))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1816 val)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1817 ;; 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
1818 (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
1819 (setq continue nil)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1820 ;; 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
1821 (skip-chars-forward "^:")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1822 (forward-char 1)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1823 (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
1824 (skip-chars-backward "\n")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1825 (skip-chars-forward " \t")
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1826 (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
1827 (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
1828 (if mode-only
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1829 (if (eq var 'mode)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1830 (setq mode-specified t))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1831 ;; 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
1832 (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
1833 (unless mode-only
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1834 (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
1835 mode-specified))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1836
16687
049c87a96dca Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents: 16684
diff changeset
1837 (defvar ignored-local-variables
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1838 '(enable-local-eval)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1839 "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
1840
6734
6e61dbbfce80 (hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 6733
diff changeset
1841 ;; 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
1842 (put 'debugger 'risky-local-variable t)
7682
ce09b4fd6cc8 Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents: 7662
diff changeset
1843 (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
1844 (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
1845 (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
1846 (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
1847 (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
1848 (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
1849 (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
1850 (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
1851 (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
1852 (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
1853 (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
1854 (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
1855 (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
1856 (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
1857 (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
1858 ;; 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
1859 (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
1860 (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
1861
9162
53d02761f5b7 (hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 9068
diff changeset
1862 ;; 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
1863 (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
1864
7217
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1865 (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
1866 (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
1867
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1868 (defun hack-one-local-variable (var val)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1869 "\"Set\" one variable in a local variables spec.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
1870 A few variable names are treated specially."
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1871 (cond ((eq var 'mode)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1872 (funcall (intern (concat (downcase (symbol-name val))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1873 "-mode"))))
19645
df1911293a5e (hack-local-variables-prop-line): Ignore coding: tag.
Kenichi Handa <handa@m17n.org>
parents: 19575
diff changeset
1874 ((eq var 'coding)
df1911293a5e (hack-local-variables-prop-line): Ignore coding: tag.
Kenichi Handa <handa@m17n.org>
parents: 19575
diff changeset
1875 ;; We have already handled coding: tag in set-auto-coding.
df1911293a5e (hack-local-variables-prop-line): Ignore coding: tag.
Kenichi Handa <handa@m17n.org>
parents: 19575
diff changeset
1876 nil)
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1877 ((memq var ignored-local-variables)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1878 nil)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1879 ;; "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
1880 ;; 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
1881 ((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
1882 (and
21327
01870b9b4f2a (hack-one-local-variable): Variables named ...-predicate are treated as risky.
Richard M. Stallman <rms@gnu.org>
parents: 21263
diff changeset
1883 (string-match "-hooks?$\\|-functions?$\\|-forms?$\\|-program$\\|-command$\\|-predicate$"
9162
53d02761f5b7 (hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 9068
diff changeset
1884 (symbol-name var))
53d02761f5b7 (hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents: 9068
diff changeset
1885 (not (get var 'safe-local-variable))))
13980
ad74bc8e877f (make-directory): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13903
diff changeset
1886 ;; 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
1887 ;; if the args do nothing tricky.
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1888 (if (or (and (eq var 'eval)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1889 (consp val)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1890 (eq (car val) 'put)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1891 (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
1892 (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
1893 ;; 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
1894 ;; not functions.
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1895 (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
1896 (equal (nth 3 val) ''defun))
7217
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1897 (memq (nth 1 (nth 2 val))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1898 '(lisp-indent-hook)))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1899 ;; 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
1900 (and (not (zerop (user-uid)))
7217
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1901 (or (eq enable-local-eval t)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1902 (and enable-local-eval
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1903 (save-window-excursion
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1904 (switch-to-buffer (current-buffer))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1905 (save-excursion
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1906 (beginning-of-line)
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1907 (set-window-start (selected-window) (point)))
c35a4919c161 (hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents: 7215
diff changeset
1908 (setq enable-local-eval
23779
68c3d9e82bb7 (hack-one-local-variable): Cope with non-file buffers.
Richard M. Stallman <rms@gnu.org>
parents: 23657
diff changeset
1909 (y-or-n-p (format "Process `eval' or hook local variables in %s? "
68c3d9e82bb7 (hack-one-local-variable): Cope with non-file buffers.
Richard M. Stallman <rms@gnu.org>
parents: 23657
diff changeset
1910 (if buffer-file-name
68c3d9e82bb7 (hack-one-local-variable): Cope with non-file buffers.
Richard M. Stallman <rms@gnu.org>
parents: 23657
diff changeset
1911 (concat "file " (file-name-nondirectory buffer-file-name))
68c3d9e82bb7 (hack-one-local-variable): Cope with non-file buffers.
Richard M. Stallman <rms@gnu.org>
parents: 23657
diff changeset
1912 (concat "buffer " (buffer-name)))))))))))
3626
ae0389767674 (hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents: 3624
diff changeset
1913 (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
1914 (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
1915 (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
1916 (set var val))
23779
68c3d9e82bb7 (hack-one-local-variable): Cope with non-file buffers.
Richard M. Stallman <rms@gnu.org>
parents: 23657
diff changeset
1917 (message "Ignoring `eval:' in the local variables list")))
1395
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1918 ;; Ordinary variable, really set it.
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1919 (t (make-local-variable var)
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1920 (set var val))))
f6f838c4a26e (buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 1371
diff changeset
1921
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1922
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
1923 (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
1924 "*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
1925 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
1926 \(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
1927 \(2) the current major mode is a \"special\" mode,
17666
ca11152dcad5 Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17660
diff changeset
1928 \ not suitable for ordinary files, or
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
1929 \(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
1930 :type 'boolean
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
1931 :group 'editing-basics)
17660
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
1932
16971
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1933 (defun set-visited-file-name (filename &optional no-query along-with-file)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1934 "Change name of file visited in current buffer to FILENAME.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1935 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
1936 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
1937 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
1938 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
1939
6ec32e968edb (set-visited-file-name): New optional arg NO-QUERY.
Richard M. Stallman <rms@gnu.org>
parents: 15548
diff changeset
1940 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
1941 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
1942
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1943 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
1944 the old visited file has been renamed to the new name FILENAME."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1945 (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
1946 (if (buffer-base-buffer)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
1947 (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
1948 (let (truename)
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1949 (if filename
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1950 (setq filename
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1951 (if (string-equal filename "")
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1952 nil
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1953 (expand-file-name filename))))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1954 (if filename
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1955 (progn
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1956 (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
1957 (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
1958 (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
1959 (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
1960 (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
1961 (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
1962 (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
1963 filename)))
3682b5e64ce3 (set-visited-file-name): Query if there's already another
Richard M. Stallman <rms@gnu.org>
parents: 14636
diff changeset
1964 (error "Aborted")))
8140
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1965 (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
1966 (progn
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1967 (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
1968 (unlock-buffer)))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1969 (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
1970 (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
1971 (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
1972 (if (string= new-name "")
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1973 (error "Empty file name"))
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1974 (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
1975 (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
1976 (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
1977 (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
1978 (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
1979 (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
1980 (or along-with-file
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
1981 (clear-visited-file-modtime))
13289
c4f93bb943b7 (set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents: 13182
diff changeset
1982 ;; 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
1983 (if truename
13289
c4f93bb943b7 (set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents: 13182
diff changeset
1984 (progn
c4f93bb943b7 (set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents: 13182
diff changeset
1985 (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
1986 (if find-file-visit-truename
c4f93bb943b7 (set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents: 13182
diff changeset
1987 (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
1988 (setq buffer-file-number
ed2ac2e85eef (set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents: 7993
diff changeset
1989 (if filename
13326
4e1b078121ad (set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 13289
diff changeset
1990 (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
1991 nil)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1992 ;; write-file-hooks is normally used for things like ftp-find-file
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1993 ;; that visit things that are not local files as if they were files.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1994 ;; Changing to visit an ordinary local file instead should flush the hook.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1995 (kill-local-variable 'write-file-hooks)
2375
94e135f2d64d (local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 2335
diff changeset
1996 (kill-local-variable 'local-write-file-hooks)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1997 (kill-local-variable 'revert-buffer-function)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
1998 (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
1999 ;; 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
2000 ;; 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
2001 (if vc-mode
8eb722515c31 (set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents: 6454
diff changeset
2002 (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
2003 (kill-local-variable 'vc-mode)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2004 ;; Turn off backup files for certain file names.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2005 ;; Since this is a permanent local, the major mode won't eliminate it.
21001
88e63a96a2d4 (set-visited-file-name): Don't call backup-enable-predicate
Karl Heuer <kwzh@gnu.org>
parents: 20660
diff changeset
2006 (and buffer-file-name
88e63a96a2d4 (set-visited-file-name): Don't call backup-enable-predicate
Karl Heuer <kwzh@gnu.org>
parents: 20660
diff changeset
2007 (not (funcall backup-enable-predicate buffer-file-name))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2008 (progn
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2009 (make-local-variable 'backup-inhibited)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2010 (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
2011 (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
2012 ;; 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
2013 (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
2014 (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
2015 (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
2016 ;; 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
2017 ;; 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
2018 ;; 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
2019 ;; 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
2020 ;; 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
2021 (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
2022 (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
2023 ;; 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
2024 (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
2025 (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
2026 (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
2027 (and buffer-file-name
c1b9bc4c525b (set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents: 16831
diff changeset
2028 (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
2029 (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
2030 ;; 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
2031 (condition-case nil
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
2032 ;; 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
2033 (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
2034 (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
2035 ;; 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
2036 (hack-local-variables t)
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
2037 (set-auto-mode t))
473ee9294c31 (set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents: 17525
diff changeset
2038 (error nil)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2039
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2040 (defun write-file (filename &optional confirm)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2041 "Write current buffer into file FILENAME.
24832
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2042 This makes the buffer visit that file, and marks it as not modified.
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2043
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2044 If you specify just a directory name as FILENAME, that means to use
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2045 the default file name but in that directory. You can also yank
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2046 the default file name into the minibuffer to edit it, using M-n.
14469
713f9bf02e20 (auto-mode-alist): .ksh suffix means sh-mode.
Richard M. Stallman <rms@gnu.org>
parents: 14401
diff changeset
2047
24832
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2048 If the buffer is not already visiting a file, the default file name
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2049 for the output file is the buffer name.
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2050
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2051 If optional second arg CONFIRM is non-nil, this function
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2052 asks for confirmation before overwriting an existing file.
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2053 Interactively, confirmation is required unless you supply a prefix argument."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2054 ;; (interactive "FWrite file: ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2055 (interactive
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2056 (list (if buffer-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2057 (read-file-name "Write file: "
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2058 nil nil nil nil)
24832
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2059 (read-file-name "Write file: " default-directory
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2060 (expand-file-name
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2061 (file-name-nondirectory (buffer-name))
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2062 default-directory)
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2063 nil nil))
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2064 (not current-prefix-arg)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2065 (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
2066 (progn
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
2067 ;; If arg is just a directory,
24832
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2068 ;; use the default file name, but in that directory.
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2069 (if (file-directory-p filename)
2003
bff31af6c721 (write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 1905
diff changeset
2070 (setq filename (concat (file-name-as-directory filename)
24832
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2071 (file-name-nondirectory
b772f629b45b (write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents: 24764
diff changeset
2072 (or buffer-file-name (buffer-name))))))
11340
5c97fabe0ab9 (write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents: 11222
diff changeset
2073 (and confirm
5c97fabe0ab9 (write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents: 11222
diff changeset
2074 (file-exists-p filename)
5c97fabe0ab9 (write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents: 11222
diff changeset
2075 (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
2076 (error "Canceled")))
16470
b050d980c422 (set-visited-file-name): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16440
diff changeset
2077 (set-visited-file-name filename (not confirm))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2078 (set-buffer-modified-p t)
20291
96eee1e730a1 (write-file): Make buffer writable if the new file is.
Karl Heuer <kwzh@gnu.org>
parents: 20218
diff changeset
2079 ;; Make buffer writable if file is writable.
96eee1e730a1 (write-file): Make buffer writable if the new file is.
Karl Heuer <kwzh@gnu.org>
parents: 20218
diff changeset
2080 (and buffer-file-name
96eee1e730a1 (write-file): Make buffer writable if the new file is.
Karl Heuer <kwzh@gnu.org>
parents: 20218
diff changeset
2081 (file-writable-p buffer-file-name)
96eee1e730a1 (write-file): Make buffer writable if the new file is.
Karl Heuer <kwzh@gnu.org>
parents: 20218
diff changeset
2082 (setq buffer-read-only nil))
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2083 (save-buffer))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2084
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2085 (defun backup-buffer ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2086 "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
2087 This is normally done before saving the buffer the first time.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2088 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
2089 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
2090 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
2091
895dc357b9a2 (backup-buffer): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 16586
diff changeset
2092 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
2093 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
2094 no longer accessible under its old name."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2095 (if (and make-backup-files (not backup-inhibited)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2096 (not buffer-backed-up)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2097 (file-exists-p buffer-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2098 (memq (aref (elt (file-attributes buffer-file-name) 8) 0)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2099 '(?- ?l)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2100 (let ((real-file-name buffer-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2101 backup-info backupname targets setmodes)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2102 ;; If specified name is a symbolic link, chase it to the target.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2103 ;; 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
2104 (setq real-file-name (file-chase-links real-file-name))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2105 (setq backup-info (find-backup-file-name real-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2106 backupname (car backup-info)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2107 targets (cdr backup-info))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2108 ;;; (if (file-directory-p buffer-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2109 ;;; (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
2110 (if backup-info
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2111 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2112 (let ((delete-old-versions
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2113 ;; 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
2114 ;; 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
2115 ;; 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
2116 (and targets
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2117 (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
2118 (or delete-old-versions
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2119 (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
2120 real-file-name))))))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2121 ;; 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
2122 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2123 (if (or file-precious-flag
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2124 ; (file-symlink-p buffer-file-name)
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2125 backup-by-copying
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2126 (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
2127 (> (file-nlinks real-file-name) 1))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2128 (and (or backup-by-copying-when-mismatch
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2129 (integerp backup-by-copying-when-privileged-mismatch))
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2130 (let ((attr (file-attributes real-file-name)))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2131 (and (or backup-by-copying-when-mismatch
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2132 (and (integerp (nth 2 attr))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2133 (integerp backup-by-copying-when-privileged-mismatch)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2134 (<= (nth 2 attr) backup-by-copying-when-privileged-mismatch)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2135 (or (nth 9 attr)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2136 (not (file-ownership-preserved-p real-file-name)))))))
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2137 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2138 (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
2139 (file-error
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2140 ;; 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
2141 ;; 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
2142 (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
2143 (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
2144 (delete-file backupname))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2145 (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
2146 ;; 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
2147 (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
2148 (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
2149 (file-error
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2150 ;; 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
2151 (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
2152 (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
2153 "~/%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
2154 (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
2155 (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
2156 (sleep-for 1)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2157 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2158 (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
2159 (file-error
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2160 ;; 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
2161 ;; 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
2162 (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
2163 (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
2164 (delete-file backupname))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2165 (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
2166 (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
2167 ;; 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
2168 (if delete-old-versions
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2169 (while targets
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2170 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2171 (delete-file (car targets))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2172 (file-error nil))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2173 (setq targets (cdr targets))))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2174 setmodes)
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2175 (file-error nil))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2176
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2177 (defun file-name-sans-versions (name &optional keep-backup-version)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2178 "Return file NAME sans backup versions or strings.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2179 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
2180 redefine it.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2181 If the optional argument KEEP-BACKUP-VERSION is non-nil,
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2182 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
2183 (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
2184 (if handler
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2185 (funcall handler 'file-name-sans-versions name keep-backup-version)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2186 (substring name 0
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2187 (if (eq system-type 'vax-vms)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2188 ;; VMS version number is (a) semicolon, optional
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2189 ;; sign, zero or more digits or (b) period, option
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2190 ;; sign, zero or more digits, provided this is the
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2191 ;; second period encountered outside of the
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2192 ;; 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
2193 (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
2194 (if (string-match "\\.[^]>:]*\\(\\.[-+]?[0-9]*\\)\\'"
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2195 name)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2196 (match-beginning 1))
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2197 (length name))
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2198 (if keep-backup-version
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2199 (length name)
12591
7caa97ba6a7b (file-name-sans-versions): Recognize version control version numbers.
Richard M. Stallman <rms@gnu.org>
parents: 12587
diff changeset
2200 (or (string-match "\\.~[0-9.]+~\\'" name)
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2201 (string-match "~\\'" name)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
2202 (length name))))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2203
8987
1db2285cec99 (file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8937
diff changeset
2204 (defun file-ownership-preserved-p (file)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2205 "Return t if deleting FILE and rewriting it would preserve the owner."
8987
1db2285cec99 (file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8937
diff changeset
2206 (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
2207 (if handler
1db2285cec99 (file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8937
diff changeset
2208 (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
2209 (let ((attributes (file-attributes file)))
11817
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
2210 ;; 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
2211 ;; information would be lost by an (attempted) delete and create.
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
2212 (or (null attributes)
ba82c338bee3 (path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 11739
diff changeset
2213 (= (nth 2 attributes) (user-uid)))))))
8987
1db2285cec99 (file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8937
diff changeset
2214
8908
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
2215 (defun file-name-sans-extension (filename)
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
2216 "Return FILENAME sans final \"extension\".
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
2217 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
2218 (save-match-data
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
2219 (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
2220 directory)
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
2221 (if (string-match "\\.[^.]*\\'" file)
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
2222 (if (setq directory (file-name-directory filename))
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
2223 (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
2224 directory)
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
2225 (substring file 0 (match-beginning 0)))
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
2226 filename))))
25d8b804abd3 (file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8650
diff changeset
2227
16440
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
2228 (defun file-name-extension (filename &optional period)
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
2229 "Return FILENAME's final \"extension\".
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
2230 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
2231 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
2232 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
2233
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
2234 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
2235 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
2236 the value is \"\"."
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
2237 (save-match-data
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
2238 (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
2239 (if (string-match "\\.[^.]*\\'" file)
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
2240 (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
2241 (if period
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
2242 "")))))
e735290b9ebb (hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents: 16414
diff changeset
2243
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2244 (defcustom make-backup-file-name-function nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2245 "A function to use instead of the default `make-backup-file-name'.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2246 A value of nil gives the default `make-backup-file-name' behaviour.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2247
33703
af0f3f3533e8 (find-buffer-visiting): Compare all attributes before
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 33558
diff changeset
2248 This could be buffer-local to do something special for specific
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2249 files. If you define it, you may need to change `backup-file-name-p'
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2250 and `file-name-sans-versions' too.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2251
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2252 See also `backup-directory-alist'."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2253 :group 'backup
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2254 :type '(choice (const :tag "Default" nil)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2255 (function :tag "Your function")))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2256
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2257 (defcustom backup-directory-alist nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2258 "Alist of filename patterns and backup directory names.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2259 Each element looks like (REGEXP . DIRECTORY). Backups of files with
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2260 names matching REGEXP will be made in DIRECTORY. DIRECTORY may be
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2261 relative or absolute. If it is absolute, so that all matching files
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2262 are backed up into the same directory, the file names in this
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2263 directory will be the full name of the file backed up with all
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2264 directory separators changed to `!' to prevent clashes. This will not
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2265 work correctly if your filesystem truncates the resulting name.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2266
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2267 For the common case of all backups going into one directory, the alist
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2268 should contain a single element pairing \".\" with the appropriate
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2269 directory name.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2270
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2271 If this variable is nil, or it fails to match a filename, the backup
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2272 is made in the original file's directory.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2273
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2274 On MS-DOS filesystems without long names this variable is always
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2275 ignored."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2276 :group 'backup
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2277 :type '(repeat (cons (regexp :tag "Regexp macthing filename")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2278 (directory :tag "Backup directory name"))))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2279
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2280 (defun make-backup-file-name (file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2281 "Create the non-numeric backup file name for FILE.
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2282 Normally this will just be the file's name with `~' appended.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2283 Customization hooks are provided as follows.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2284
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2285 If the variable `make-backup-file-name-function' is non-nil, its value
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2286 should be a function which will be called with FILE as its argument;
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2287 the resulting name is used.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2288
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2289 Otherwise a match for FILE is sought in `backup-directory-alist'; see
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2290 the documentation of that variable. If the directory for the backup
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2291 doesn't exist, it is created."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2292 (if make-backup-file-name-function
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2293 (funcall make-backup-file-name-function file)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2294 (if (and (eq system-type 'ms-dos)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2295 (not (msdos-long-file-names)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2296 (let ((fn (file-name-nondirectory file)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2297 (concat (file-name-directory file)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2298 (or (and (string-match "\\`[^.]+\\'" fn)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2299 (concat (match-string 0 fn) ".~"))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2300 (and (string-match "\\`[^.]+\\.\\(..?\\)?" fn)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2301 (concat (match-string 0 fn) "~")))))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2302 (concat (make-backup-file-name-1 file) "~"))))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2303
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2304 (defun make-backup-file-name-1 (file)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2305 "Subroutine of `make-backup-file-name' and `find-backup-file-name'."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2306 (let ((alist backup-directory-alist)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2307 elt backup-directory dir-sep-string)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2308 (while alist
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2309 (setq elt (pop alist))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2310 (if (string-match (car elt) file)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2311 (setq backup-directory (cdr elt)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2312 alist nil)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2313 (if (null backup-directory)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2314 file
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2315 (unless (file-exists-p backup-directory)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2316 (condition-case nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2317 (make-directory backup-directory 'parents)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2318 (file-error file)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2319 (if (file-name-absolute-p backup-directory)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2320 (progn
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2321 (when (memq system-type '(windows-nt ms-dos))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2322 ;; Normalize DOSish file names: convert all slashes to
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2323 ;; directory-sep-char, downcase the drive letter, if any,
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2324 ;; and replace the leading "x:" with "/drive_x".
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2325 (or (file-name-absolute-p file)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2326 (setq file (expand-file-name file))) ; make defaults explicit
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2327 ;; Replace any invalid file-name characters (for the
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2328 ;; case of backing up remote files).
32783
9eb5cd921a28 (make-backup-file-name-1) [windowsnt, ms-dos]: Remove
Andrew Innes <andrewi@gnu.org>
parents: 32579
diff changeset
2329 (setq file (expand-file-name (convert-standard-filename file)))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2330 (setq dir-sep-string (char-to-string directory-sep-char))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2331 (if (eq (aref file 1) ?:)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2332 (setq file (concat dir-sep-string
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2333 "drive_"
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2334 (char-to-string (downcase (aref file 0)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2335 (if (eq (aref file 2) directory-sep-char)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2336 ""
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2337 dir-sep-string)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2338 (substring file 2)))))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2339 ;; Make the name unique by substituting directory
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2340 ;; separators. It may not really be worth bothering about
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2341 ;; doubling `!'s in the original name...
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2342 (expand-file-name
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2343 (subst-char-in-string
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2344 directory-sep-char ?!
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2345 (replace-regexp-in-string "!" "!!" file))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2346 backup-directory))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2347 (expand-file-name (file-name-nondirectory file)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2348 (file-name-as-directory
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2349 (expand-file-name backup-directory
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2350 (file-name-directory file))))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2351
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2352 (defun backup-file-name-p (file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2353 "Return non-nil if FILE is a backup file name (numeric or not).
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2354 This is a separate function so you can redefine it for customization.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2355 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
2356 (string-match "~\\'" file))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2357
17734
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2358 (defvar backup-extract-version-start)
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2359
890
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
2360 ;; This is used in various files.
24945
a51a012046c4 Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 24925
diff changeset
2361 ;; The usage of backup-extract-version-start is not very clean,
a51a012046c4 Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 24925
diff changeset
2362 ;; but I can't see a good alternative, so as of now I am leaving it alone.
890
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
2363 (defun backup-extract-version (fn)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2364 "Given the name of a numeric backup file, FN, return the backup number.
17734
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2365 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
2366 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
2367 (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
2368 (= (match-beginning 0) backup-extract-version-start))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2369 (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
2370 0))
bad1b9af86a1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 854
diff changeset
2371
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2372 ;; I believe there is no need to alter this behavior for VMS;
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2373 ;; since backup files are not made on VMS, it should not get called.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2374 (defun find-backup-file-name (fn)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2375 "Find a file name for a backup file FN, and suggestions for deletions.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2376 Value is a list whose car is the name for the backup file
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2377 and whose cdr is a list of old versions to consider deleting now.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2378 If the value is nil, don't make a backup.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2379 Uses `backup-directory-alist' in the same way as does
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2380 `make-backup-file-name'."
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2381 (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
2382 ;; 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
2383 (if handler
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2384 (funcall handler 'find-backup-file-name fn)
32253
e3c97d8f7a7e (find-backup-file-name) [ms-dos]: If support for long
Eli Zaretskii <eliz@gnu.org>
parents: 32240
diff changeset
2385 (if (or (eq version-control 'never)
e3c97d8f7a7e (find-backup-file-name) [ms-dos]: If support for long
Eli Zaretskii <eliz@gnu.org>
parents: 32240
diff changeset
2386 ;; We don't support numbered backups on plain MS-DOS
e3c97d8f7a7e (find-backup-file-name) [ms-dos]: If support for long
Eli Zaretskii <eliz@gnu.org>
parents: 32240
diff changeset
2387 ;; when long file names are unavailable.
e3c97d8f7a7e (find-backup-file-name) [ms-dos]: If support for long
Eli Zaretskii <eliz@gnu.org>
parents: 32240
diff changeset
2388 (and (eq system-type 'ms-dos)
e3c97d8f7a7e (find-backup-file-name) [ms-dos]: If support for long
Eli Zaretskii <eliz@gnu.org>
parents: 32240
diff changeset
2389 (not (msdos-long-file-names))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2390 (list (make-backup-file-name fn))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2391 (let* ((basic-name (make-backup-file-name-1 fn))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2392 (base-versions (concat (file-name-nondirectory basic-name)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2393 ".~"))
17734
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2394 (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
2395 (high-water-mark 0)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2396 (number-to-delete 0)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2397 possibilities deserve-versions-p versions)
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2398 (condition-case ()
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2399 (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
2400 base-versions
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2401 (file-name-directory basic-name))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2402 versions (sort (mapcar #'backup-extract-version
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2403 possibilities)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2404 #'<)
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2405 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
2406 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
2407 (> high-water-mark 0))
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2408 number-to-delete (- (length versions)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2409 kept-old-versions
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2410 kept-new-versions
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2411 -1))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2412 (file-error (setq possibilities nil)))
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2413 (if (not deserve-versions-p)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2414 (list (concat basic-name "~"))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2415 (cons (format "%s.~%d~" basic-name (1+ high-water-mark))
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2416 (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
2417 ;; 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
2418 ;; 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
2419 (>= (+ kept-new-versions kept-old-versions -1) 0))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2420 (mapcar (lambda (n)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2421 (format "%s.~%d~" basic-name n))
10408
c79720be7bd7 (find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents: 10338
diff changeset
2422 (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
2423 (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
2424 v))))))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2425
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2426 (defun file-nlinks (filename)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2427 "Return number of names file FILENAME has."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2428 (car (cdr (file-attributes filename))))
1229
d4324e885a41 (file-relative-name): New function.
Roland McGrath <roland@gnu.org>
parents: 1212
diff changeset
2429
d4324e885a41 (file-relative-name): New function.
Roland McGrath <roland@gnu.org>
parents: 1212
diff changeset
2430 (defun file-relative-name (filename &optional directory)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2431 "Convert FILENAME to be relative to DIRECTORY (default: `default-directory').
17379
3147024a8918 (file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents: 17256
diff changeset
2432 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
2433 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
2434 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
2435 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
2436 then it returns FILENAME."
16976
c7683cba14c7 (file-relative-name): Protect the match-data.
Erik Naggum <erik@naggum.no>
parents: 16971
diff changeset
2437 (save-match-data
17734
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2438 (let ((fname (expand-file-name filename)))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2439 (setq directory (file-name-as-directory
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2440 (expand-file-name (or directory default-directory))))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2441 ;; 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
2442 ;; 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
2443 (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
2444 (eq system-type 'windows-nt))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2445 (not (string-equal (substring fname 0 2)
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2446 (substring directory 0 2))))
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2447 filename
18466
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2448 (let ((ancestor ".")
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2449 (fname-dir (file-name-as-directory fname)))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2450 (while (and (not (string-match (concat "^" (regexp-quote directory)) fname-dir))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2451 (not (string-match (concat "^" (regexp-quote directory)) fname)))
17734
bd60d4318daf (backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 17731
diff changeset
2452 (setq directory (file-name-directory (substring directory 0 -1))
18466
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2453 ancestor (if (equal ancestor ".")
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2454 ".."
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2455 (concat "../" ancestor))))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2456 ;; Now ancestor is empty, or .., or ../.., etc.
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2457 (if (string-match (concat "^" (regexp-quote directory)) fname)
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2458 ;; We matched within FNAME's directory part.
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2459 ;; Add the rest of FNAME onto ANCESTOR.
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2460 (let ((rest (substring fname (match-end 0))))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2461 (if (and (equal ancestor ".")
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2462 (not (equal rest "")))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2463 ;; But don't bother with ANCESTOR if it would give us `./'.
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2464 rest
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2465 (concat (file-name-as-directory ancestor) rest)))
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2466 ;; We matched FNAME's directory equivalent.
535a18a6b623 (file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents: 18340
diff changeset
2467 ancestor))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2468
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2469 (defun save-buffer (&optional args)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2470 "Save current buffer in visited file if modified. Versions described below.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2471 By default, makes the previous version into a backup file
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2472 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
2473 With 1 \\[universal-argument], marks this version
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2474 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
2475 With 2 \\[universal-argument]'s,
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2476 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
2477 With 3 \\[universal-argument]'s, marks this version
881e5c4a01cb (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13749
diff changeset
2478 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
2479 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
2480
23396
24d9060befa8 (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23385
diff changeset
2481 With argument of 0, never make the previous version into a backup file.
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2482
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2483 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
2484 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
2485 Numeric backups (rather than FOO~) will be made if value of
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2486 `version-control' is not the atom `never' and either there are already
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2487 numeric versions of the file being backed up, or `version-control' is
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2488 non-nil.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2489 We don't want excessive versions piling up, so there are variables
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2490 `kept-old-versions', which tells Emacs how many oldest versions to keep,
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2491 and `kept-new-versions', which tells how many newest versions to keep.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2492 Defaults are 2 old versions and 2 new.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2493 `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
2494 If `delete-old-versions' is nil, system will query user
22738
d35510185a2d (find-file-noselect-1): Use kill-local-variable on
Richard M. Stallman <rms@gnu.org>
parents: 22582
diff changeset
2495 before trimming versions. Otherwise it does it silently.
d35510185a2d (find-file-noselect-1): Use kill-local-variable on
Richard M. Stallman <rms@gnu.org>
parents: 22582
diff changeset
2496
23396
24d9060befa8 (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23385
diff changeset
2497 If `vc-make-backup-files' is nil, which is the default,
24d9060befa8 (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23385
diff changeset
2498 no backup files are made for files managed by version control.
24d9060befa8 (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23385
diff changeset
2499 (This is because the version control system itself records previous versions.)
24d9060befa8 (save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23385
diff changeset
2500
22738
d35510185a2d (find-file-noselect-1): Use kill-local-variable on
Richard M. Stallman <rms@gnu.org>
parents: 22582
diff changeset
2501 See the subroutine `basic-save-buffer' for more information."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2502 (interactive "p")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2503 (let ((modp (buffer-modified-p))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2504 (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
2505 (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
2506 (memq args '(16 64)))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2507 (and modp (memq args '(16 64)) (setq buffer-backed-up nil))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2508 (if (and modp large) (message "Saving file %s..." (buffer-file-name)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2509 (basic-save-buffer)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2510 (and modp (memq args '(4 64)) (setq buffer-backed-up nil))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2511
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2512 (defun delete-auto-save-file-if-necessary (&optional force)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2513 "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
2514 Normally delete only if the file was written by this Emacs since
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2515 the last real save, but optional arg FORCE non-nil means delete anyway."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2516 (and buffer-auto-save-file-name delete-auto-save-files
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2517 (not (string= buffer-file-name buffer-auto-save-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2518 (or force (recent-auto-save-p))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2519 (progn
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2520 (condition-case ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2521 (delete-file buffer-auto-save-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2522 (file-error nil))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2523 (set-buffer-auto-saved))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2524
24061
c8311bcddab2 (auto-save-hook): Defvar this.
Karl Heuer <kwzh@gnu.org>
parents: 24046
diff changeset
2525 (defvar auto-save-hook nil
c8311bcddab2 (auto-save-hook): Defvar this.
Karl Heuer <kwzh@gnu.org>
parents: 24046
diff changeset
2526 "Normal hook run just before auto-saving.")
c8311bcddab2 (auto-save-hook): Defvar this.
Karl Heuer <kwzh@gnu.org>
parents: 24046
diff changeset
2527
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2528 (defcustom after-save-hook nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2529 "Normal hook that is run after a buffer is saved to its file."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2530 :options '(executable-make-buffer-file-executable-if-script-p)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2531 :type 'hook
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2532 :group 'files)
12963
337ba86981f5 (basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12930
diff changeset
2533
22026
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2534 (defvar save-buffer-coding-system nil
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2535 "If non-nil, use this coding system for saving the buffer.
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2536 More precisely, use this coding system in place of the
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2537 value of `buffer-file-coding-system', when saving the buffer.
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2538 Calling `write-region' for any purpose other than saving the buffer
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2539 will still use `buffer-file-coding-system'; this variable has no effect
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2540 in such cases.")
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2541
22807
ff685e4dce0b (basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22806
diff changeset
2542 (make-variable-buffer-local 'save-buffer-coding-system)
ff685e4dce0b (basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22806
diff changeset
2543 (put 'save-buffer-coding-system 'permanent-local t)
ff685e4dce0b (basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22806
diff changeset
2544
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2545 (defun basic-save-buffer ()
12963
337ba86981f5 (basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12930
diff changeset
2546 "Save the current buffer in its visited file, if it has been modified.
22738
d35510185a2d (find-file-noselect-1): Use kill-local-variable on
Richard M. Stallman <rms@gnu.org>
parents: 22582
diff changeset
2547 The hooks `write-contents-hooks', `local-write-file-hooks' and
d35510185a2d (find-file-noselect-1): Use kill-local-variable on
Richard M. Stallman <rms@gnu.org>
parents: 22582
diff changeset
2548 `write-file-hooks' get a chance to do the job of saving; if they do not,
d35510185a2d (find-file-noselect-1): Use kill-local-variable on
Richard M. Stallman <rms@gnu.org>
parents: 22582
diff changeset
2549 then the buffer is saved in the visited file file in the usual way.
d35510185a2d (find-file-noselect-1): Use kill-local-variable on
Richard M. Stallman <rms@gnu.org>
parents: 22582
diff changeset
2550 After saving the buffer, this function runs `after-save-hook'."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2551 (interactive)
21071
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2552 (save-current-buffer
10298
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2553 ;; 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
2554 (if (buffer-base-buffer)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2555 (set-buffer (buffer-base-buffer)))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2556 (if (buffer-modified-p)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2557 (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
2558 setmodes tempsetmodes)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2559 ;; 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
2560 (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
2561 (not (string= buffer-file-name
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2562 (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
2563 (let (buffer-new-name)
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2564 ;; 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
2565 (setq buffer-file-name
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2566 (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
2567 ;; 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
2568 (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
2569 (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
2570 (kill-buffer buf))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2571 (rename-buffer buffer-new-name)))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2572 ;; 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
2573 (or buffer-file-name
12895
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2574 (let ((filename
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2575 (expand-file-name
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2576 (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
2577 (and (file-exists-p filename)
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2578 (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
2579 filename))
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2580 (error "Canceled")))
4dbac3df0ec7 (basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents: 12852
diff changeset
2581 (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
2582 (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
2583 (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
2584 (yes-or-no-p
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2585 (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
2586 (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
2587 (error "Save not confirmed"))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2588 (save-restriction
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2589 (widen)
21071
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2590 (save-excursion
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2591 (and (> (point-max) 1)
33558
786f1533a10f (basic-save-buffer): Don't add a newline if
Gerd Moellmann <gerd@gnu.org>
parents: 33105
diff changeset
2592 (not find-file-literally)
21071
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2593 (/= (char-after (1- (point-max))) ?\n)
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2594 (not (and (eq selective-display t)
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2595 (= (char-after (1- (point-max))) ?\r)))
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2596 (or (eq require-final-newline t)
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2597 (and require-final-newline
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2598 (y-or-n-p
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2599 (format "Buffer %s does not end in newline. Add one? "
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2600 (buffer-name)))))
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2601 (save-excursion
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2602 (goto-char (point-max))
39d081df3643 (basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 21069
diff changeset
2603 (insert ?\n))))
32129
3cd2e815deaa (basic-save-buffer): Call vc-before-save before saving.
André Spiegel <spiegel@gnu.org>
parents: 32030
diff changeset
2604 ;; Support VC version backups.
3cd2e815deaa (basic-save-buffer): Call vc-before-save before saving.
André Spiegel <spiegel@gnu.org>
parents: 32030
diff changeset
2605 (vc-before-save)
10298
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2606 (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
2607 (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
2608 (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
2609 ;; 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
2610 ;; 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
2611 (setq setmodes (basic-save-buffer-1)))
20093
c8448efca727 (basic-save-buffer): Set buffer-file-coding-system to
Karl Heuer <kwzh@gnu.org>
parents: 20018
diff changeset
2612 ;; Now we have saved the current buffer. Let's make sure
c8448efca727 (basic-save-buffer): Set buffer-file-coding-system to
Karl Heuer <kwzh@gnu.org>
parents: 20018
diff changeset
2613 ;; that buffer-file-coding-system is fixed to what
c8448efca727 (basic-save-buffer): Set buffer-file-coding-system to
Karl Heuer <kwzh@gnu.org>
parents: 20018
diff changeset
2614 ;; actually used for saving by binding it locally.
22026
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2615 (if save-buffer-coding-system
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2616 (setq save-buffer-coding-system last-coding-system-used)
237140fdea76 (save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21773
diff changeset
2617 (setq buffer-file-coding-system last-coding-system-used))
13326
4e1b078121ad (set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 13289
diff changeset
2618 (setq buffer-file-number
4e1b078121ad (set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 13289
diff changeset
2619 (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
2620 (if setmodes
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2621 (condition-case ()
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2622 (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
2623 (error nil))))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2624 ;; 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
2625 ;; delete it now.
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2626 (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
2627 ;; Support VC `implicit' locking.
0fac64b0452e (basic-save-buffer): Call vc-after-save.
Richard M. Stallman <rms@gnu.org>
parents: 12929
diff changeset
2628 (vc-after-save)
10298
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2629 (run-hooks 'after-save-hook))
4b66ac3460df (auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents: 10236
diff changeset
2630 (message "(No changes need to be saved)"))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2631
6574
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2632 ;; 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
2633 ;; 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
2634 ;; 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
2635 ;; 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
2636 (defun basic-save-buffer-1 ()
22807
ff685e4dce0b (basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22806
diff changeset
2637 (if save-buffer-coding-system
ff685e4dce0b (basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22806
diff changeset
2638 (let ((coding-system-for-write save-buffer-coding-system))
ff685e4dce0b (basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22806
diff changeset
2639 (basic-save-buffer-2))
ff685e4dce0b (basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22806
diff changeset
2640 (basic-save-buffer-2)))
ff685e4dce0b (basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22806
diff changeset
2641
ff685e4dce0b (basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22806
diff changeset
2642 (defun basic-save-buffer-2 ()
ff685e4dce0b (basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22806
diff changeset
2643 (let (tempsetmodes setmodes)
6574
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2644 (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
2645 (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
2646 (if (not (file-directory-p dir))
18819
881a46c98ddf (set-auto-mode): If -*- line specifies a mode,
Richard M. Stallman <rms@gnu.org>
parents: 18676
diff changeset
2647 (if (file-exists-p dir)
881a46c98ddf (set-auto-mode): If -*- line specifies a mode,
Richard M. Stallman <rms@gnu.org>
parents: 18676
diff changeset
2648 (error "%s is not a directory" dir)
19145
68b212facca8 (basic-save-buffer-1): Add missing argument for error.
Richard M. Stallman <rms@gnu.org>
parents: 19122
diff changeset
2649 (error "%s: no such directory" buffer-file-name))
6574
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2650 (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
2651 (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
2652 (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
2653 (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
2654 (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
2655 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
2656 (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
2657 (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
2658 (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
2659 (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
2660 (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
2661 (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
2662 (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
2663 ;; 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
2664 ;; 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
2665 ;; 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
2666 (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
2667 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
2668 (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
2669 (setq i 0)
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2670 (setq nogood t)
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2671 ;; 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
2672 (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
2673 (setq tempname (format
15269
b6381b3a6c99 (make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents: 15056
diff changeset
2674 (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
2675 (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
2676 "%s#%d.tm#" ; MSDOS limits files to 8+3
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2677 (if (memq system-type '(vax-vms axp-vms))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2678 "%s$tmp$%d"
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2679 "%s#tmp#%d"))
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
2680 dir i))
8362
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2681 (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
2682 (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
2683 (unwind-protect
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2684 (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
2685 (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
2686 tempname nil realname
0b04a441c06d (basic-save-buffer-1): Pass new arg to write-region.
Richard M. Stallman <rms@gnu.org>
parents: 12850
diff changeset
2687 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
2688 (setq succeed t))
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2689 ;; 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
2690 ;; 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
2691 (or succeed
8937
065d01c10c78 (basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents: 8908
diff changeset
2692 (progn
065d01c10c78 (basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents: 8908
diff changeset
2693 (delete-file tempname)
065d01c10c78 (basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents: 8908
diff changeset
2694 (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
2695 ;; 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
2696 ;; 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
2697 ;; 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
2698 (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
2699 ;; 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
2700 ;; so rename it.
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2701 (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
2702 ;; 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
2703 ;; 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
2704 ;; 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
2705 ;; (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
2706 (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
2707 ;; 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
2708 (setq setmodes (file-modes buffer-file-name))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2709 (set-file-modes buffer-file-name (logior setmodes 128))))
8362
87e1b76bbd6b (set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents: 8251
diff changeset
2710 (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
2711 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
2712 setmodes))
f0e1ed0e82a7 (basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents: 6546
diff changeset
2713
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2714 (defun save-some-buffers (&optional arg pred)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2715 "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
2716 Optional argument (the prefix) non-nil means save all with no questions.
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2717 Optional second argument PRED determines which buffers are considered:
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2718 If PRED is nil, all the file-visiting buffers are considered.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2719 If PRED is t, then certain non-file buffers will also be considered.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2720 If PRED is a zero-argument function, it indicates for each buffer whether
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2721 to consider it or not when called with that buffer current."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2722 (interactive "P")
891
f7de428cb8bf *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 890
diff changeset
2723 (save-window-excursion
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2724 (let* ((queried nil)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2725 (files-done
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2726 (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
2727 (function
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2728 (lambda (buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2729 (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
2730 (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
2731 (or
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2732 (buffer-file-name buffer)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2733 (and pred
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2734 (progn
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2735 (set-buffer buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2736 (and buffer-offer-save (> (buffer-size) 0)))))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2737 (or (not (functionp pred))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2738 (with-current-buffer buffer (funcall pred)))
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2739 (if arg
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2740 t
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2741 (setq queried t)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2742 (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
2743 (format "Save file %s? "
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2744 (buffer-file-name buffer))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2745 (format "Save buffer %s? "
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2746 (buffer-name buffer)))))))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2747 (function
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2748 (lambda (buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2749 (set-buffer buffer)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2750 (save-buffer)))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2751 (buffer-list)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2752 '("buffer" "buffers" "save")
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2753 (list (list ?\C-r (lambda (buf)
18316
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2754 (view-buffer buf
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2755 (function
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2756 (lambda (ignore)
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2757 (exit-recursive-edit))))
13832
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2758 (recursive-edit)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2759 ;; 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
2760 nil)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2761 "display the current buffer"))))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2762 (abbrevs-done
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2763 (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
2764 (progn
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2765 (if (or arg
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2766 (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
2767 abbrev-file-name)))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2768 (write-abbrev-file nil))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2769 ;; 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
2770 (setq abbrevs-changed nil)
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2771 t))))
44e936e550ae (save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents: 13823
diff changeset
2772 (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
2773 (message "(No files need saving)")))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2774
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2775 (defun not-modified (&optional arg)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2776 "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
2777 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
2778
3499c4e1e82f (not-modified): Doc fix.
Roland McGrath <roland@gnu.org>
parents: 10412
diff changeset
2779 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
2780 prints a message in the minibuffer. Instead, use `set-buffer-modified-p'."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2781 (interactive "P")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2782 (message (if arg "Modification-flag set"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2783 "Modification-flag cleared"))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2784 (set-buffer-modified-p arg))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2785
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2786 (defun toggle-read-only (&optional arg)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2787 "Change whether this buffer is visiting its file read-only.
18316
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2788 With arg, set read-only iff arg is positive.
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2789 If visiting file read-only and `view-read-only' is non-nil, enter view mode."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2790 (interactive "P")
18316
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2791 (cond
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2792 ((and arg (if (> (prefix-numeric-value arg) 0) buffer-read-only
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2793 (not buffer-read-only))) ; If buffer-read-only is set correctly,
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2794 nil) ; do nothing.
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2795 ;; Toggle.
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2796 ((and buffer-read-only view-mode)
22338
746adedbb6ba (toggle-read-only): When exiting View mode, locally
Karl Heuer <kwzh@gnu.org>
parents: 22179
diff changeset
2797 (View-exit-and-edit)
746adedbb6ba (toggle-read-only): When exiting View mode, locally
Karl Heuer <kwzh@gnu.org>
parents: 22179
diff changeset
2798 (make-local-variable 'view-read-only)
746adedbb6ba (toggle-read-only): When exiting View mode, locally
Karl Heuer <kwzh@gnu.org>
parents: 22179
diff changeset
2799 (setq view-read-only t)) ; Must leave view mode.
18316
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2800 ((and (not buffer-read-only) view-read-only
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2801 (not (eq (get major-mode 'mode-class) 'special)))
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2802 (view-mode-enter))
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2803 (t (setq buffer-read-only (not buffer-read-only))
1058f8684eca (backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents: 18164
diff changeset
2804 (force-mode-line-update))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2805
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2806 (defun insert-file (filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2807 "Insert contents of file FILENAME into buffer after point.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2808 Set mark after the inserted text.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2809
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2810 This function is meant for the user to run interactively.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2811 Don't call it from programs! Use `insert-file-contents' instead.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2812 \(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
2813 (interactive "*fInsert file: ")
3835
e3a00a940cf4 (insert-file): Report error if file is directory.
Richard M. Stallman <rms@gnu.org>
parents: 3709
diff changeset
2814 (if (file-directory-p filename)
e3a00a940cf4 (insert-file): Report error if file is directory.
Richard M. Stallman <rms@gnu.org>
parents: 3709
diff changeset
2815 (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
2816 filename)))
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2817 (let ((tem (insert-file-contents filename)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2818 (push-mark (+ (point) (car (cdr tem))))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2819
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2820 (defun append-to-file (start end filename)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2821 "Append the contents of the region to the end of file FILENAME.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2822 When called from a function, expects three arguments,
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2823 START, END and FILENAME. START and END are buffer positions
19435
608acf74b95b (append-to-file): Doc-string fixed.
Kenichi Handa <handa@m17n.org>
parents: 19305
diff changeset
2824 saying what text to write."
17987
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2825 (interactive "r\nFAppend to file: ")
2d9818a04c36 (find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents: 17894
diff changeset
2826 (write-region start end filename t))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2827
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2828 (defun file-newest-backup (filename)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2829 "Return most recent backup file for FILENAME or nil if no backups exist."
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2830 ;; `make-backup-file-name' will get us the right directory for
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2831 ;; ordinary or numeric backups. It might create a directory for
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2832 ;; backups as a side-effect, according to `backup-directory-alist'.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2833 (let* ((filename (file-name-sans-versions
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2834 (make-backup-file-name filename)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2835 (file (file-name-nondirectory filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2836 (dir (file-name-directory filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2837 (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
2838 (newest nil)
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2839 tem)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2840 (while comp
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2841 (setq tem (pop comp))
14927
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2842 (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
2843 (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
2844 (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
2845 (if (or (null newest)
645493140921 (file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents: 14883
diff changeset
2846 (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
2847 (setq newest tem)))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2848 newest))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2849
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2850 (defun rename-uniquely ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2851 "Rename current buffer to a similar name not already taken.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2852 This function is useful for creating multiple shell process buffers
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2853 or multiple mail buffers, etc."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2854 (interactive)
11522
5177611e8e4d (rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents: 11463
diff changeset
2855 (save-match-data
20218
84d1bec9ac4b (rename-uniquely): Simplify.
Karl Heuer <kwzh@gnu.org>
parents: 20095
diff changeset
2856 (let ((base-name (buffer-name)))
84d1bec9ac4b (rename-uniquely): Simplify.
Karl Heuer <kwzh@gnu.org>
parents: 20095
diff changeset
2857 (and (string-match "<[0-9]+>\\'" base-name)
84d1bec9ac4b (rename-uniquely): Simplify.
Karl Heuer <kwzh@gnu.org>
parents: 20095
diff changeset
2858 (not (and buffer-file-name
84d1bec9ac4b (rename-uniquely): Simplify.
Karl Heuer <kwzh@gnu.org>
parents: 20095
diff changeset
2859 (string= base-name
84d1bec9ac4b (rename-uniquely): Simplify.
Karl Heuer <kwzh@gnu.org>
parents: 20095
diff changeset
2860 (file-name-nondirectory buffer-file-name))))
84d1bec9ac4b (rename-uniquely): Simplify.
Karl Heuer <kwzh@gnu.org>
parents: 20095
diff changeset
2861 ;; If the existing buffer name has a <NNN>,
84d1bec9ac4b (rename-uniquely): Simplify.
Karl Heuer <kwzh@gnu.org>
parents: 20095
diff changeset
2862 ;; which isn't part of the file name (if any),
84d1bec9ac4b (rename-uniquely): Simplify.
Karl Heuer <kwzh@gnu.org>
parents: 20095
diff changeset
2863 ;; then get rid of that.
84d1bec9ac4b (rename-uniquely): Simplify.
Karl Heuer <kwzh@gnu.org>
parents: 20095
diff changeset
2864 (setq base-name (substring base-name 0 (match-beginning 0))))
84d1bec9ac4b (rename-uniquely): Simplify.
Karl Heuer <kwzh@gnu.org>
parents: 20095
diff changeset
2865 (rename-buffer (generate-new-buffer-name base-name))
11563
63215d2a1e3f (toggle-read-only, rename-uniquely): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 11553
diff changeset
2866 (force-mode-line-update))))
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
2867
1537
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2868 (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
2869 "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
2870 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
2871 is the current default directory for file names.
13980
ad74bc8e877f (make-directory): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13903
diff changeset
2872 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
2873
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2874 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
2875 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
2876 (interactive
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2877 (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
2878 nil nil)
3eaec128c91e (make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents: 3670
diff changeset
2879 t))
7030
9e51b51e8595 Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents: 6899
diff changeset
2880 (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
2881 (if handler
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2882 (funcall handler 'make-directory dir parents)
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2883 (if (not parents)
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2884 (make-directory-internal dir)
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2885 (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
2886 create-list)
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2887 (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
2888 (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
2889 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
2890 (while create-list
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2891 (make-directory-internal (car create-list))
8531c6d96e5c (make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents: 1471
diff changeset
2892 (setq create-list (cdr create-list))))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2893
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2894 (put 'revert-buffer-function 'permanent-local t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2895 (defvar revert-buffer-function nil
8160
1013d56a1133 (revert-buffer-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8158
diff changeset
2896 "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
2897 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
2898 which are the arguments that `revert-buffer' received.")
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2899
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2900 (put 'revert-buffer-insert-file-contents-function 'permanent-local t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2901 (defvar revert-buffer-insert-file-contents-function nil
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2902 "Function to use to insert contents when reverting this buffer.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2903 Gets two args, first the nominal file name to use,
24925
5169ebe70135 (revert-buffer): Don't preserve point here.
Richard M. Stallman <rms@gnu.org>
parents: 24874
diff changeset
2904 and second, t if reading the auto-save file.
5169ebe70135 (revert-buffer): Don't preserve point here.
Richard M. Stallman <rms@gnu.org>
parents: 24874
diff changeset
2905
5169ebe70135 (revert-buffer): Don't preserve point here.
Richard M. Stallman <rms@gnu.org>
parents: 24874
diff changeset
2906 The function you specify is responsible for updating (or preserving) point.")
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2907
11995
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2908 (defvar before-revert-hook nil
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2909 "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
2910 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
2911 mechanism, this hook is not used.")
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2912
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2913 (defvar after-revert-hook nil
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2914 "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
2915 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
2916 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
2917 hook functions.
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2918
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2919 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
2920 mechanism, this hook is not used.")
ea774a7c610c (after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents: 11982
diff changeset
2921
23500
8f220d8d170d (auto-mode-alist): Recognize .rpm files.
Richard M. Stallman <rms@gnu.org>
parents: 23473
diff changeset
2922 (defvar revert-buffer-internal-hook)
8f220d8d170d (auto-mode-alist): Recognize .rpm files.
Richard M. Stallman <rms@gnu.org>
parents: 23473
diff changeset
2923
13857
aa5e493a867d (revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents: 13832
diff changeset
2924 (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
2925 "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
2926 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
2927 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
2928 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
2929
16544
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
2930 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
2931 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
2932 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
2933 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
2934
10942
3f77513d0a77 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 10901
diff changeset
2935 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
2936 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
2937 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
2938 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
2939 to nil.
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2940
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2941 Optional second argument NOCONFIRM means don't ask for confirmation at
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
2942 all. (The local variable `revert-without-query', if non-nil, prevents
23606
57e437a51073 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 23500
diff changeset
2943 confirmation.)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2944
15890
c2ef756791fe (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 15753
diff changeset
2945 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
2946 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
2947
605
5f36058e31f9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 566
diff changeset
2948 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
2949 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
2950 `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
2951 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
2952 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
2953
1905
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2954 ;; 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
2955 ;; 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
2956 ;; 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
2957 ;; 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
2958 ;; 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
2959 ;; 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
2960 (interactive (list (not current-prefix-arg)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2961 (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
2962 (funcall revert-buffer-function ignore-auto noconfirm)
24925
5169ebe70135 (revert-buffer): Don't preserve point here.
Richard M. Stallman <rms@gnu.org>
parents: 24874
diff changeset
2963 (let* ((auto-save-p (and (not ignore-auto)
1905
494dd05d460c * files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents: 1892
diff changeset
2964 (recent-auto-save-p)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2965 buffer-auto-save-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2966 (file-readable-p buffer-auto-save-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2967 (y-or-n-p
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2968 "Buffer has been auto-saved recently. Revert from auto-save file? ")))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2969 (file-name (if auto-save-p
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2970 buffer-auto-save-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2971 buffer-file-name)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2972 (cond ((null file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2973 (error "Buffer does not seem to be associated with any file"))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2974 ((or noconfirm
17894
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2975 (and (not (buffer-modified-p))
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2976 (let ((tail revert-without-query)
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2977 (found nil))
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2978 (while tail
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2979 (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
2980 (setq found t))
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2981 (setq tail (cdr tail)))
488536bc29c2 (path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17734
diff changeset
2982 found))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2983 (yes-or-no-p (format "Revert buffer from file %s? "
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2984 file-name)))
5716
82588f97d478 (revert-buffer): reposition after-revert-hook, and add before-revert-hook.
Karl Heuer <kwzh@gnu.org>
parents: 5624
diff changeset
2985 (run-hooks 'before-revert-hook)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2986 ;; If file was backed up but has changed since,
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2987 ;; we shd make another backup.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2988 (and (not auto-save-p)
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
2989 (not (verify-visited-file-modtime (current-buffer)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2990 (setq buffer-backed-up nil))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2991 ;; Get rid of all undo records for this buffer.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2992 (or (eq buffer-undo-list t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
2993 (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
2994 ;; 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
2995 ;; 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
2996 (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
2997 (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
2998 (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
2999 after-revert-hook)))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3000 (let (buffer-read-only
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3001 ;; 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
3002 (buffer-undo-list t))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3003 (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
3004 (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
3005 file-name auto-save-p)
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3006 (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
3007 (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
3008 ;; 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
3009 ;; 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
3010 (let ((buffer-file-name nil))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3011 (or auto-save-p
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3012 (unlock-buffer)))
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3013 (widen)
19552
c8a5bd70b9cd (revert-buffer): Read a file without any code
Kenichi Handa <handa@m17n.org>
parents: 19435
diff changeset
3014 (let ((coding-system-for-read
c8a5bd70b9cd (revert-buffer): Read a file without any code
Kenichi Handa <handa@m17n.org>
parents: 19435
diff changeset
3015 ;; Auto-saved file shoule be read without
c8a5bd70b9cd (revert-buffer): Read a file without any code
Kenichi Handa <handa@m17n.org>
parents: 19435
diff changeset
3016 ;; any code conversion.
34085
da2a5d1550b7 (revert-buffer, recover-file): Bind
Eli Zaretskii <eliz@gnu.org>
parents: 34009
diff changeset
3017 (if auto-save-p 'emacs-mule-unix
19552
c8a5bd70b9cd (revert-buffer): Read a file without any code
Kenichi Handa <handa@m17n.org>
parents: 19435
diff changeset
3018 coding-system-for-read)))
24925
5169ebe70135 (revert-buffer): Don't preserve point here.
Richard M. Stallman <rms@gnu.org>
parents: 24874
diff changeset
3019 ;; Note that this preserves point in an intelligent way.
19552
c8a5bd70b9cd (revert-buffer): Read a file without any code
Kenichi Handa <handa@m17n.org>
parents: 19435
diff changeset
3020 (insert-file-contents file-name (not auto-save-p)
c8a5bd70b9cd (revert-buffer): Read a file without any code
Kenichi Handa <handa@m17n.org>
parents: 19435
diff changeset
3021 nil nil t))))
11982
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3022 ;; 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
3023 ;; have changed the truename.
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3024 (setq buffer-file-truename
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3025 (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
3026 (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
3027 ;; 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
3028 (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
3029 (if local-hook-p
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3030 (progn
a88f862b3927 (revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents: 11981
diff changeset
3031 (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
3032 (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
3033 (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
3034 (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
3035 t)))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3036
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3037 (defun recover-file (file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3038 "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
3039 ;; 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
3040 ;; only rarely.
5b86ce0cddb5 (recover-file): Use ordinary `f' to read file name.
Richard M. Stallman <rms@gnu.org>
parents: 10430
diff changeset
3041 ;; 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
3042 (interactive "FRecover file: ")
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3043 (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
3044 (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
3045 (error "%s is an auto-save file" file))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3046 (let ((file-name (let ((buffer-file-name file))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3047 (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
3048 (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
3049 (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
3050 (not (file-exists-p file-name)))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3051 (error "Auto-save file %s not current" file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3052 ((save-window-excursion
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3053 (with-output-to-temp-buffer "*Directory*"
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3054 (buffer-disable-undo standard-output)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3055 (save-excursion
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3056 (let ((switches dired-listing-switches))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3057 (if (file-symlink-p file)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3058 (setq switches (concat switches "L")))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3059 (set-buffer standard-output)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3060 (insert-directory file switches)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3061 (insert-directory file-name switches))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3062 (yes-or-no-p (format "Recover auto save file %s? " file-name)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3063 (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
3064 (let ((buffer-read-only nil)
24764
ece1961bd955 (recover-file): Recover buffer-file-coding-system.
Kenichi Handa <handa@m17n.org>
parents: 24727
diff changeset
3065 ;; Keep the current buffer-file-coding-system.
ece1961bd955 (recover-file): Recover buffer-file-coding-system.
Kenichi Handa <handa@m17n.org>
parents: 24727
diff changeset
3066 (coding-system buffer-file-coding-system)
17004
cd1d930a2c98 (find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents: 16976
diff changeset
3067 ;; Auto-saved file shoule be read without any code conversion.
34085
da2a5d1550b7 (revert-buffer, recover-file): Bind
Eli Zaretskii <eliz@gnu.org>
parents: 34009
diff changeset
3068 (coding-system-for-read 'emacs-mule-unix))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3069 (erase-buffer)
24764
ece1961bd955 (recover-file): Recover buffer-file-coding-system.
Kenichi Handa <handa@m17n.org>
parents: 24727
diff changeset
3070 (insert-file-contents file-name nil)
ece1961bd955 (recover-file): Recover buffer-file-coding-system.
Kenichi Handa <handa@m17n.org>
parents: 24727
diff changeset
3071 (set-buffer-file-coding-system coding-system))
1212
de70f50101c0 (after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents: 1182
diff changeset
3072 (after-find-file nil nil t))
17525
a92a4702711a (recover-file): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 17421
diff changeset
3073 (t (error "Recover-file cancelled")))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3074
11739
a9614b779859 (recover-session): Renamed from multiple-recover.
Richard M. Stallman <rms@gnu.org>
parents: 11636
diff changeset
3075 (defun recover-session ()
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3076 "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
3077 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
3078 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
3079 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
3080 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
3081 (interactive)
16372
e311d5372d8c (recover-session): Error if session files turned off.
Richard M. Stallman <rms@gnu.org>
parents: 16334
diff changeset
3082 (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
3083 (error "You set `auto-save-list-file-prefix' to disable making session files"))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3084 (let ((dir (file-name-directory auto-save-list-file-prefix)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3085 (unless (file-directory-p dir)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3086 (make-directory dir t)))
13879
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3087 (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
3088 (dired (concat auto-save-list-file-prefix "*")
67515c200d09 (recover-session): Add `t' to switches.
Richard M. Stallman <rms@gnu.org>
parents: 17004
diff changeset
3089 (concat dired-listing-switches "t")))
23989
38295026616a (recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents: 23983
diff changeset
3090 (save-excursion
38295026616a (recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents: 23983
diff changeset
3091 (goto-char (point-min))
38295026616a (recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents: 23983
diff changeset
3092 (or (looking-at " Move to the session you want to recover,")
38295026616a (recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents: 23983
diff changeset
3093 (let ((inhibit-read-only t))
38295026616a (recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents: 23983
diff changeset
3094 ;; Each line starts with a space
38295026616a (recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents: 23983
diff changeset
3095 ;; so that Font Lock mode won't highlight the first character.
38295026616a (recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents: 23983
diff changeset
3096 (insert " Move to the session you want to recover,\n"
38295026616a (recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents: 23983
diff changeset
3097 " then type C-c C-c to select it.\n\n"
38295026616a (recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents: 23983
diff changeset
3098 " You can also delete some of these files;\n"
38295026616a (recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents: 23983
diff changeset
3099 " 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
3100 (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
3101 (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
3102
12050
b740095d6a47 (multiple-recover-finish): Renamed to recover-session-finish.
Roland McGrath <roland@gnu.org>
parents: 11995
diff changeset
3103 (defun recover-session-finish ()
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3104 "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
3105 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
3106 \\[recover-session]."
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3107 (interactive)
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3108 ;; 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
3109 (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
3110 files
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3111 (buffer (get-buffer-create " *recover*")))
22084
08f31e440c92 (system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22026
diff changeset
3112 (dired-unmark 1)
12740
8b44b70e655d (recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents: 12719
diff changeset
3113 (dired-do-flagged-delete t)
11630
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3114 (unwind-protect
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3115 (save-excursion
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3116 ;; 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
3117 (set-buffer buffer)
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3118 (erase-buffer)
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3119 (insert-file-contents file)
13115
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3120 ;; 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
3121 ;; 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
3122 (while (not (eobp))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3123 (let (thisfile autofile)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3124 (if (eolp)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3125 ;; 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
3126 ;; 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
3127 ;; 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
3128 (progn
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3129 (forward-line 1)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3130 (setq autofile
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3131 (buffer-substring-no-properties
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3132 (point)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3133 (save-excursion
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3134 (end-of-line)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3135 (point))))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3136 (setq thisfile
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3137 (expand-file-name
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3138 (substring
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3139 (file-name-nondirectory autofile)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3140 1 -1)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3141 (file-name-directory autofile)))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3142 (forward-line 1))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3143 ;; 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
3144 ;; 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
3145 (progn
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3146 (setq thisfile
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3147 (buffer-substring-no-properties
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3148 (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
3149 (forward-line 1)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3150 (setq autofile
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3151 (buffer-substring-no-properties
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3152 (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
3153 (forward-line 1)))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3154 ;; 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
3155 (if (file-exists-p autofile)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3156 (setq files (cons thisfile files)))))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3157 (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
3158 ;; 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
3159 ;; 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
3160 ;; 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
3161 ;; 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
3162 (if files
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3163 (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
3164 (lambda (file)
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3165 (condition-case nil
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3166 (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
3167 (error
13115
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3168 "Failed to recover `%s'" file)))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3169 files
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3170 '("file" "files" "recover"))
b4601a8c1e5c (recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents: 13095
diff changeset
3171 (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
3172 (kill-buffer buffer))))
d18ae33bb3b6 (multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents: 11563
diff changeset
3173
15963
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
3174 (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
3175 "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
3176 LIST defaults to all existing live buffers."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3177 (interactive)
15963
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
3178 (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
3179 (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
3180 (while list
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
3181 (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
3182 (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
3183 (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
3184 (/= (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
3185 (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
3186 (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
3187 name
5b10dc4cd791 (kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents: 15890
diff changeset
3188 (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
3189 "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
3190 (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
3191 (setq list (cdr list))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3192
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3193 (defun auto-save-mode (arg)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3194 "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
3195 With prefix argument ARG, turn auto-saving on if positive, else off."
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3196 (interactive "P")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3197 (setq buffer-auto-save-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3198 (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
3199 (or (not buffer-auto-save-file-name)
23382
55b2ea28932a Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 23126
diff changeset
3200 ;; If auto-save is off because buffer has shrunk,
8158
a6fa25ffa764 (auto-save-mode): If autosave is off because buffer has
Richard M. Stallman <rms@gnu.org>
parents: 8157
diff changeset
3201 ;; 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
3202 (< buffer-saved-size 0))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3203 (or (eq arg t) (listp arg) (and (integerp arg) (> arg 0))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3204 (if (and buffer-file-name auto-save-visited-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3205 (not buffer-read-only))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3206 buffer-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3207 (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
3208 ;; 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
3209 ;; 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
3210 (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
3211 (setq buffer-saved-size 0))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3212 (if (interactive-p)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3213 (message "Auto-save %s (in this buffer)"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3214 (if buffer-auto-save-file-name "on" "off")))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3215 buffer-auto-save-file-name)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3216
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3217 (defun rename-auto-save-file ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3218 "Adjust current buffer's auto save file name for current conditions.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3219 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
3220 (let ((osave buffer-auto-save-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3221 (setq buffer-auto-save-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3222 (make-auto-save-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3223 (if (and osave buffer-auto-save-file-name
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3224 (not (string= buffer-auto-save-file-name buffer-file-name))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3225 (not (string= buffer-auto-save-file-name osave))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3226 (file-exists-p osave)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3227 (recent-auto-save-p))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3228 (rename-file osave buffer-auto-save-file-name t))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3229
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3230 (defun make-auto-save-file-name ()
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3231 "Return file name to use for auto-saves of current buffer.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3232 Does not consider `auto-save-visited-file-name' as that variable is checked
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3233 before calling this function. You can redefine this for customization.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3234 See also `auto-save-file-name-p'."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3235 (if buffer-file-name
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3236 (let ((list auto-save-file-name-transforms)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3237 (filename buffer-file-name)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3238 result)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3239 ;; Apply user-specified translations
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3240 ;; to the file name.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3241 (while (and list (not result))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3242 (if (string-match (car (car list)) filename)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3243 (setq result (replace-match (cadr (car list)) t nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3244 filename)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3245 (setq list (cdr list)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3246 (if result (setq filename result))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3247
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3248 (if (and (eq system-type 'ms-dos)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3249 (not (msdos-long-file-names)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3250 (let ((fn (file-name-nondirectory buffer-file-name)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3251 (string-match "\\`\\([^.]+\\)\\(\\.\\(..?\\)?.?\\|\\)\\'" fn)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3252 (concat (file-name-directory buffer-file-name)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3253 "#" (match-string 1 fn)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3254 "." (match-string 3 fn) "#"))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3255 (concat (file-name-directory filename)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3256 "#"
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3257 (file-name-nondirectory filename)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3258 "#")))
7944
a114bbe9a63c (make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents: 7895
diff changeset
3259
a114bbe9a63c (make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents: 7895
diff changeset
3260 ;; 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
3261 ;; 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
3262
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
3263 (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
3264 (limit 0))
17256
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
3265 ;; 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
3266 ;; 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
3267 ;; 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
3268 (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
3269 (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
3270 (replacement
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
3271 (cond ((eq character ?%) "%%")
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
3272 ((eq character ?/) "%+")
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
3273 ((eq character ?\\) "%-"))))
d8e38cfca028 (make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents: 17208
diff changeset
3274 (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
3275 (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
3276 ;; Generate the file name.
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
3277 (expand-file-name
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
3278 (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
3279 ;; 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
3280 (cond
f51aa92862ac (make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents: 15963
diff changeset
3281 ((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
3282 ((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
3283 ("~/"))))))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3284
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3285 (defun auto-save-file-name-p (filename)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3286 "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
3287 FILENAME should lack slashes. You can redefine this for customization."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3288 (string-match "^#.*#$" filename))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3289
13879
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3290 (defun wildcard-to-regexp (wildcard)
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3291 "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
3292 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
3293 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
3294 by `sh' are supported."
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3295 (let* ((i (string-match "[[.*+\\^$?]" wildcard))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3296 ;; Copy the initial run of non-special characters.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3297 (result (substring wildcard 0 i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3298 (len (length wildcard)))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3299 ;; If no special characters, we're almost done.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3300 (if i
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3301 (while (< i len)
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3302 (let ((ch (aref wildcard i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3303 j)
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3304 (setq
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3305 result
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3306 (concat result
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3307 (cond
16544
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
3308 ((and (eq ch ?\[)
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
3309 (< (1+ i) len)
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
3310 (eq (aref wildcard (1+ i)) ?\]))
9fffc9e5fc42 (revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16477
diff changeset
3311 "\\[")
13879
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3312 ((eq ch ?\[) ; [...] maps to regexp char class
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3313 (progn
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3314 (setq i (1+ i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3315 (concat
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3316 (cond
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3317 ((eq (aref wildcard i) ?!) ; [!...] -> [^...]
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3318 (progn
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3319 (setq i (1+ i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3320 (if (eq (aref wildcard i) ?\])
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3321 (progn
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3322 (setq i (1+ i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3323 "[^]")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3324 "[^")))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3325 ((eq (aref wildcard i) ?^)
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3326 ;; Found "[^". Insert a `\0' character
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3327 ;; (which cannot happen in a filename)
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3328 ;; into the character class, so that `^'
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3329 ;; is not the first character after `[',
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3330 ;; and thus non-special in a regexp.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3331 (progn
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3332 (setq i (1+ i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3333 "[\000^"))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3334 ((eq (aref wildcard i) ?\])
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3335 ;; I don't think `]' can appear in a
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3336 ;; character class in a wildcard, but
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3337 ;; let's be general here.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3338 (progn
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3339 (setq i (1+ i))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3340 "[]"))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3341 (t "["))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3342 (prog1 ; copy everything upto next `]'.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3343 (substring wildcard
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3344 i
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3345 (setq j (string-match
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3346 "]" wildcard i)))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3347 (setq i (if j (1- j) (1- len)))))))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3348 ((eq ch ?.) "\\.")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3349 ((eq ch ?*) "[^\000]*")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3350 ((eq ch ?+) "\\+")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3351 ((eq ch ?^) "\\^")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3352 ((eq ch ?$) "\\$")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3353 ((eq ch ?\\) "\\\\") ; probably cannot happen...
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3354 ((eq ch ??) "[^\000]")
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3355 (t (char-to-string ch)))))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3356 (setq i (1+ i)))))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3357 ;; Shell wildcards should match the entire filename,
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3358 ;; not its part. Make the regexp say so.
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3359 (concat "\\`" result "\\'")))
4888716715e0 (wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13857
diff changeset
3360
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
3361 (defcustom list-directory-brief-switches
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3362 (if (eq system-type 'vax-vms) "" "-CF")
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3363 "*Switches for `list-directory' to pass to `ls' for brief listing."
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
3364 :type 'string
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
3365 :group 'dired)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3366
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
3367 (defcustom list-directory-verbose-switches
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3368 (if (eq system-type 'vax-vms)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3369 "/PROTECTION/SIZE/DATE/OWNER/WIDTH=(OWNER:10)"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3370 "-l")
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3371 "*Switches for `list-directory' to pass to `ls' for verbose listing."
17673
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
3372 :type 'string
ba2c70d76b5b Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17666
diff changeset
3373 :group 'dired)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3374
23473
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
3375 (defun file-expand-wildcards (pattern &optional full)
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
3376 "Expand wildcard pattern PATTERN.
23942
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3377 This returns a list of file names which match the pattern.
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3378
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3379 If PATTERN is written as an absolute relative file name,
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3380 the values are absolute also.
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3381
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3382 If PATTERN is written as a relative file name, it is interpreted
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3383 relative to the current default directory, `default-directory'.
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3384 The file names returned are normally also relative to the current
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3385 default directory. However, if FULL is non-nil, they are absolute."
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3386 (let* ((nondir (file-name-nondirectory pattern))
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3387 (dirpart (file-name-directory pattern))
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3388 ;; A list of all dirs that DIRPART specifies.
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3389 ;; This can be more than one dir
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3390 ;; if DIRPART contains wildcards.
24217
37a08636670b (file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents: 24167
diff changeset
3391 (dirs (if (and dirpart (string-match "[[*?]" dirpart))
23942
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3392 (mapcar 'file-name-as-directory
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3393 (file-expand-wildcards (directory-file-name dirpart)))
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3394 (list dirpart)))
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3395 contents)
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3396 (while dirs
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3397 (when (or (null (car dirs)) ; Possible if DIRPART is not wild.
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3398 (file-directory-p (directory-file-name (car dirs))))
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3399 (let ((this-dir-contents
24217
37a08636670b (file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents: 24167
diff changeset
3400 ;; Filter out "." and ".."
37a08636670b (file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents: 24167
diff changeset
3401 (delq nil
37a08636670b (file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents: 24167
diff changeset
3402 (mapcar #'(lambda (name)
37a08636670b (file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents: 24167
diff changeset
3403 (unless (string-match "\\`\\.\\.?\\'"
37a08636670b (file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents: 24167
diff changeset
3404 (file-name-nondirectory name))
37a08636670b (file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents: 24167
diff changeset
3405 name))
37a08636670b (file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents: 24167
diff changeset
3406 (directory-files (or (car dirs) ".") full
37a08636670b (file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents: 24167
diff changeset
3407 (wildcard-to-regexp nondir))))))
23942
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3408 (setq contents
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3409 (nconc
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3410 (if (and (car dirs) (not full))
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3411 (mapcar (function (lambda (name) (concat (car dirs) name)))
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3412 this-dir-contents)
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3413 this-dir-contents)
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3414 contents))))
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3415 (setq dirs (cdr dirs)))
8fa87eee9ae5 (file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents: 23842
diff changeset
3416 contents))
23473
4c242b09e413 (find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents: 23396
diff changeset
3417
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3418 (defun list-directory (dirname &optional verbose)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3419 "Display a list of files in or matching DIRNAME, a la `ls'.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3420 DIRNAME is globbed by the shell if necessary.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3421 Prefix arg (second arg if noninteractive) means supply -l switch to `ls'.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3422 Actions controlled by variables `list-directory-brief-switches'
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3423 and `list-directory-verbose-switches'."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3424 (interactive (let ((pfx current-prefix-arg))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3425 (list (read-file-name (if pfx "List directory (verbose): "
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3426 "List directory (brief): ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3427 nil default-directory nil)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3428 pfx)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3429 (let ((switches (if verbose list-directory-verbose-switches
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3430 list-directory-brief-switches)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3431 (or dirname (setq dirname default-directory))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3432 (setq dirname (expand-file-name dirname))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3433 (with-output-to-temp-buffer "*Directory*"
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3434 (buffer-disable-undo standard-output)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3435 (princ "Directory ")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3436 (princ dirname)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3437 (terpri)
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3438 (save-excursion
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3439 (set-buffer "*Directory*")
14401
83e1b1f5ce8f (list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents: 14287
diff changeset
3440 (setq default-directory
83e1b1f5ce8f (list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents: 14287
diff changeset
3441 (if (file-directory-p dirname)
83e1b1f5ce8f (list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents: 14287
diff changeset
3442 (file-name-as-directory dirname)
83e1b1f5ce8f (list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents: 14287
diff changeset
3443 (file-name-directory dirname)))
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3444 (let ((wildcard (not (file-directory-p dirname))))
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3445 (insert-directory dirname switches wildcard (not wildcard)))))))
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3446
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3447 (defun shell-quote-wildcard-pattern (pattern)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3448 "Quote characters special to the shell in PATTERN, leave wildcards alone.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3449
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3450 PATTERN is assumed to represent a file-name wildcard suitable for the
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3451 underlying filesystem. For Unix and GNU/Linux, the characters from the
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3452 set [ \\t\\n;<>&|()#$] are quoted with a backslash; for DOS/Windows, all
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3453 the parts of the pattern which don't include wildcard characters are
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3454 quoted with double quotes.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3455 Existing quote characters in PATTERN are left alone, so you can pass
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3456 PATTERN that already quotes some of the special characters."
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3457 (save-match-data
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3458 (cond
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3459 ((memq system-type '(ms-dos windows-nt))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3460 ;; DOS/Windows don't allow `"' in file names. So if the
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3461 ;; argument has quotes, we can safely assume it is already
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3462 ;; quoted by the caller.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3463 (if (or (string-match "[\"]" pattern)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3464 ;; We quote [&()#$'] in case their shell is a port of a
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3465 ;; Unixy shell. We quote [,=+] because stock DOS and
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3466 ;; Windows shells require that in some cases, such as
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3467 ;; passing arguments to batch files that use positional
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3468 ;; arguments like %1.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3469 (not (string-match "[ \t;&()#$',=+]" pattern)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3470 pattern
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3471 (let ((result "\"")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3472 (beg 0)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3473 end)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3474 (while (string-match "[*?]+" pattern beg)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3475 (setq end (match-beginning 0)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3476 result (concat result (substring pattern beg end)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3477 "\""
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3478 (substring pattern end (match-end 0))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3479 "\"")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3480 beg (match-end 0)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3481 (concat result (substring pattern beg) "\""))))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3482 (t
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3483 (let ((beg 0))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3484 (while (string-match "[ \t\n;<>&|()#$]" pattern beg)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3485 (setq pattern
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3486 (concat (substring pattern 0 (match-beginning 0))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3487 "\\"
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3488 (substring pattern (match-beginning 0)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3489 beg (1+ (match-end 0)))))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3490 pattern))))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3491
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3492
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3493 (defvar insert-directory-program "ls"
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3494 "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
3495
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3496 ;; insert-directory
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3497 ;; - must insert _exactly_one_line_ describing FILE if WILDCARD and
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3498 ;; FULL-DIRECTORY-P is nil.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3499 ;; 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
3500 ;; given, namely, an absolute path name.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3501 ;; - 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
3502 ;; FULL-DIRECTORY-P is t, plus one optional "total" line
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3503 ;; 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
3504 ;; 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
3505 ;; allowed.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3506 ;; File lines should display the basename.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3507 ;; - must be consistent with
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3508 ;; - 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
3509 ;; dired-move-to-end-of-filename,
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3510 ;; dired-between-files, (shortcut for (not (dired-move-to-filename)))
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3511 ;; dired-insert-headerline
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3512 ;; dired-after-subdir-garbage (defines what a "total" line is)
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3513 ;; - variable dired-subdir-regexp
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3514 (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
3515 "Insert directory listing for FILE, formatted according to SWITCHES.
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3516 Leaves point after the inserted text.
8207
96e6518c209b (insert-directory): Allow list for SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 8181
diff changeset
3517 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
3518 Optional third arg WILDCARD means treat FILE as shell wildcard.
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3519 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
3520 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
3521
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3522 This works by running a directory listing program
1892
c4ff65277bb3 (insert-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 1879
diff changeset
3523 whose name is in the variable `insert-directory-program'.
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3524 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
3525 ;; We need the directory in order to find the right handler.
30907
46752ce55a92 (insert-directory): Don't lose original file name,
Andreas Schwab <schwab@suse.de>
parents: 30733
diff changeset
3526 (let ((handler (find-file-name-handler (expand-file-name file)
46752ce55a92 (insert-directory): Don't lose original file name,
Andreas Schwab <schwab@suse.de>
parents: 30733
diff changeset
3527 'insert-directory)))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3528 (if handler
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3529 (funcall handler 'insert-directory file switches
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3530 wildcard full-directory-p)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3531 (if (eq system-type 'vax-vms)
1109
c9feb3e64805 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1103
diff changeset
3532 (vms-read-directory file switches (current-buffer))
21041
a7526e76aac9 (insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents: 21001
diff changeset
3533 (let* ((coding-system-for-read
a7526e76aac9 (insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents: 21001
diff changeset
3534 (and enable-multibyte-characters
a7526e76aac9 (insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents: 21001
diff changeset
3535 (or file-name-coding-system
a7526e76aac9 (insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents: 21001
diff changeset
3536 default-file-name-coding-system)))
22179
edc72bb3a3ff (insert-directory): When WILDCARD is nil, expand ~ if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 22175
diff changeset
3537 ;; This is to control encoding the arguments in call-process.
21046
390b026f483d (insert-directory): Bind coding-system-for-write.
Kenichi Handa <handa@m17n.org>
parents: 21041
diff changeset
3538 (coding-system-for-write coding-system-for-read)
21041
a7526e76aac9 (insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents: 21001
diff changeset
3539 (result
a7526e76aac9 (insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents: 21001
diff changeset
3540 (if wildcard
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3541 ;; Run ls in the directory of the file pattern we asked for
30907
46752ce55a92 (insert-directory): Don't lose original file name,
Andreas Schwab <schwab@suse.de>
parents: 30733
diff changeset
3542 (let ((default-directory
46752ce55a92 (insert-directory): Don't lose original file name,
Andreas Schwab <schwab@suse.de>
parents: 30733
diff changeset
3543 (if (file-name-absolute-p file)
46752ce55a92 (insert-directory): Don't lose original file name,
Andreas Schwab <schwab@suse.de>
parents: 30733
diff changeset
3544 (file-name-directory file)
46752ce55a92 (insert-directory): Don't lose original file name,
Andreas Schwab <schwab@suse.de>
parents: 30733
diff changeset
3545 (file-name-directory (expand-file-name file))))
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3546 (pattern (file-name-nondirectory file)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3547 (call-process
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3548 shell-file-name nil t nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3549 "-c" (concat (if (memq system-type '(ms-dos windows-nt))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3550 ""
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3551 "\\") ; Disregard Unix shell aliases!
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3552 insert-directory-program
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3553 " -d "
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3554 (if (stringp switches)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3555 switches
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3556 (mapconcat 'identity switches " "))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3557 " -- "
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3558 ;; Quote some characters that have
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3559 ;; special meanings in shells; but
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3560 ;; don't quote the wildcards--we
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3561 ;; want them to be special. We
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3562 ;; also currently don't quote the
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3563 ;; quoting characters in case
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3564 ;; people want to use them
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3565 ;; explicitly to quote wildcard
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3566 ;; characters.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3567 (shell-quote-wildcard-pattern pattern))))
21041
a7526e76aac9 (insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents: 21001
diff changeset
3568 ;; SunOS 4.1.3, SVr4 and others need the "." to list the
a7526e76aac9 (insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents: 21001
diff changeset
3569 ;; directory if FILE is a symbolic link.
a7526e76aac9 (insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents: 21001
diff changeset
3570 (apply 'call-process
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3571 insert-directory-program nil t nil
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3572 (append
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3573 (if (listp switches) switches
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3574 (unless (equal switches "")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3575 ;; Split the switches at any spaces so we can
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3576 ;; pass separate options as separate args.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3577 (split-string switches)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3578 ;; Avoid lossage if FILE starts with `-'.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3579 '("--")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3580 (progn
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3581 (if (string-match "\\`~" file)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3582 (setq file (expand-file-name file)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3583 (list
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3584 (if full-directory-p
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3585 (concat (file-name-as-directory file) ".")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3586 file))))))))
21041
a7526e76aac9 (insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents: 21001
diff changeset
3587 (if (/= result 0)
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3588 ;; We get here if `insert-directory-program' failed.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3589 ;; On non-Posix systems, we cannot open a directory, so
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3590 ;; don't even try, because that will always result in
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3591 ;; the ubiquitous "Access denied". Instead, show them
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3592 ;; the `ls' command line and let them guess what went
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3593 ;; wrong.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3594 (if (and (file-directory-p file)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3595 (memq system-type '(ms-dos windows-nt)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3596 (error
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3597 "Reading directory: \"%s %s -- %s\" exited with status %s"
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3598 insert-directory-program
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3599 (if (listp switches) (concat switches) switches)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3600 file result)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3601 ;; Unix. Access the file to get a suitable error.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3602 (access-file file "Reading directory"))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3603 ;; Replace "total" with "used", to avoid confusion.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3604 ;; Add in the amount of free space.
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3605 (save-excursion
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3606 (goto-char (point-min))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3607 (when (re-search-forward "^total" nil t)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3608 (replace-match "used")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3609 (end-of-line)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3610 (let (available)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3611 (with-temp-buffer
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3612 (call-process "df" nil t nil ".")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3613 (goto-char (point-min))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3614 (forward-line 1)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3615 (skip-chars-forward "^ \t")
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3616 (forward-word 3)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3617 (let ((end (point)))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3618 (forward-word -1)
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3619 (setq available (buffer-substring (point) end))))
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3620 (insert " available " available))))))))))
30291
062625598798 insert-directory: use split-string
Sam Steingold <sds@gnu.org>
parents: 29887
diff changeset
3621
6050
afc731c614d3 (kill-emacs-query-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5974
diff changeset
3622 (defvar kill-emacs-query-functions nil
7686
814e18e2d3d4 (kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7682
diff changeset
3623 "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
3624 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
3625 `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
3626 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
3627 See also `kill-emacs-hook'.")
6050
afc731c614d3 (kill-emacs-query-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5974
diff changeset
3628
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3629 (defun save-buffers-kill-emacs (&optional arg)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3630 "Offer to save each buffer, then kill this Emacs process.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3631 With prefix arg, silently save all file-visiting buffers, then kill."
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3632 (interactive "P")
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3633 (save-some-buffers arg t)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3634 (and (or (not (memq t (mapcar (function
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3635 (lambda (buf) (and (buffer-file-name buf)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3636 (buffer-modified-p buf))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3637 (buffer-list))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3638 (yes-or-no-p "Modified buffers exist; exit anyway? "))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3639 (or (not (fboundp 'process-list))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3640 ;; process-list is not defined on VMS.
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3641 (let ((processes (process-list))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3642 active)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3643 (while processes
739
0bb85f26b79c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 736
diff changeset
3644 (and (memq (process-status (car processes)) '(run stop open))
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3645 (let ((val (process-kill-without-query (car processes))))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3646 (process-kill-without-query (car processes) val)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3647 val)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3648 (setq active t))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3649 (setq processes (cdr processes)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3650 (or (not active)
24017
d6ab8dbc44f2 (save-buffers-kill-emacs): Show the list of current
Richard M. Stallman <rms@gnu.org>
parents: 23989
diff changeset
3651 (list-processes)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3652 (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
3653 ;; 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
3654 (run-hook-with-args-until-failure 'kill-emacs-query-functions)
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3655 (kill-emacs)))
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3656
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3657 ;; We use /: as a prefix to "quote" a file name
16387
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3658 ;; 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
3659
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3660 (setq file-name-handler-alist
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3661 (cons '("\\`/:" . file-name-non-special)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3662 file-name-handler-alist))
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3663
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3664 ;; 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
3665 ;; 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
3666 ;; has been handled already.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3667 ;; 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
3668
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3669 (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
3670 (let ((file-name-handler-alist nil)
20095
496ecb0c5e68 (file-name-non-special): For insert-directory operation,
Karl Heuer <kwzh@gnu.org>
parents: 20094
diff changeset
3671 (default-directory
496ecb0c5e68 (file-name-non-special): For insert-directory operation,
Karl Heuer <kwzh@gnu.org>
parents: 20094
diff changeset
3672 (if (eq operation 'insert-directory)
496ecb0c5e68 (file-name-non-special): For insert-directory operation,
Karl Heuer <kwzh@gnu.org>
parents: 20094
diff changeset
3673 (directory-file-name
32138
8a30e7f82c80 Fix prev change.
André Spiegel <spiegel@gnu.org>
parents: 32129
diff changeset
3674 (expand-file-name
20095
496ecb0c5e68 (file-name-non-special): For insert-directory operation,
Karl Heuer <kwzh@gnu.org>
parents: 20094
diff changeset
3675 (unhandled-file-name-directory default-directory)))
496ecb0c5e68 (file-name-non-special): For insert-directory operation,
Karl Heuer <kwzh@gnu.org>
parents: 20094
diff changeset
3676 default-directory))
16387
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3677 ;; 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
3678 (file-arg-indices
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3679 (cdr (or (assq operation
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3680 ;; The first four are special because they
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3681 ;; 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
3682 ;; in the return value.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3683 ;; 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
3684 '((expand-file-name . nil)
18040
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
3685 ;; `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
3686 ;; as stripped of its quoting.
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
3687 (substitute-in-file-name . identity)
16387
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3688 (file-name-directory . nil)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3689 (file-name-as-directory . nil)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3690 (directory-file-name . nil)
18164
33e7093070f8 (file-name-non-special): Handle
Richard M. Stallman <rms@gnu.org>
parents: 18040
diff changeset
3691 (file-name-completion 0 1)
33e7093070f8 (file-name-non-special): Handle
Richard M. Stallman <rms@gnu.org>
parents: 18040
diff changeset
3692 (file-name-all-completions 0 1)
16387
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3693 (rename-file 0 1)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3694 (copy-file 0 1)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3695 (make-symbolic-link 0 1)
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3696 (add-name-to-file 0 1)))
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3697 ;; 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
3698 ;; as the file name.
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3699 '(nil 0))))
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3700 ;; 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
3701 (arguments (copy-sequence arguments)))
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3702 ;; 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
3703 (save-match-data
18040
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
3704 (while (consp file-arg-indices)
20094
583c3ace07bf (file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents: 20093
diff changeset
3705 (let ((pair (nthcdr (car file-arg-indices) arguments)))
583c3ace07bf (file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents: 20093
diff changeset
3706 (and (car pair)
583c3ace07bf (file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents: 20093
diff changeset
3707 (string-match "\\`/:" (car pair))
583c3ace07bf (file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents: 20093
diff changeset
3708 (setcar pair
583c3ace07bf (file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents: 20093
diff changeset
3709 (if (= (length (car pair)) 2)
583c3ace07bf (file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents: 20093
diff changeset
3710 "/"
583c3ace07bf (file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents: 20093
diff changeset
3711 (substring (car pair) 2)))))
16387
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3712 (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
3713 (if (eq file-arg-indices 'identity)
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
3714 (car arguments)
89969b579beb (file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents: 17987
diff changeset
3715 (apply operation arguments))))
16387
8c72a338e436 (file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16372
diff changeset
3716
337
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3717 (define-key ctl-x-map "\C-f" 'find-file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3718 (define-key ctl-x-map "\C-r" 'find-file-read-only)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3719 (define-key ctl-x-map "\C-v" 'find-alternate-file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3720 (define-key ctl-x-map "\C-s" 'save-buffer)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3721 (define-key ctl-x-map "s" 'save-some-buffers)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3722 (define-key ctl-x-map "\C-w" 'write-file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3723 (define-key ctl-x-map "i" 'insert-file)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3724 (define-key esc-map "~" 'not-modified)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3725 (define-key ctl-x-map "\C-d" 'list-directory)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3726 (define-key ctl-x-map "\C-c" 'save-buffers-kill-emacs)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3727
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3728 (define-key ctl-x-4-map "f" 'find-file-other-window)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3729 (define-key ctl-x-4-map "r" 'find-file-read-only-other-window)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3730 (define-key ctl-x-4-map "\C-f" 'find-file-other-window)
165d128bc864 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
3731 (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
3732 (define-key ctl-x-4-map "\C-o" 'display-buffer)
423
a746c1098ea6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 337
diff changeset
3733
778
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
3734 (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
3735 (define-key ctl-x-5-map "f" 'find-file-other-frame)
cd00bdacc17b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 755
diff changeset
3736 (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
3737 (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
3738
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 638
diff changeset
3739 ;;; files.el ends here