Mercurial > emacs
annotate lisp/files.el @ 29157:f0754aea38e3
(iso-8859-8-e, iso-8859-8-i): For now, just
aliases for hebrew-iso-8bit.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Wed, 24 May 2000 16:03:39 +0000 |
parents | e52d90f01f53 |
children | 43abee1ebeca |
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 | 3 ;; Copyright (C) 1985, 86, 87, 92, 93, |
28325 | 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 | 7 |
8 ;; This file is part of GNU Emacs. | |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
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 | 13 ;; any later version. |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
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 | 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 | 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 | 51 nil |
52 "*Alist of abbreviations for file directories. | |
53 A list of elements of the form (FROM . TO), each meaning to replace | |
54 FROM with TO when it appears in a directory name. This replacement is | |
55 done when setting up the default directory of a newly visited file. | |
56 *Every* FROM string should start with `^'. | |
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 | 61 Use this feature when you have directories which you normally refer to |
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 | 70 |
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 | 74 This can be done by renaming the file or by copying. |
75 | |
76 Renaming means that Emacs renames the existing file so that it is a | |
77 backup file, then writes the buffer into a new file. Any other names | |
78 that the old file had will now refer to the backup file. The new file | |
79 is owned by you and its group is defaulted. | |
80 | |
81 Copying means that Emacs copies the existing file into the backup | |
82 file, then writes the buffer on top of the existing file. Any other | |
83 names that the old file had will now refer to the new (edited) file. | |
84 The file's owner and group are unchanged. | |
85 | |
86 The choice of renaming or copying is controlled by the variables | |
25604
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
87 `backup-by-copying', `backup-by-copying-when-linked', |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
88 `backup-by-copying-when-mismatch' and |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
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 | 92 |
93 ;; Do this so that local variables based on the file name | |
94 ;; are not overridden by the major mode. | |
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 | 99 (put 'backup-inhibited 'permanent-local t) |
100 | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
101 (defcustom backup-by-copying nil |
337 | 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 | 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 | 108 "*Non-nil means use copying to create backups for files with multiple names. |
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 | 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 | 115 "*Non-nil means create backups by copying if this preserves owner or group. |
116 Renaming may still be used (subject to control of other variables) | |
117 when it would not result in changing the owner or group of the file; | |
118 that is, for files which are owned by you and whose group matches | |
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 | 123 |
25604
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
124 (defcustom backup-by-copying-when-privileged-mismatch 200 |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
125 "*Non-nil means create backups by copying to preserve a privileged owner. |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
126 Renaming may still be used (subject to control of other variables) |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
127 when it would not result in changing the owner of the file or if the owner |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
128 has a user id greater than the value of this variable. This is useful |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
129 when low-numbered uid's are used for special system users (such as root) |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
130 that must maintain ownership of certain files. |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
131 This variable is relevant only if `backup-by-copying' and |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
132 `backup-by-copying-when-mismatch' are nil." |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
133 :type '(choice (const nil) integer) |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
134 :group 'backup) |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
135 |
337 | 136 (defvar backup-enable-predicate |
28613
23f4d126447d
(backup-enable-predicate): Unquote the lambda.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28540
diff
changeset
|
137 (lambda (name) |
28758
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
138 (not (or (let ((comp (compare-strings temporary-file-directory 0 nil |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
139 name 0 nil))) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
140 ;; Directory is under temporary-file-directory. |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
141 (and (not (eq comp t)) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
142 (< comp -1))) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
143 (if small-temporary-file-directory |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
144 (let ((comp (compare-strings small-temporary-file-directory |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
145 0 nil |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
146 name 0 nil))) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
147 ;; Directory is under small-temporary-file-directory. |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
148 (and (not (eq comp t)) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
149 (< comp -1))))))) |
337 | 150 "Predicate that looks at a file name and decides whether to make backups. |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
151 Called with an absolute file name as argument, it returns t to enable backup. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
152 The default version checks for files in `temporary-file-directory' or |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
153 `small-temporary-file-directory'.") |
337 | 154 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
155 (defcustom buffer-offer-save nil |
28325 | 156 "*Non-nil in a buffer means always offer to save buffer on exit. |
157 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
|
158 Automatically local in all buffers." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
159 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
160 :group 'backup) |
337 | 161 (make-variable-buffer-local 'buffer-offer-save) |
162 | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
163 (defcustom find-file-existing-other-name t |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
164 "*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
|
165 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
|
166 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
|
167 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
168 :group 'find-file) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
169 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
170 (defcustom find-file-visit-truename nil |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
171 "*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
|
172 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
|
173 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
|
174 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
175 :group 'find-file) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
176 |
17894
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
177 (defcustom revert-without-query |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
178 nil |
16684
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
179 "*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
|
180 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
|
181 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
|
182 then `revert-buffer' reverts the file without querying |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
183 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
|
184 :type '(repeat regexp) |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
185 :group 'find-file) |
16684
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
186 |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
187 (defvar buffer-file-number nil |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
188 "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
|
189 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
|
190 This pair of numbers uniquely identifies the file. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
191 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
|
192 (make-variable-buffer-local 'buffer-file-number) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
193 (put 'buffer-file-number 'permanent-local t) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
194 |
15329
19008fd7774d
(buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents:
15269
diff
changeset
|
195 (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
|
196 "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
|
197 |
22175
0a2e8ec2a766
(file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents:
22143
diff
changeset
|
198 (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
|
199 (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
|
200 (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
|
201 "[+, ;=|<>\"?*]\\|\\[\\|\\]\\|" ; 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
|
202 "[\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
|
203 "\\(/\\.\\.?[^/]\\)\\|" ; leading dots |
0a2e8ec2a766
(file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents:
22143
diff
changeset
|
204 "\\(/[^/.]+\\.[^/.]*\\.\\)")) ; 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
|
205 ((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
|
206 (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
|
207 "[|<>\"?*\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
|
208 (t "[\000]")) |
0a2e8ec2a766
(file-name-invalid-regexp): New variable, moved here from arc-mode.el
Eli Zaretskii <eliz@gnu.org>
parents:
22143
diff
changeset
|
209 "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
|
210 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
211 (defcustom file-precious-flag nil |
337 | 212 "*Non-nil means protect against I/O errors while saving files. |
12105 | 213 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
|
214 |
bd3e59a5c0b3
(file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents:
12105
diff
changeset
|
215 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
|
216 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
|
217 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
|
218 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
|
219 |
bd3e59a5c0b3
(file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents:
12105
diff
changeset
|
220 Note that this feature forces backups to be made by copying. |
12105 | 221 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
|
222 breaks any hard links between it and other files." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
223 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
224 :group 'backup) |
337 | 225 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
226 (defcustom version-control nil |
337 | 227 "*Control use of version numbers for backup files. |
228 t means make numeric backup versions unconditionally. | |
229 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
|
230 `never' means do not make them." |
22582
122946298ba4
(version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents:
22558
diff
changeset
|
231 :type '(choice (const :tag "Never" never) |
122946298ba4
(version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents:
22558
diff
changeset
|
232 (const :tag "If existing" nil) |
122946298ba4
(version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents:
22558
diff
changeset
|
233 (other :tag "Always" t)) |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
234 :group 'backup |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
235 :group 'vc) |
337 | 236 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
237 (defcustom dired-kept-versions 2 |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
238 "*When cleaning directory, number of versions to keep." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
239 :type 'integer |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
240 :group 'backup |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
241 :group 'dired) |
337 | 242 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
243 (defcustom delete-old-versions nil |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
244 "*If t, delete excess backup versions silently. |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
245 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
|
246 :type '(choice (const :tag "Delete" t) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
247 (const :tag "Ask" nil) |
22582
122946298ba4
(version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents:
22558
diff
changeset
|
248 (other :tag "Leave" other)) |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
249 :group 'backup) |
337 | 250 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
251 (defcustom kept-old-versions 2 |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
252 "*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
|
253 :type 'integer |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
254 :group 'backup) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
255 |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
256 (defcustom kept-new-versions 2 |
337 | 257 "*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
|
258 Includes the new backup. Must be > 0" |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
259 :type 'integer |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
260 :group 'backup) |
337 | 261 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
262 (defcustom require-final-newline nil |
337 | 263 "*Value of t says silently ensure a file ends in a newline when it is saved. |
264 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
|
265 nil means don't add newlines." |
18340
f984a38eda06
(require-final-newline): Fix custom :type.
Richard M. Stallman <rms@gnu.org>
parents:
18317
diff
changeset
|
266 :type '(choice (const :tag "Off" nil) |
f984a38eda06
(require-final-newline): Fix custom :type.
Richard M. Stallman <rms@gnu.org>
parents:
18317
diff
changeset
|
267 (const :tag "Add" t) |
22582
122946298ba4
(version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents:
22558
diff
changeset
|
268 (other :tag "Ask" ask)) |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
269 :group 'editing-basics) |
337 | 270 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
271 (defcustom auto-save-default t |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
272 "*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
|
273 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
274 :group 'auto-save) |
337 | 275 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
276 (defcustom auto-save-visited-file-name nil |
337 | 277 "*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
|
278 Normally auto-save files are written under other names." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
279 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
280 :group 'auto-save) |
337 | 281 |
28758
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
282 (defcustom auto-save-file-name-transforms |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
283 '(("\\`/[^/]*:\\(.+/\\)*\\(.*\\)" "/tmp/\\2")) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
284 "*Transforms to apply to buffer file name before making auto-save file name. |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
285 Each transform is a list (REGEXP REPLACEMENT): |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
286 REGEXP is a regular expression to match against the file name. |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
287 If it matches, `replace-match' is used to replace the |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
288 matching part with REPLACEMENT. |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
289 All the transforms in the list are tried, in the order they are listed. |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
290 When one transform applies, its result is final; |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
291 no further transforms are tried. |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
292 |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
293 The default value is set up to put the auto-save file into `/tmp' |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
294 for editing a remote file." |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
295 :group 'auto-save |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
296 :type '(repeat (list (string :tag "Regexp") (string :tag "Replacement"))) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
297 :version "21.1") |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
298 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
299 (defcustom save-abbrevs nil |
337 | 300 "*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
|
301 Loading an abbrev file sets this to t." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
302 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
303 :group 'abbrev) |
337 | 304 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
305 (defcustom find-file-run-dired t |
28259
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
306 "*Non-nil means allow `find-file' to visit directories. |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
307 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
|
308 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
309 :group 'find-file) |
337 | 310 |
28259
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
311 (defcustom find-directory-functions '(cvs-dired-noselect dired-noselect) |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
312 "*List of functions to try in sequence to visit a directory. |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
313 Each function is called with the directory name as the sole argument |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
314 and should return either a buffer or nil." |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
315 :type '(hook :options (cvs-dired-noselect dired-noselect)) |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
316 :group 'find-file) |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
317 |
1879
c9b4ece292cc
(find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents:
1799
diff
changeset
|
318 ;;;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
|
319 ;;;(put 'find-file-not-found-hooks 'permanent-local t) |
337 | 320 (defvar find-file-not-found-hooks nil |
321 "List of functions to be called for `find-file' on nonexistent file. | |
322 These functions are called as soon as the error is detected. | |
28325 | 323 Variable `buffer-file-name' is already set up. |
337 | 324 The functions are called in the order given until one of them returns non-nil.") |
325 | |
1879
c9b4ece292cc
(find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents:
1799
diff
changeset
|
326 ;;;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
|
327 ;;;(put 'find-file-hooks 'permanent-local t) |
337 | 328 (defvar find-file-hooks nil |
329 "List of functions to be called after a buffer is loaded from a file. | |
330 The buffer's local variables (if any) will have been processed before the | |
331 functions are called.") | |
332 | |
333 (defvar write-file-hooks nil | |
334 "List of functions to be called before writing out a buffer to a file. | |
335 If one of them returns non-nil, the file is considered already written | |
605 | 336 and the rest are not called. |
337 These hooks are considered to pertain to the visited file. | |
26612
7970b988aada
(write-file-hooks): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
26509
diff
changeset
|
338 So any buffer-local binding of `write-file-hooks' is |
7970b988aada
(write-file-hooks): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
26509
diff
changeset
|
339 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
|
340 |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
341 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
|
342 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
|
343 ;;; 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
|
344 (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
|
345 |
94e135f2d64d
(local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
2335
diff
changeset
|
346 (defvar local-write-file-hooks nil |
94e135f2d64d
(local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
2335
diff
changeset
|
347 "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
|
348 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
|
349 `write-file-hooks'. |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
350 |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
351 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
|
352 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
|
353 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
|
354 `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
|
355 (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
|
356 (put 'local-write-file-hooks 'permanent-local t) |
605 | 357 |
358 (defvar write-contents-hooks nil | |
359 "List of functions to be called before writing out a buffer to a file. | |
360 If one of them returns non-nil, the file is considered already written | |
361 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
|
362 |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
363 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
|
364 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
|
365 `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
|
366 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
|
367 |
5e5779fa54cb
(auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents:
14112
diff
changeset
|
368 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
|
369 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
|
370 LOCAL argument. |
14112
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
371 |
605 | 372 See also `write-file-hooks'.") |
14112
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
373 (make-variable-buffer-local 'write-contents-hooks) |
337 | 374 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
375 (defcustom enable-local-variables t |
16440
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
376 "*Control use of local variables in files you visit. |
337 | 377 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
|
378 A value of t means file local variables specifications are obeyed; |
337 | 379 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
|
380 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
|
381 a -*- line. |
337 | 382 |
23657
7f5af9d1766d
(hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents:
23606
diff
changeset
|
383 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
|
384 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
|
385 and ignores this variable." |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
386 :type '(choice (const :tag "Obey" t) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
387 (const :tag "Ignore" nil) |
22582
122946298ba4
(version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents:
22558
diff
changeset
|
388 (other :tag "Query" other)) |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
389 :group 'find-file) |
337 | 390 |
22476
f4871f285a9d
(user-init-file): Default value now nil.
Richard M. Stallman <rms@gnu.org>
parents:
22466
diff
changeset
|
391 (defvar local-enable-local-variables t |
f4871f285a9d
(user-init-file): Default value now nil.
Richard M. Stallman <rms@gnu.org>
parents:
22466
diff
changeset
|
392 "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
|
393 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
|
394 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
|
395 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
|
396 |
7f5af9d1766d
(hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents:
23606
diff
changeset
|
397 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
|
398 specified in a -*- line.") |
22476
f4871f285a9d
(user-init-file): Default value now nil.
Richard M. Stallman <rms@gnu.org>
parents:
22466
diff
changeset
|
399 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
400 (defcustom enable-local-eval 'maybe |
722
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
401 "*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
|
402 The value can be t, nil or something else. |
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
403 A value of t means obey `eval' variables; |
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
404 nil means ignore them; anything else means query. |
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
405 |
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
406 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
|
407 and ignores this variable." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
408 :type '(choice (const :tag "Obey" t) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
409 (const :tag "Ignore" nil) |
22582
122946298ba4
(version-control, delete-old-versions,
Andreas Schwab <schwab@suse.de>
parents:
22558
diff
changeset
|
410 (other :tag "Query" other)) |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
411 :group 'find-file) |
337 | 412 |
413 ;; Avoid losing in versions where CLASH_DETECTION is disabled. | |
414 (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
|
415 (defalias 'lock-buffer 'ignore)) |
337 | 416 (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
|
417 (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
|
418 (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
|
419 (defalias 'file-locked-p 'ignore)) |
4186
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
420 |
18316
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
421 (defvar view-read-only nil |
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
422 "*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
|
423 |
22143
468e3489f1c0
(temporary-file-directory): Renamed from system-tmp-directory.
Richard M. Stallman <rms@gnu.org>
parents:
22084
diff
changeset
|
424 (defvar temporary-file-directory |
468e3489f1c0
(temporary-file-directory): Renamed from system-tmp-directory.
Richard M. Stallman <rms@gnu.org>
parents:
22084
diff
changeset
|
425 (file-name-as-directory |
22084
08f31e440c92
(system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
22026
diff
changeset
|
426 (cond ((memq system-type '(ms-dos windows-nt)) |
08f31e440c92
(system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
22026
diff
changeset
|
427 (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
|
428 ((memq system-type '(vax-vms axp-vms)) |
08f31e440c92
(system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
22026
diff
changeset
|
429 (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
|
430 (t |
08f31e440c92
(system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
22026
diff
changeset
|
431 (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
|
432 "The directory for writing temporary files.") |
22084
08f31e440c92
(system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
22026
diff
changeset
|
433 |
25484
a8383dbd7250
(small-temporary-file-directory): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
25404
diff
changeset
|
434 (defvar small-temporary-file-directory |
25560
c4397641ee0e
(small-temporary-file-directory): Make it nil except on ms-dos.
Eli Zaretskii <eliz@gnu.org>
parents:
25484
diff
changeset
|
435 (if (eq system-type 'ms-dos) (getenv "TMPDIR")) |
25484
a8383dbd7250
(small-temporary-file-directory): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
25404
diff
changeset
|
436 "The directory for writing small temporary files. |
25560
c4397641ee0e
(small-temporary-file-directory): Make it nil except on ms-dos.
Eli Zaretskii <eliz@gnu.org>
parents:
25484
diff
changeset
|
437 If non-nil, this directory is used instead of `temporary-file-directory' |
c4397641ee0e
(small-temporary-file-directory): Make it nil except on ms-dos.
Eli Zaretskii <eliz@gnu.org>
parents:
25484
diff
changeset
|
438 by programs that create small temporary files. This is for systems that |
c4397641ee0e
(small-temporary-file-directory): Make it nil except on ms-dos.
Eli Zaretskii <eliz@gnu.org>
parents:
25484
diff
changeset
|
439 have fast storage with limited space, such as a RAM disk.") |
25484
a8383dbd7250
(small-temporary-file-directory): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
25404
diff
changeset
|
440 |
22405
9a8440593987
(null-device): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
22403
diff
changeset
|
441 ;; 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
|
442 (defvar null-device "/dev/null" "The system null device.") |
9a8440593987
(null-device): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
22403
diff
changeset
|
443 |
4186
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
444 (defun ange-ftp-completion-hook-function (op &rest args) |
28325 | 445 "Provides support for ange-ftp host name completion. |
446 Runs the usual ange-ftp hook, but only for completion operations." | |
447 ;; Having this here avoids the need to load ange-ftp when it's not | |
448 ;; really in use. | |
4186
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
449 (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
|
450 (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
|
451 (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
|
452 (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
|
453 (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
|
454 inhibit-file-name-handlers))) |
2b445c15563e
(ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents:
7036
diff
changeset
|
455 (inhibit-file-name-operation op)) |
4186
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
456 (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
|
457 |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
458 (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
|
459 "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
|
460 This function's standard definition is trivial; it just returns the argument. |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
461 However, on some systems, the function is redefined |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
462 with a definition that really does change some file names." |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
463 filename) |
337 | 464 |
465 (defun pwd () | |
466 "Show the current default directory." | |
467 (interactive nil) | |
468 (message "Directory %s" default-directory)) | |
469 | |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
470 (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
|
471 "Value of the CDPATH environment variable, as a list. |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
472 Not actually set up until the first time you you use it.") |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
473 |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
474 (defun parse-colon-path (cd-path) |
29089 | 475 "Explode a colon-separated search path into a list of directory names. |
476 \(For values of `colon' equal to `path-separator'.)" | |
477 ;; 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
|
478 (and cd-path |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
479 (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
|
480 (setq cd-path (concat cd-path path-separator)) |
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
481 (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
|
482 (setq cd-list |
3038
4bdac10d920a
(cd): Set cd-path to a list.
Richard M. Stallman <rms@gnu.org>
parents:
2896
diff
changeset
|
483 (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
|
484 (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
|
485 nil |
6f940dcec978
(parse-colon-path): Really make nil, not ".", for empty path element.
Richard M. Stallman <rms@gnu.org>
parents:
4196
diff
changeset
|
486 (substitute-in-file-name |
4196
20f7ea2f83ef
(parse-colon-path): Turn empty substring into nil.
Richard M. Stallman <rms@gnu.org>
parents:
4186
diff
changeset
|
487 (file-name-as-directory |
20f7ea2f83ef
(parse-colon-path): Turn empty substring into nil.
Richard M. Stallman <rms@gnu.org>
parents:
4186
diff
changeset
|
488 (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
|
489 (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
|
490 cd-list))) |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
491 |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
492 (defun cd-absolute (dir) |
3652
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
493 "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
|
494 ;; 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
|
495 ;; because otherwise expand-file-name may give some bad results. |
337 | 496 (if (not (eq system-type 'vax-vms)) |
497 (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
|
498 (setq dir (abbreviate-file-name (expand-file-name dir))) |
337 | 499 (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
|
500 (if (file-exists-p dir) |
881a46c98ddf
(set-auto-mode): If -*- line specifies a mode,
Richard M. Stallman <rms@gnu.org>
parents:
18676
diff
changeset
|
501 (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
|
502 (error "%s: no such directory" dir)) |
337 | 503 (if (file-executable-p dir) |
504 (setq default-directory dir) | |
3038
4bdac10d920a
(cd): Set cd-path to a list.
Richard M. Stallman <rms@gnu.org>
parents:
2896
diff
changeset
|
505 (error "Cannot cd to %s: Permission denied" dir)))) |
337 | 506 |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
507 (defun cd (dir) |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
508 "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
|
509 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
|
510 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
|
511 (interactive |
dde58f45b00a
(cd): When reading arg, use just directory as the default.
Richard M. Stallman <rms@gnu.org>
parents:
12591
diff
changeset
|
512 (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
|
513 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
|
514 (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
|
515 (null (getenv "CDPATH")))))) |
3652
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
516 (if (file-name-absolute-p dir) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
517 (cd-absolute (expand-file-name dir)) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
518 (if (null cd-path) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
519 (let ((trypath (parse-colon-path (getenv "CDPATH")))) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
520 (setq cd-path (or trypath (list "./"))))) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
521 (if (not (catch 'found |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
522 (mapcar |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
523 (function (lambda (x) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
524 (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
|
525 (if (file-directory-p f) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
526 (progn |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
527 (cd-absolute f) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
528 (throw 'found t)))))) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
529 cd-path) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
530 nil)) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
531 (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
|
532 |
337 | 533 (defun load-file (file) |
534 "Load the Lisp file named FILE." | |
535 (interactive "fLoad file: ") | |
28099
18744efb17ba
(load-file): Allow completion to .elc.
Dave Love <fx@gnu.org>
parents:
28029
diff
changeset
|
536 (let ((completion-ignored-extensions |
18744efb17ba
(load-file): Allow completion to .elc.
Dave Love <fx@gnu.org>
parents:
28029
diff
changeset
|
537 (delete ".elc" completion-ignored-extensions))) |
18744efb17ba
(load-file): Allow completion to .elc.
Dave Love <fx@gnu.org>
parents:
28029
diff
changeset
|
538 (load (expand-file-name file) nil nil t))) |
337 | 539 |
540 (defun load-library (library) | |
541 "Load the library named LIBRARY. | |
542 This is an interface to the function `load'." | |
543 (interactive "sLoad library: ") | |
544 (load library)) | |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
545 |
26395
8a8fba067d7a
(file-local-copy): Remove optional BUFFER argument
Gerd Moellmann <gerd@gnu.org>
parents:
25989
diff
changeset
|
546 (defun file-local-copy (file) |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
547 "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
|
548 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
|
549 accessible." |
26395
8a8fba067d7a
(file-local-copy): Remove optional BUFFER argument
Gerd Moellmann <gerd@gnu.org>
parents:
25989
diff
changeset
|
550 ;; This formerly had an optional BUFFER argument that wasn't used by |
8a8fba067d7a
(file-local-copy): Remove optional BUFFER argument
Gerd Moellmann <gerd@gnu.org>
parents:
25989
diff
changeset
|
551 ;; anything. |
7030
9e51b51e8595
Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents:
6899
diff
changeset
|
552 (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
|
553 (if handler |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
554 (funcall handler 'file-local-copy file) |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
555 nil))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
556 |
8148
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
557 (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
|
558 "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
|
559 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
|
560 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
|
561 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
|
562 |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
563 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
|
564 Do not specify them in other calls." |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
565 ;; 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
|
566 ;; to chase before getting an error. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
567 ;; 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
|
568 ;; 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
|
569 |
0bd2831dff40
Test for "" too; let it go to expand-file-name if it is equal.
Simon Marshall <simon@gnu.org>
parents:
12145
diff
changeset
|
570 ;; 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
|
571 (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
|
572 (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
|
573 (string-match "~[^/]*" filename))) |
2613
709f672f450e
(find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2600
diff
changeset
|
574 (progn |
709f672f450e
(find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2600
diff
changeset
|
575 (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
|
576 (if (string= filename "") |
709f672f450e
(find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2600
diff
changeset
|
577 (setq filename "/")))) |
8148
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
578 (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
|
579 (let (done |
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
580 ;; 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
|
581 ;; 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
|
582 ;; 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
|
583 (file-name-handler-alist |
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
584 (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
|
585 (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
|
586 (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
|
587 (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
|
588 |
90127e640713
(file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents:
19663
diff
changeset
|
589 ;; 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
|
590 ;; 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
|
591 ;; (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
|
592 ;; 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
|
593 ;; 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
|
594 ;; 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
|
595 ;; 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
|
596 ;; 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
|
597 ;; `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
|
598 ;; 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
|
599 ;; name in the process). |
90127e640713
(file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents:
19663
diff
changeset
|
600 (if (eq system-type 'windows-nt) |
90127e640713
(file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents:
19663
diff
changeset
|
601 (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
|
602 newname) |
90127e640713
(file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents:
19663
diff
changeset
|
603 ;; 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
|
604 ;; 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
|
605 (if handler |
90127e640713
(file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents:
19663
diff
changeset
|
606 (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
|
607 ;; If filename contains a wildcard, newname will be the old name. |
28325 | 608 (if (string-match "[[*?]" filename) |
19680
90127e640713
(file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents:
19663
diff
changeset
|
609 (setq newname filename) |
90127e640713
(file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents:
19663
diff
changeset
|
610 ;; 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
|
611 (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
|
612 (setq filename (or newname filename))) |
90127e640713
(file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents:
19663
diff
changeset
|
613 (setq done t))) |
90127e640713
(file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents:
19663
diff
changeset
|
614 |
8148
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
615 ;; 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
|
616 ;; 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
|
617 (while (not done) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
618 (setcar counter (1- (car counter))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
619 (if (< (car counter) 0) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
620 (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
|
621 (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
|
622 ;; 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
|
623 ;; 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
|
624 (if handler |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
625 (setq filename (funcall handler 'file-truename filename) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
626 done t) |
9234
da491f38518c
(file-truename): If name has no dir, use default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
9212
diff
changeset
|
627 (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
|
628 target dirfile) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
629 ;; Get the truename of the directory. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
630 (setq dirfile (directory-file-name dir)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
631 ;; 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
|
632 (or (string= dir dirfile) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
633 ;; 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
|
634 ;; save time--don't recalculate. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
635 (if (assoc dir (car prev-dirs)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
636 (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
|
637 (let ((old dir) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
638 (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
|
639 (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
|
640 (setq dir new)))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
641 (if (equal ".." (file-name-nondirectory filename)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
642 (setq filename |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
643 (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
|
644 done t) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
645 (if (equal "." (file-name-nondirectory filename)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
646 (setq filename (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 ;; Put it back on the file name. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
649 (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
|
650 ;; 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
|
651 (setq target (file-symlink-p filename)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
652 (if target |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
653 ;; 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
|
654 ;; 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
|
655 ;; 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
|
656 ;; 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
|
657 ;; 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
|
658 (setq filename |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
659 (if (file-name-absolute-p target) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
660 target |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
661 (concat dir target)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
662 done nil) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
663 ;; No, we are done! |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
664 (setq done t)))))))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
665 filename)) |
1672
ecf43116a845
The find-file-name-handler function in ../src/fileio.c is now
Jim Blandy <jimb@redhat.com>
parents:
1537
diff
changeset
|
666 |
3260
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
667 (defun file-chase-links (filename) |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
668 "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
|
669 Does not examine containing directories for links, |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
670 unlike `file-truename'." |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
671 (let (tem (count 100) (newname filename)) |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
672 (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
|
673 (save-match-data |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
674 (if (= count 0) |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
675 (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
|
676 ;; 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
|
677 (while (string-match "//+" tem) |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
678 (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
|
679 ;; 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
|
680 ;; target of any directory symlink. |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
681 ;; 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
|
682 ;; 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
|
683 (while (string-match "\\`\\.\\./" tem) |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
684 (setq tem (substring tem 3)) |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
685 (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
|
686 ;; 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
|
687 (setq newname |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
688 (file-chase-links |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
689 (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
|
690 ;; 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
|
691 (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
|
692 (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
|
693 (setq count (1- count)))) |
3260
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
694 newname)) |
337 | 695 |
16831
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
696 (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
|
697 "Select buffer BUFFER in another window. |
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
698 Optional second arg NORECORD non-nil means |
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
699 do not put this buffer at the front of the list of recently selected ones." |
337 | 700 (interactive "BSwitch to buffer in other window: ") |
701 (let ((pop-up-windows t)) | |
16831
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
702 (pop-to-buffer buffer t norecord))) |
337 | 703 |
16831
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
704 (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
|
705 "Switch to buffer BUFFER in another frame. |
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
706 Optional second arg NORECORD non-nil means |
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
707 do not put this buffer at the front of the list of recently selected ones." |
778 | 708 (interactive "BSwitch to buffer in other frame: ") |
709 (let ((pop-up-frames t)) | |
16831
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
710 (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
|
711 (raise-frame (window-frame (selected-window))))) |
423 | 712 |
24166
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
713 (defun find-file (filename &optional wildcards) |
337 | 714 "Edit file FILENAME. |
715 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
|
716 creating one if none already exists. |
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
717 Interactively, or if WILDCARDS is non-nil in a call from Lisp, |
25283
94c605866a9e
(interpreter-mode-alist): Add make, guile, clisp.
Dave Love <fx@gnu.org>
parents:
25221
diff
changeset
|
718 expand wildcards (if any) and visit multiple files. Wildcard expansion |
25404 | 719 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
|
720 (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
|
721 (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
|
722 (if (listp value) |
6b14770eb944
(find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents:
24166
diff
changeset
|
723 (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
|
724 (switch-to-buffer value)))) |
337 | 725 |
24166
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
726 (defun find-file-other-window (filename &optional wildcards) |
337 | 727 "Edit file FILENAME, in another window. |
728 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
|
729 See the function `display-buffer'. |
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
730 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
|
731 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
|
732 (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
|
733 (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
|
734 (if (listp value) |
6b14770eb944
(find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents:
24166
diff
changeset
|
735 (progn |
6b14770eb944
(find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents:
24166
diff
changeset
|
736 (setq value (nreverse value)) |
6b14770eb944
(find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents:
24166
diff
changeset
|
737 (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
|
738 (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
|
739 (switch-to-buffer-other-window value)))) |
337 | 740 |
24166
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
741 (defun find-file-other-frame (filename &optional wildcards) |
778 | 742 "Edit file FILENAME, in another frame. |
743 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
|
744 See the function `display-buffer'. |
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
745 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
|
746 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
|
747 (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
|
748 (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
|
749 (if (listp value) |
6b14770eb944
(find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents:
24166
diff
changeset
|
750 (progn |
6b14770eb944
(find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents:
24166
diff
changeset
|
751 (setq value (nreverse value)) |
6b14770eb944
(find-file): If find-file-noselect returns a list,
Richard M. Stallman <rms@gnu.org>
parents:
24166
diff
changeset
|
752 (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
|
753 (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
|
754 (switch-to-buffer-other-frame value)))) |
423 | 755 |
24166
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
756 (defun find-file-read-only (filename &optional wildcards) |
337 | 757 "Edit file FILENAME but don't allow changes. |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
758 Like `find-file' but marks buffer as read-only. |
337 | 759 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
|
760 (interactive "fFind file read-only: \np") |
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
761 (find-file filename wildcards) |
18316
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
762 (toggle-read-only 1) |
3280
3b3717164db0
(find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
3263
diff
changeset
|
763 (current-buffer)) |
337 | 764 |
24166
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
765 (defun find-file-read-only-other-window (filename &optional wildcards) |
337 | 766 "Edit file FILENAME in another window but don't allow changes. |
767 Like \\[find-file-other-window] but marks buffer as read-only. | |
768 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
|
769 (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
|
770 (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
|
771 (toggle-read-only 1) |
3280
3b3717164db0
(find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
3263
diff
changeset
|
772 (current-buffer)) |
337 | 773 |
24166
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
774 (defun find-file-read-only-other-frame (filename &optional wildcards) |
778 | 775 "Edit file FILENAME in another frame but don't allow changes. |
776 Like \\[find-file-other-frame] but marks buffer as read-only. | |
423 | 777 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
|
778 (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
|
779 (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
|
780 (toggle-read-only 1) |
3280
3b3717164db0
(find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
3263
diff
changeset
|
781 (current-buffer)) |
423 | 782 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
783 (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
|
784 "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
|
785 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
|
786 (interactive |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
787 (save-selected-window |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
788 (other-window 1) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
789 (let ((file buffer-file-name) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
790 (file-name nil) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
791 (file-dir nil)) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
792 (and file |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
793 (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
|
794 file-dir (file-name-directory file))) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
795 (list (read-file-name |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
796 "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
|
797 (if (one-window-p) |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
798 (find-file-other-window filename) |
13182
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
799 (save-selected-window |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
800 (other-window 1) |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
801 (find-alternate-file filename)))) |
13182
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
802 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
803 (defun find-alternate-file (filename) |
337 | 804 "Find file FILENAME, select its buffer, kill previous buffer. |
805 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
|
806 \(presumably by mistake), use this command to visit the file you really want." |
337 | 807 (interactive |
808 (let ((file buffer-file-name) | |
809 (file-name nil) | |
810 (file-dir nil)) | |
811 (and file | |
812 (setq file-name (file-name-nondirectory file) | |
813 file-dir (file-name-directory file))) | |
941 | 814 (list (read-file-name |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
815 "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
|
816 (and (buffer-modified-p) (buffer-file-name) |
337 | 817 ;; (not buffer-read-only) |
818 (not (yes-or-no-p (format "Buffer %s is modified; kill anyway? " | |
819 (buffer-name)))) | |
820 (error "Aborted")) | |
821 (let ((obuf (current-buffer)) | |
822 (ofile buffer-file-name) | |
3191
d96fd9315996
(find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents:
3151
diff
changeset
|
823 (onum buffer-file-number) |
d96fd9315996
(find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents:
3151
diff
changeset
|
824 (otrue buffer-file-truename) |
337 | 825 (oname (buffer-name))) |
13037
3946c18462c8
(find-alternate-file): Kill any preexisting ` **lose**' buf.
Richard M. Stallman <rms@gnu.org>
parents:
13032
diff
changeset
|
826 (if (get-buffer " **lose**") |
3946c18462c8
(find-alternate-file): Kill any preexisting ` **lose**' buf.
Richard M. Stallman <rms@gnu.org>
parents:
13032
diff
changeset
|
827 (kill-buffer " **lose**")) |
337 | 828 (rename-buffer " **lose**") |
829 (unwind-protect | |
830 (progn | |
831 (unlock-buffer) | |
15410
559d91fe836a
(find-alternate-file): Don't clear buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents:
15365
diff
changeset
|
832 (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
|
833 (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
|
834 (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
|
835 (find-file filename)) |
337 | 836 (cond ((eq obuf (current-buffer)) |
837 (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
|
838 (setq buffer-file-number onum) |
d96fd9315996
(find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents:
3151
diff
changeset
|
839 (setq buffer-file-truename otrue) |
337 | 840 (lock-buffer) |
841 (rename-buffer oname)))) | |
842 (or (eq (current-buffer) obuf) | |
843 (kill-buffer obuf)))) | |
19305
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
844 |
337 | 845 (defun create-file-buffer (filename) |
846 "Create a suitably named buffer for visiting FILENAME, and return it. | |
847 FILENAME (sans directory) is used unchanged if that name is free; | |
848 otherwise a string <2> or <3> or ... is appended to get an unused name." | |
849 (let ((lastname (file-name-nondirectory filename))) | |
850 (if (string= lastname "") | |
851 (setq lastname filename)) | |
852 (generate-new-buffer lastname))) | |
853 | |
423 | 854 (defun generate-new-buffer (name) |
855 "Create and return a buffer with a name based on NAME. | |
1461 | 856 Choose the buffer's name using `generate-new-buffer-name'." |
423 | 857 (get-buffer-create (generate-new-buffer-name name))) |
858 | |
28325 | 859 (defcustom automount-dir-prefix "^/tmp_mnt/" |
860 "Regexp to match the automounter prefix in a directory name." | |
861 :group 'files | |
862 :type 'regexp) | |
817 | 863 |
1725
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
864 (defvar abbreviated-home-dir nil |
25105 | 865 "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
|
866 |
423 | 867 (defun abbreviate-file-name (filename) |
1461 | 868 "Return a version of FILENAME shortened using `directory-abbrev-alist'. |
423 | 869 This also substitutes \"~\" for the user's home directory. |
1461 | 870 Type \\[describe-variable] directory-abbrev-alist RET for more information." |
817 | 871 ;; 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
|
872 (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
|
873 (string-match automount-dir-prefix filename) |
817 | 874 (file-exists-p (file-name-directory |
875 (substring filename (1- (match-end 0)))))) | |
876 (setq filename (substring filename (1- (match-end 0))))) | |
423 | 877 (let ((tail directory-abbrev-alist)) |
1725
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
878 ;; 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
|
879 ;; abbreviate accordingly. |
423 | 880 (while tail |
881 (if (string-match (car (car tail)) filename) | |
882 (setq filename | |
883 (concat (cdr (car tail)) (substring filename (match-end 0))))) | |
884 (setq tail (cdr tail))) | |
1725
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
885 ;; Compute and save the abbreviated homedir name. |
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
886 ;; 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
|
887 ;; 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
|
888 ;; 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
|
889 ;; 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
|
890 (or abbreviated-home-dir |
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
891 (setq abbreviated-home-dir |
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
892 (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
|
893 (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
|
894 "\\(/\\|$\\)")))) |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
895 |
1725
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
896 ;; If FILENAME starts with the abbreviated homedir, |
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
897 ;; 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
|
898 (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
|
899 ;; 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
|
900 (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
|
901 (= (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
|
902 ;; 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
|
903 ;; 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
|
904 (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
|
905 (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
|
906 (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
|
907 (string-match "^[a-zA-`]:/$" filename))))) |
423 | 908 (setq filename |
2630
47cf3a387530
* files.el (insert-directory): Undo change of March 23;
Jim Blandy <jimb@redhat.com>
parents:
2622
diff
changeset
|
909 (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
|
910 (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
|
911 (substring filename (match-end 0))))) |
423 | 912 filename)) |
913 | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
914 (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
|
915 "*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
|
916 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
|
917 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
|
918 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
|
919 name to this list as a string." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
920 :type '(repeat (string :tag "Name")) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
921 :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
|
922 |
6265
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
923 (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
|
924 "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
|
925 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
|
926 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
|
927 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
|
928 (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
|
929 (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
|
930 (or buf |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
931 (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
|
932 (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
|
933 (save-excursion |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
934 (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
|
935 (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
|
936 (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
|
937 (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
|
938 (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
|
939 found) |
6272
d19db87b8c8e
(find-buffer-visiting): Fix typo in previous change.
Karl Heuer <kwzh@gnu.org>
parents:
6265
diff
changeset
|
940 (let ((number (nthcdr 10 (file-attributes truename))) |
6265
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
941 (list (buffer-list)) found) |
15329
19008fd7774d
(buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents:
15269
diff
changeset
|
942 (and buffer-file-numbers-unique |
19008fd7774d
(buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents:
15269
diff
changeset
|
943 number |
6294
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
944 (while (and (not found) list) |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
945 (save-excursion |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
946 (set-buffer (car list)) |
6866
47bed999969a
(find-buffer-visiting): Don't check buffer-file-number
Richard M. Stallman <rms@gnu.org>
parents:
6780
diff
changeset
|
947 (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
|
948 (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
|
949 ;; 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
|
950 ;; 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
|
951 (file-exists-p buffer-file-name) |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
952 (equal (nthcdr 10 (file-attributes buffer-file-name)) |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
953 number)) |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
954 (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
|
955 (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
|
956 found)))) |
19305
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
957 |
23473
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
958 (defcustom find-file-wildcards t |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
959 "*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
|
960 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
|
961 whose names match the pattern." |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
962 :group 'files |
28325 | 963 :version "20.4" |
23473
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
964 :type 'boolean) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
965 |
24166
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
966 (defun find-file-noselect (filename &optional nowarn rawfile wildcards) |
337 | 967 "Read file FILENAME into a buffer and return the buffer. |
968 If a buffer exists visiting FILENAME, return that one, but | |
969 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
|
970 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
|
971 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
|
972 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
|
973 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
|
974 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
|
975 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
|
976 that are visiting the various files." |
817 | 977 (setq filename |
978 (abbreviate-file-name | |
979 (expand-file-name filename))) | |
337 | 980 (if (file-directory-p filename) |
28259
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
981 (or (and find-file-run-dired |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
982 (run-hook-with-args-until-success |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
983 'find-directory-functions |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
984 (if find-file-visit-truename |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
985 (abbreviate-file-name (file-truename filename)) |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
986 filename))) |
a71efaa2008d
(find-file-run-dired): Update docstring.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
28099
diff
changeset
|
987 (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
|
988 (if (and wildcards |
3d25e1fc71aa
(find-file-noselect): Do wildcard processing only
Richard M. Stallman <rms@gnu.org>
parents:
24061
diff
changeset
|
989 find-file-wildcards |
23983
f81108c27669
(find-file-noselect): Let /: suppress wildcard matching.
Richard M. Stallman <rms@gnu.org>
parents:
23942
diff
changeset
|
990 (not (string-match "\\`/:" filename)) |
23473
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
991 (string-match "[[*?]" filename)) |
25641
952461b8fdaf
(find-file-noselect): Catch errors in file-expand-wildcards,
Richard M. Stallman <rms@gnu.org>
parents:
25604
diff
changeset
|
992 (let ((files (condition-case nil |
952461b8fdaf
(find-file-noselect): Catch errors in file-expand-wildcards,
Richard M. Stallman <rms@gnu.org>
parents:
25604
diff
changeset
|
993 (file-expand-wildcards filename t) |
952461b8fdaf
(find-file-noselect): Catch errors in file-expand-wildcards,
Richard M. Stallman <rms@gnu.org>
parents:
25604
diff
changeset
|
994 (error (list filename)))) |
23473
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
995 (find-file-wildcards nil)) |
23983
f81108c27669
(find-file-noselect): Let /: suppress wildcard matching.
Richard M. Stallman <rms@gnu.org>
parents:
23942
diff
changeset
|
996 (if (null files) |
25641
952461b8fdaf
(find-file-noselect): Catch errors in file-expand-wildcards,
Richard M. Stallman <rms@gnu.org>
parents:
25604
diff
changeset
|
997 (find-file-noselect filename) |
28325 | 998 (car (mapcar #'find-file-noselect files)))) |
23473
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
999 (let* ((buf (get-file-buffer filename)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1000 (truename (abbreviate-file-name (file-truename filename))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1001 (number (nthcdr 10 (file-attributes truename))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1002 ;; 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
|
1003 (other (and (not buf) (find-buffer-visiting filename)))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1004 ;; 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
|
1005 (if other |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1006 (progn |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1007 (or nowarn |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1008 (string-equal filename (buffer-file-name other)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1009 (message "%s and %s are the same file" |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1010 filename (buffer-file-name other))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1011 ;; Optionally also find that buffer. |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1012 (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
|
1013 (setq buf other)))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1014 (if buf |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1015 ;; We are using an existing buffer. |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1016 (progn |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1017 (or nowarn |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1018 (verify-visited-file-modtime buf) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1019 (cond ((not (file-exists-p filename)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1020 (error "File %s no longer exists!" filename)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1021 ;; Certain files should be reverted automatically |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1022 ;; 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
|
1023 ((and (not (buffer-modified-p buf)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1024 (let ((tail revert-without-query) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1025 (found nil)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1026 (while tail |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1027 (if (string-match (car tail) filename) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1028 (setq found t)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1029 (setq tail (cdr tail))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1030 found)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1031 (with-current-buffer buf |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1032 (message "Reverting file %s..." filename) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1033 (revert-buffer t t) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1034 (message "Reverting file %s...done" filename))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1035 ((yes-or-no-p |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1036 (if (string= (file-name-nondirectory filename) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1037 (buffer-name buf)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1038 (format |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1039 (if (buffer-modified-p buf) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1040 "File %s changed on disk. Discard your edits? " |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1041 "File %s changed on disk. Reread from disk? ") |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1042 (file-name-nondirectory filename)) |
22403
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1043 (format |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1044 (if (buffer-modified-p buf) |
23473
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1045 "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
|
1046 "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
|
1047 (file-name-nondirectory filename) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1048 (buffer-name buf)))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1049 (with-current-buffer buf |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1050 (revert-buffer t t))))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1051 (with-current-buffer buf |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1052 (when (not (eq (not (null rawfile)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1053 (not (null find-file-literally)))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1054 (if (buffer-modified-p) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1055 (if (y-or-n-p (if rawfile |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1056 "Save file and revisit literally? " |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1057 "Save file and revisit non-literally? ")) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1058 (progn |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1059 (save-buffer) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1060 (find-file-noselect-1 buf filename nowarn |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1061 rawfile truename number)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1062 (if (y-or-n-p (if rawfile |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1063 "Discard your edits and revisit file literally? " |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1064 "Discard your edits and revisit file non-literally? ")) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1065 (find-file-noselect-1 buf filename nowarn |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1066 rawfile truename number) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1067 (error (if rawfile "File already visited non-literally" |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1068 "File already visited literally")))) |
22403
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1069 (if (y-or-n-p (if rawfile |
23473
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1070 "Revisit file literally? " |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1071 "Revisit file non-literally? ")) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1072 (find-file-noselect-1 buf filename nowarn |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1073 rawfile truename number) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1074 (error (if rawfile "File already visited non-literally" |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1075 "File already visited literally")))))) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1076 ;; Return the buffer we are using. |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1077 buf) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1078 ;; Create a new buffer. |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1079 (setq buf (create-file-buffer filename)) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1080 (set-buffer-major-mode buf) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1081 ;; 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
|
1082 (find-file-noselect-1 buf filename nowarn |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
1083 rawfile truename number)))))) |
22403
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1084 |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1085 (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
|
1086 (let ((inhibit-read-only t) |
7e79814e7263
(find-file-noselect): Delete unused local var `error'.
Richard M. Stallman <rms@gnu.org>
parents:
22465
diff
changeset
|
1087 error) |
22403
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1088 (with-current-buffer buf |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1089 (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
|
1090 ;; 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
|
1091 ;; text representation. |
22738
d35510185a2d
(find-file-noselect-1): Use kill-local-variable on
Richard M. Stallman <rms@gnu.org>
parents:
22582
diff
changeset
|
1092 (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
|
1093 (erase-buffer) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1094 (and (default-value 'enable-multibyte-characters) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1095 (not rawfile) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1096 (set-buffer-multibyte t)) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1097 (if rawfile |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1098 (condition-case () |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1099 (insert-file-contents-literally filename t) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1100 (file-error |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1101 (when (and (file-exists-p filename) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1102 (not (file-readable-p filename))) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1103 (kill-buffer buf) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1104 (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
|
1105 filename))) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1106 ;; Unconditionally set error |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1107 (setq error t))) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1108 (condition-case () |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1109 (insert-file-contents filename t) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1110 (file-error |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1111 (when (and (file-exists-p filename) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1112 (not (file-readable-p filename))) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1113 (kill-buffer buf) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1114 (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
|
1115 filename))) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1116 ;; 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
|
1117 (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
|
1118 ;; If they fail too, set error. |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1119 (setq error t))))) |
24653
0d75a033fceb
(find-file-noselect-1): If buffer-file-name has changed
Karl Heuer <kwzh@gnu.org>
parents:
24217
diff
changeset
|
1120 ;; 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
|
1121 (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
|
1122 (setq buffer-file-truename truename) |
24727 | 1123 (setq buffer-file-truename |
1124 (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
|
1125 (setq buffer-file-number number) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1126 ;; 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
|
1127 ;; the file was found in. |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1128 (and (eq system-type 'vax-vms) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1129 (let (logical) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1130 (if (string-match ":" (file-name-directory filename)) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1131 (setq logical (substring (file-name-directory filename) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1132 0 (match-beginning 0)))) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1133 (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
|
1134 (setq buffer-file-name buffer-file-truename)) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1135 (if find-file-visit-truename |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1136 (setq buffer-file-name |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1137 (setq filename |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1138 (expand-file-name buffer-file-truename)))) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1139 ;; 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
|
1140 (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
|
1141 ;; 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
|
1142 ;; 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
|
1143 (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
|
1144 (progn |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1145 (make-local-variable 'backup-inhibited) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1146 (setq backup-inhibited t))) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1147 (if rawfile |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1148 (progn |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1149 (set-buffer-multibyte nil) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1150 (setq buffer-file-coding-system 'no-conversion) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1151 (make-local-variable 'find-file-literally) |
4b5a49aa186a
(find-file-noselect-1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22338
diff
changeset
|
1152 (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
|
1153 (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
|
1154 (current-buffer)))) |
19305
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1155 |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1156 (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
|
1157 "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
|
1158 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
|
1159 to Emacs features such as format decoding, character code |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1160 conversion, find-file-hooks, automatic uncompression, etc. |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1161 |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1162 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
|
1163 (let ((format-alist nil) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1164 (after-insert-file-functions nil) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1165 (coding-system-for-read 'no-conversion) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1166 (coding-system-for-write 'no-conversion) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1167 (jka-compr-compression-info-list nil) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1168 (find-buffer-file-type-function |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1169 (if (fboundp 'find-buffer-file-type) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1170 (symbol-function 'find-buffer-file-type) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1171 nil))) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1172 (unwind-protect |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1173 (progn |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1174 (fset 'find-buffer-file-type (lambda (filename) t)) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1175 (insert-file-contents filename visit beg end replace)) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1176 (if find-buffer-file-type-function |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1177 (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
|
1178 (fmakunbound 'find-buffer-file-type))))) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1179 |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1180 (defun insert-file-literally (filename) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1181 "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
|
1182 |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1183 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
|
1184 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
|
1185 \(Its calling sequence is different; see its documentation)." |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1186 (interactive "*fInsert file literally: ") |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1187 (if (file-directory-p filename) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1188 (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
|
1189 filename))) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1190 (let ((tem (insert-file-contents-literally filename))) |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1191 (push-mark (+ (point) (car (cdr tem)))))) |
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 (defvar find-file-literally nil |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1194 "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
|
1195 This is a permanent local.") |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1196 (put 'find-file-literally 'permanent-local t) |
18676
3980293d3bbd
(find-file-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18466
diff
changeset
|
1197 |
28325 | 1198 (defun find-file-literally (filename) |
18676
3980293d3bbd
(find-file-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18466
diff
changeset
|
1199 "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
|
1200 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
|
1201 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
|
1202 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
|
1203 and local variable specifications in the file are ignored. |
19305
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1204 Automatic uncompression is also disabled. |
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 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
|
1207 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
|
1208 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
|
1209 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
|
1210 |
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1211 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
|
1212 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
|
1213 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
|
1214 (interactive "FFind file literally: ") |
19305
030c40d12288
(insert-file-literally): New command.
Richard M. Stallman <rms@gnu.org>
parents:
19199
diff
changeset
|
1215 (switch-to-buffer (find-file-noselect filename nil t))) |
337 | 1216 |
8650
deb008af7049
(after-find-file-from-revert-buffer): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
8618
diff
changeset
|
1217 (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
|
1218 |
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
|
1219 (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
|
1220 after-find-file-from-revert-buffer |
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
1221 nomodes) |
337 | 1222 "Called after finding a file and by the default revert function. |
1223 Sets buffer mode, parses local variables. | |
1212
de70f50101c0
(after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents:
1182
diff
changeset
|
1224 Optional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an |
337 | 1225 error in reading the file. WARN non-nil means warn if there |
1226 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
|
1227 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
|
1228 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
|
1229 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
|
1230 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
|
1231 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
|
1232 unless NOMODES is non-nil." |
337 | 1233 (setq buffer-read-only (not (file-writable-p buffer-file-name))) |
1234 (if noninteractive | |
1235 nil | |
1236 (let* (not-serious | |
1237 (msg | |
1238 (cond ((and error (file-attributes buffer-file-name)) | |
1239 (setq buffer-read-only t) | |
25753
4e71424cd40b
(after-find-file): When visiting a backup file, make it read-only.
Richard M. Stallman <rms@gnu.org>
parents:
25641
diff
changeset
|
1240 "File exists, but cannot be read") |
337 | 1241 ((not buffer-read-only) |
1242 (if (and warn | |
26810
5fc1490f5900
(after-find-file): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
26779
diff
changeset
|
1243 ;; No need to warn if buffer is auto-saved |
5fc1490f5900
(after-find-file): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
26779
diff
changeset
|
1244 ;; under the name of the visited file. |
5fc1490f5900
(after-find-file): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
26779
diff
changeset
|
1245 (not (and buffer-file-name |
5fc1490f5900
(after-find-file): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
26779
diff
changeset
|
1246 auto-save-visited-file-name)) |
5fc1490f5900
(after-find-file): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
26779
diff
changeset
|
1247 (file-newer-than-file-p (or buffer-auto-save-file-name |
26779
2a78c861578f
(after-find-file): Use auto-save-visited-file-name if set.
Gerd Moellmann <gerd@gnu.org>
parents:
26745
diff
changeset
|
1248 (make-auto-save-file-name)) |
337 | 1249 buffer-file-name)) |
15050
7cc3bad1b93e
(after-find-file): Mention file name in "auto save is newer" message.
Richard M. Stallman <rms@gnu.org>
parents:
15010
diff
changeset
|
1250 (format "%s has auto save data; consider M-x recover-file" |
7cc3bad1b93e
(after-find-file): Mention file name in "auto save is newer" message.
Richard M. Stallman <rms@gnu.org>
parents:
15010
diff
changeset
|
1251 (file-name-nondirectory buffer-file-name)) |
337 | 1252 (setq not-serious t) |
1253 (if error "(New file)" nil))) | |
1254 ((not error) | |
1255 (setq not-serious t) | |
1256 "Note: file is write protected") | |
1257 ((file-attributes (directory-file-name default-directory)) | |
1258 "File not found and directory write-protected") | |
1537
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
1259 ((file-exists-p (file-name-directory buffer-file-name)) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
1260 (setq buffer-read-only nil)) |
337 | 1261 (t |
423 | 1262 (setq buffer-read-only nil) |
1537
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
1263 (if (file-exists-p (file-name-directory (directory-file-name (file-name-directory buffer-file-name)))) |
23842
8f7308ba6600
(after-find-file): Message fix.
Karl Heuer <kwzh@gnu.org>
parents:
23779
diff
changeset
|
1264 "Use M-x make-directory RET RET to create the directory" |
8f7308ba6600
(after-find-file): Message fix.
Karl Heuer <kwzh@gnu.org>
parents:
23779
diff
changeset
|
1265 "Use C-u M-x make-directory RET RET to create directory and its parents"))))) |
337 | 1266 (if msg |
1267 (progn | |
1268 (message msg) | |
1269 (or not-serious (sit-for 1 nil t))))) | |
1212
de70f50101c0
(after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents:
1182
diff
changeset
|
1270 (if (and auto-save-default (not noauto)) |
337 | 1271 (auto-save-mode t))) |
25753
4e71424cd40b
(after-find-file): When visiting a backup file, make it read-only.
Richard M. Stallman <rms@gnu.org>
parents:
25641
diff
changeset
|
1272 ;; Make people do a little extra work (C-x C-q) |
4e71424cd40b
(after-find-file): When visiting a backup file, make it read-only.
Richard M. Stallman <rms@gnu.org>
parents:
25641
diff
changeset
|
1273 ;; before altering a backup file. |
4e71424cd40b
(after-find-file): When visiting a backup file, make it read-only.
Richard M. Stallman <rms@gnu.org>
parents:
25641
diff
changeset
|
1274 (if (backup-file-name-p buffer-file-name) |
4e71424cd40b
(after-find-file): When visiting a backup file, make it read-only.
Richard M. Stallman <rms@gnu.org>
parents:
25641
diff
changeset
|
1275 (setq buffer-read-only t)) |
13857
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
1276 (if nomodes |
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
1277 nil |
25220
08b62bd09c92
(after-find-file): Disable View mode if buffer is no
Karl Heuer <kwzh@gnu.org>
parents:
25105
diff
changeset
|
1278 (and view-read-only view-mode |
08b62bd09c92
(after-find-file): Disable View mode if buffer is no
Karl Heuer <kwzh@gnu.org>
parents:
25105
diff
changeset
|
1279 (view-mode-disable)) |
13857
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
1280 (normal-mode t) |
18316
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
1281 (if (and buffer-read-only view-read-only |
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
1282 (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
|
1283 (view-mode-enter)) |
13857
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
1284 (run-hooks 'find-file-hooks))) |
337 | 1285 |
1286 (defun normal-mode (&optional find-file) | |
1287 "Choose the major mode for this buffer automatically. | |
1288 Also sets up any specified local variables of the file. | |
1289 Uses the visited file name, the -*- line, and the local variables spec. | |
1290 | |
1291 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
|
1292 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
|
1293 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
|
1294 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
|
1295 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
|
1296 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
|
1297 |
7f5af9d1766d
(hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents:
23606
diff
changeset
|
1298 `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
|
1299 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
|
1300 in that case, this function acts as if `enable-local-variables' were t." |
337 | 1301 (interactive) |
1302 (or find-file (funcall (or default-major-mode 'fundamental-mode))) | |
1303 (condition-case err | |
1304 (set-auto-mode) | |
1305 (error (message "File mode specification error: %s" | |
1306 (prin1-to-string err)))) | |
1307 (condition-case err | |
566 | 1308 (let ((enable-local-variables (or (not find-file) |
1309 enable-local-variables))) | |
1310 (hack-local-variables)) | |
337 | 1311 (error (message "File local-variables error: %s" |
1312 (prin1-to-string err))))) | |
1313 | |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1314 (defvar auto-mode-alist |
29089 | 1315 (mapc |
1316 (lambda (elt) | |
1317 (cons (purecopy (car elt)) (cdr elt))) | |
1318 '(("\\.te?xt\\'" . text-mode) | |
1319 ("\\.c\\'" . c-mode) | |
1320 ("\\.h\\'" . c-mode) | |
1321 ("\\.tex\\'" . tex-mode) | |
1322 ("\\.ltx\\'" . latex-mode) | |
1323 ("\\.el\\'" . emacs-lisp-mode) | |
1324 ("\\.scm\\'" . scheme-mode) | |
1325 ("\\.l\\'" . lisp-mode) | |
1326 ("\\.lisp\\'" . lisp-mode) | |
1327 ("\\.f\\'" . fortran-mode) | |
1328 ("\\.F\\'" . fortran-mode) | |
1329 ("\\.for\\'" . fortran-mode) | |
1330 ("\\.p\\'" . pascal-mode) | |
1331 ("\\.pas\\'" . pascal-mode) | |
1332 ("\\.ad[abs]\\'" . ada-mode) | |
1333 ("\\.\\([pP][Llm]\\|al\\)\\'" . perl-mode) | |
1334 ("\\.s?html?\\'" . html-mode) | |
1335 ("\\.cc\\'" . c++-mode) | |
1336 ("\\.hh\\'" . c++-mode) | |
1337 ("\\.hpp\\'" . c++-mode) | |
1338 ("\\.C\\'" . c++-mode) | |
1339 ("\\.H\\'" . c++-mode) | |
1340 ("\\.cpp\\'" . c++-mode) | |
1341 ("\\.cxx\\'" . c++-mode) | |
1342 ("\\.hxx\\'" . c++-mode) | |
1343 ("\\.c\\+\\+\\'" . c++-mode) | |
1344 ("\\.h\\+\\+\\'" . c++-mode) | |
1345 ("\\.m\\'" . objc-mode) | |
1346 ("\\.java\\'" . java-mode) | |
1347 ("\\.mk\\'" . makefile-mode) | |
1348 ("\\(M\\|m\\|GNUm\\)akefile\\(\\.in\\)?\\'" . makefile-mode) | |
1349 ("\\.am\\'" . makefile-mode) ;For Automake. | |
566 | 1350 ;;; Less common extensions come here |
1351 ;;; so more common ones above are found faster. | |
29089 | 1352 ("\\.texinfo\\'" . texinfo-mode) |
1353 ("\\.te?xi\\'" . texinfo-mode) | |
1354 ("\\.s\\'" . asm-mode) | |
1355 ("\\.S\\'" . asm-mode) | |
1356 ("\\.asm\\'" . asm-mode) | |
1357 ("ChangeLog\\'" . change-log-mode) | |
1358 ("change\\.log\\'" . change-log-mode) | |
1359 ("changelo\\'" . change-log-mode) | |
1360 ("ChangeLog\\.[0-9]+\\'" . change-log-mode) | |
1361 ;; for MSDOS and MS-Windows (which are case-insensitive) | |
1362 ("changelog\\'" . change-log-mode) | |
1363 ("changelog\\.[0-9]+\\'" . change-log-mode) | |
1364 ("\\$CHANGE_LOG\\$\\.TXT" . change-log-mode) | |
1365 ("\\.scm\\.[0-9]*\\'" . scheme-mode) | |
1366 ("\\.[ck]?sh\\'\\|\\.shar\\'\\|/\\.z?profile\\'" . sh-mode) | |
1367 ("\\(/\\|\\`\\)\\.\\(bash_profile\\|z?login\\|bash_login\\|z?logout\\)\\'" . sh-mode) | |
1368 ("\\(/\\|\\`\\)\\.\\(bash_logout\\|shrc\\|[kz]shrc\\|bashrc\\|t?cshrc\\|esrc\\)\\'" . sh-mode) | |
1369 ("\\(/\\|\\`\\)\\.\\([kz]shenv\\|xinitrc\\|startxrc\\|xsession\\)\\'" . sh-mode) | |
1370 ("\\.m?spec$" . sh-mode) | |
1371 ("\\.mm\\'" . nroff-mode) | |
1372 ("\\.me\\'" . nroff-mode) | |
1373 ("\\.ms\\'" . nroff-mode) | |
1374 ("\\.man\\'" . nroff-mode) | |
1375 ("\\.\\(u?lpc\\|pike\\|pmod\\)\\'" . pike-mode) | |
12554
fdc58e7e37c2
(auto-mode-alist): Move .scm.[0-9] before nroff-mode.
Karl Heuer <kwzh@gnu.org>
parents:
12438
diff
changeset
|
1376 ;;; The following should come after the ChangeLog pattern |
fdc58e7e37c2
(auto-mode-alist): Move .scm.[0-9] before nroff-mode.
Karl Heuer <kwzh@gnu.org>
parents:
12438
diff
changeset
|
1377 ;;; for the sake of ChangeLog.1, etc. |
fdc58e7e37c2
(auto-mode-alist): Move .scm.[0-9] before nroff-mode.
Karl Heuer <kwzh@gnu.org>
parents:
12438
diff
changeset
|
1378 ;;; and after the .scm.[0-9] pattern too. |
29089 | 1379 ("\\.[12345678]\\'" . nroff-mode) |
1380 ("\\.TeX\\'" . tex-mode) | |
1381 ("\\.sty\\'" . latex-mode) | |
1382 ("\\.cls\\'" . latex-mode) ;LaTeX 2e class | |
1383 ("\\.clo\\'" . latex-mode) ;LaTeX 2e class option | |
1384 ("\\.bbl\\'" . latex-mode) | |
1385 ("\\.bib\\'" . bibtex-mode) | |
1386 ("\\.sql\\'" . sql-mode) | |
1387 ("\\.m4\\'" . m4-mode) | |
1388 ("\\.mc\\'" . m4-mode) | |
1389 ("\\.mf\\'" . metafont-mode) | |
1390 ("\\.mp\\'" . metapost-mode) | |
1391 ("\\.vhdl?\\'" . vhdl-mode) | |
1392 ("\\.article\\'" . text-mode) | |
1393 ("\\.letter\\'" . text-mode) | |
1394 ("\\.tcl\\'" . tcl-mode) | |
1395 ("\\.exp\\'" . tcl-mode) | |
1396 ("\\.itcl\\'" . tcl-mode) | |
1397 ("\\.itk\\'" . tcl-mode) | |
1398 ("\\.icn\\'" . icon-mode) | |
1399 ("\\.sim\\'" . simula-mode) | |
1400 ("\\.mss\\'" . scribe-mode) | |
1401 ("\\.f90\\'" . f90-mode) | |
1402 ("\\.pro\\'" . idlwave-mode) | |
1403 ("\\.lsp\\'" . lisp-mode) | |
1404 ("\\.awk\\'" . awk-mode) | |
1405 ("\\.prolog\\'" . prolog-mode) | |
1406 ("\\.tar\\'" . tar-mode) | |
1407 ("\\.\\(arc\\|zip\\|lzh\\|zoo\\|jar\\)\\'" . archive-mode) | |
1408 ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|JAR\\)\\'" . archive-mode) | |
1409 ;; Mailer puts message to be edited in | |
1410 ;; /tmp/Re.... or Message | |
1411 ("\\`/tmp/Re" . text-mode) | |
1412 ("/Message[0-9]*\\'" . text-mode) | |
1413 ("/drafts/[0-9]+\\'" . mh-letter-mode) | |
1414 ("\\.zone\\'" . zone-mode) | |
1415 ;; some news reader is reported to use this | |
1416 ("\\`/tmp/fol/" . text-mode) | |
1417 ("\\.y\\'" . c-mode) | |
1418 ("\\.lex\\'" . c-mode) | |
1419 ("\\.oak\\'" . scheme-mode) | |
1420 ("\\.sgml?\\'" . sgml-mode) | |
1421 ("\\.xml\\'" . sgml-mode) | |
1422 ("\\.dtd\\'" . sgml-mode) | |
1423 ("\\.ds\\(ss\\)?l\\'" . dsssl-mode) | |
1424 ("\\.idl\\'" . idl-mode) | |
1425 ;; .emacs following a directory delimiter | |
1426 ;; in Unix, MSDOG or VMS syntax. | |
1427 ("[]>:/\\]\\..*emacs\\'" . emacs-lisp-mode) | |
1428 ("\\`\\..*emacs\\'" . emacs-lisp-mode) | |
1429 ;; _emacs following a directory delimiter | |
1430 ;; in MsDos syntax | |
1431 ("[:/]_emacs\\'" . emacs-lisp-mode) | |
1432 ("/crontab\\.X*[0-9]+\\'" . shell-script-mode) | |
1433 ("\\.ml\\'" . lisp-mode) | |
1434 ("\\.asn$" . snmp-mode) | |
1435 ("\\.mib$" . snmp-mode) | |
1436 ("\\.smi$" . snmp-mode) | |
1437 ("\\.as2$" . snmpv2-mode) | |
1438 ("\\.mi2$" . snmpv2-mode) | |
1439 ("\\.sm2$" . snmpv2-mode) | |
1440 ("\\.\\(diffs?\\|patch\\|rej\\)\\'" . diff-mode) | |
1441 ("\\.[eE]?[pP][sS]$" . ps-mode) | |
1442 ("configure\\.in\\'" . autoconf-mode) | |
1443 ("BROWSE\\'" . ebrowse-tree-mode) | |
1444 ("\\.ebrowse\\'" . ebrowse-tree-mode))) | |
1445 "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
|
1446 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
|
1447 \(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
|
1448 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
|
1449 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
|
1450 |
13106af26190
(auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
9601
diff
changeset
|
1451 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
|
1452 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
|
1453 REGEXP and search the list again for another match.") |
566 | 1454 |
21069
e99cb5736904
(auto-mode-alist): Recognize zone-mode.
Richard M. Stallman <rms@gnu.org>
parents:
21046
diff
changeset
|
1455 |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
1456 (defvar interpreter-mode-alist |
29089 | 1457 (mapc |
1458 (lambda (l) | |
1459 (cons (purecopy (car l)) (cdr l))) | |
1460 '(("perl" . perl-mode) | |
1461 ("perl5" . perl-mode) | |
1462 ("miniperl" . perl-mode) | |
1463 ("wish" . tcl-mode) | |
1464 ("wishx" . tcl-mode) | |
1465 ("tcl" . tcl-mode) | |
1466 ("tclsh" . tcl-mode) | |
1467 ("awk" . awk-mode) | |
1468 ("mawk" . awk-mode) | |
1469 ("nawk" . awk-mode) | |
1470 ("gawk" . awk-mode) | |
1471 ("scm" . scheme-mode) | |
1472 ("ash" . sh-mode) | |
1473 ("bash" . sh-mode) | |
29108
c3344026e42e
(interpreter-mode-alist): Add `bash2'.
Gerd Moellmann <gerd@gnu.org>
parents:
29089
diff
changeset
|
1474 ("bash2" . sh-mode) |
29089 | 1475 ("csh" . sh-mode) |
1476 ("dtksh" . sh-mode) | |
1477 ("es" . sh-mode) | |
1478 ("itcsh" . sh-mode) | |
1479 ("jsh" . sh-mode) | |
1480 ("ksh" . sh-mode) | |
1481 ("oash" . sh-mode) | |
1482 ("pdksh" . sh-mode) | |
1483 ("rc" . sh-mode) | |
1484 ("rpm" . sh-mode) | |
1485 ("sh" . sh-mode) | |
1486 ("sh5" . sh-mode) | |
1487 ("tcsh" . sh-mode) | |
1488 ("wksh" . sh-mode) | |
1489 ("wsh" . sh-mode) | |
1490 ("zsh" . sh-mode) | |
1491 ("tail" . text-mode) | |
1492 ("more" . text-mode) | |
1493 ("less" . text-mode) | |
1494 ("pg" . text-mode) | |
1495 ("make" . makefile-mode) ; Debian uses this | |
1496 ("guile" . scheme-mode) | |
1497 ("clisp" . lisp-mode))) | |
5956
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1498 "Alist mapping interpreter names to major modes. |
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1499 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
|
1500 Each element looks like (INTERPRETER . MODE). |
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1501 The car of each element is compared with |
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1502 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
|
1503 If it matches, mode MODE is selected.") |
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1504 |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
1505 (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
|
1506 "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
|
1507 |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
1508 (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
|
1509 "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
|
1510 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
|
1511 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
|
1512 |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1513 (defun set-auto-mode (&optional just-from-file-name) |
337 | 1514 "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
|
1515 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
|
1516 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
|
1517 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
|
1518 `interpreter-mode-alist'. |
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1519 |
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1520 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
|
1521 Local Variables section of the file; for that, use `hack-local-variables'. |
566 | 1522 |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1523 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
|
1524 -*- mode tag. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1525 |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1526 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
|
1527 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
|
1528 and we don't even do that unless it would come from the file name." |
337 | 1529 ;; 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
|
1530 (let (beg end done modes) |
337 | 1531 (save-excursion |
1532 (goto-char (point-min)) | |
1533 (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
|
1534 (and enable-local-variables |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1535 ;; 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
|
1536 ;; 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
|
1537 (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
|
1538 (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
|
1539 (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
|
1540 (buffer-name)))) |
11189
a2a85a29cdd6
(set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11180
diff
changeset
|
1541 (while (let ((sufs inhibit-first-line-modes-suffixes)) |
a2a85a29cdd6
(set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11180
diff
changeset
|
1542 (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
|
1543 (setq sufs (cdr sufs))) |
a2a85a29cdd6
(set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11180
diff
changeset
|
1544 sufs) |
a2a85a29cdd6
(set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11180
diff
changeset
|
1545 (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
|
1546 (while (and temp |
11180
7a9dceb0fb96
(inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
11160
diff
changeset
|
1547 (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
|
1548 (setq temp (cdr temp))) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1549 (not temp)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1550 (search-forward "-*-" (save-excursion |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1551 ;; If the file begins with "#!" |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1552 ;; (exec interpreter magic), look |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1553 ;; 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
|
1554 ;; lines. You cannot necessarily |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1555 ;; 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
|
1556 ;; 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
|
1557 ;; the interpreter invocation. |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1558 (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
|
1559 (point)) t) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1560 (progn |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1561 (skip-chars-forward " \t") |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1562 (setq beg (point)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1563 (search-forward "-*-" |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1564 (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
|
1565 t)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1566 (progn |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1567 (forward-char -3) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1568 (skip-chars-backward " \t") |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1569 (setq end (point)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1570 (goto-char beg) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1571 (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
|
1572 ;; Find all specifications for the `mode:' variable |
6322 | 1573 ;; 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
|
1574 (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
|
1575 (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
|
1576 (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
|
1577 (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
|
1578 (skip-chars-forward " \t") |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1579 (setq beg (point)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1580 (if (search-forward ";" end t) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1581 (forward-char -1) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1582 (goto-char end)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1583 (skip-chars-backward " \t") |
13496
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1584 (setq modes (cons (intern (concat (downcase (buffer-substring beg (point))) "-mode")) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1585 modes))) |
4699
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1586 ;; Simple -*-MODE-*- case. |
13496
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1587 (setq modes (cons (intern (concat (downcase (buffer-substring beg end)) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1588 "-mode")) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1589 modes)))))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1590 ;; 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
|
1591 ;; outside the save-excursion. |
18819
881a46c98ddf
(set-auto-mode): If -*- line specifies a mode,
Richard M. Stallman <rms@gnu.org>
parents:
18676
diff
changeset
|
1592 (when modes |
881a46c98ddf
(set-auto-mode): If -*- line specifies a mode,
Richard M. Stallman <rms@gnu.org>
parents:
18676
diff
changeset
|
1593 (unless just-from-file-name |
29089 | 1594 (mapc 'funcall (nreverse modes))) |
18819
881a46c98ddf
(set-auto-mode): If -*- line specifies a mode,
Richard M. Stallman <rms@gnu.org>
parents:
18676
diff
changeset
|
1595 (setq done t)) |
13496
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1596 ;; 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
|
1597 (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
|
1598 (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
|
1599 (keep-going t)) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1600 ;; 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
|
1601 (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
|
1602 (while keep-going |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1603 (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
|
1604 (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
|
1605 (mode nil)) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1606 ;; 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
|
1607 (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
|
1608 (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
|
1609 (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
|
1610 (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
|
1611 (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
|
1612 (nth 2 (car alist))) |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
1613 (setq mode (car (cdr (car alist))) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
1614 name (substring name 0 (match-beginning 0)) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
1615 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
|
1616 (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
|
1617 keep-going nil))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1618 (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
|
1619 (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
|
1620 ;; 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
|
1621 ;; 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
|
1622 ;; 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
|
1623 ;; 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
|
1624 ;; 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
|
1625 (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
|
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 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
|
1628 ;; 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
|
1629 ;; 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
|
1630 ;; 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
|
1631 (let ((interpreter |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1632 (save-excursion |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1633 (goto-char (point-min)) |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
1634 (if (looking-at "#![ \t]?\\([^ \t\n]*\ |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
1635 /bin/env[ \t]\\)?\\([^ \t\n]+\\)") |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
1636 (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
|
1637 ""))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1638 elt) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1639 ;; 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
|
1640 (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
|
1641 interpreter-mode-alist)) |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1642 (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
|
1643 (if elt |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1644 (funcall (cdr elt)))))))))))) |
337 | 1645 |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1646 (defun hack-local-variables-prop-line () |
28325 | 1647 "Set local variables specified in the -*- line. |
1648 Ignore any specification for `mode:' and `coding:'; | |
1649 `set-auto-mode' should already have handled `mode:', | |
1650 `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
|
1651 (save-excursion |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1652 (goto-char (point-min)) |
6575
9aba6be8e460
(hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents:
6574
diff
changeset
|
1653 (let ((result nil) |
23657
7f5af9d1766d
(hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents:
23606
diff
changeset
|
1654 (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
|
1655 (enable-local-variables |
7f5af9d1766d
(hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents:
23606
diff
changeset
|
1656 (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
|
1657 ;; Parse the -*- line into the `result' alist. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1658 (cond ((not (search-forward "-*-" end t)) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1659 ;; doesn't have one. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1660 nil) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1661 ((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
|
1662 ;; Simple form: "-*- MODENAME -*-". Already handled. |
9aba6be8e460
(hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents:
6574
diff
changeset
|
1663 nil) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1664 (t |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1665 ;; Hairy form: '-*-' [ <variable> ':' <value> ';' ]* '-*-' |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1666 ;; (last ";" is optional). |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1667 (save-excursion |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1668 (if (search-forward "-*-" end t) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1669 (setq end (- (point) 3)) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1670 (error "-*- not terminated before end of line"))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1671 (while (< (point) end) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1672 (or (looking-at "[ \t]*\\([^ \t\n:]+\\)[ \t]*:[ \t]*") |
28325 | 1673 (error "Malformed -*- line")) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1674 (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
|
1675 ;; 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
|
1676 ;; 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
|
1677 ;; 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
|
1678 (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
|
1679 (match-beginning 1) |
5d44c48f3b7b
(hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents:
12050
diff
changeset
|
1680 (match-end 1)))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1681 (val (save-restriction |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1682 (narrow-to-region (point) end) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1683 (read (current-buffer))))) |
16440
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1684 ;; It is traditional to ignore |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1685 ;; 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
|
1686 ;; so we must do that here as well. |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1687 ;; 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
|
1688 ;; 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
|
1689 (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
|
1690 (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
|
1691 (setq result (cons (cons key val) result))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1692 (skip-chars-forward " \t;"))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1693 (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
|
1694 |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1695 (if (and result |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1696 (or (eq enable-local-variables t) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1697 (and enable-local-variables |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1698 (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
|
1699 (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
|
1700 (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
|
1701 (error |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1702 ;; 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
|
1703 ;; 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
|
1704 ;; 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
|
1705 (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
|
1706 (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
|
1707 (error |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1708 (switch-to-buffer-other-frame (current-buffer)))))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1709 (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
|
1710 (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
|
1711 (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
|
1712 (while result |
104a97493dcc
(hack-local-variables-prop-line): Bind enable-local-eval.
Richard M. Stallman <rms@gnu.org>
parents:
15329
diff
changeset
|
1713 (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
|
1714 (setq result (cdr result)))))))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1715 |
10169
04425b872c5b
(hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents:
10149
diff
changeset
|
1716 (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
|
1717 "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
|
1718 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
|
1719 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
|
1720 |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1721 (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
|
1722 "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
|
1723 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
|
1724 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
|
1725 (unless mode-only |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1726 (hack-local-variables-prop-line)) |
337 | 1727 ;; 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
|
1728 (let (mode-specified |
7f5af9d1766d
(hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents:
23606
diff
changeset
|
1729 (enable-local-variables |
7f5af9d1766d
(hack-local-variables): Test local-enable-local-variables.
Karl Heuer <kwzh@gnu.org>
parents:
23606
diff
changeset
|
1730 (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
|
1731 (save-excursion |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1732 (goto-char (point-max)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1733 (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
|
1734 (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
|
1735 (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
|
1736 (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
|
1737 mode-only |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1738 (and enable-local-variables |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1739 (save-window-excursion |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1740 (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
|
1741 (save-excursion |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1742 (beginning-of-line) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1743 (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
|
1744 (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
|
1745 (if buffer-file-name |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1746 (file-name-nondirectory |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1747 buffer-file-name) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1748 (concat "buffer " |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1749 (buffer-name)))))))))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1750 (let ((continue t) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1751 prefix prefixlen suffix beg |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1752 mode-specified |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1753 (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
|
1754 ;; 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
|
1755 ;; 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
|
1756 (skip-chars-forward " \t") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1757 (or (eolp) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1758 (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
|
1759 (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
|
1760 (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
|
1761 (or (bolp) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1762 (setq prefix |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1763 (buffer-substring (point) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1764 (progn (beginning-of-line) (point))))) |
566 | 1765 |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1766 (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
|
1767 prefix (regexp-quote prefix))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1768 (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
|
1769 (while continue |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1770 ;; 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
|
1771 (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
|
1772 (forward-line 1)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1773 ;; 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
|
1774 (if prefix |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1775 (if (looking-at prefix) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1776 (forward-char prefixlen) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1777 (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
|
1778 ;; 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
|
1779 (skip-chars-forward " \t") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1780 (setq beg (point)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1781 (skip-chars-forward "^:\n") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1782 (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
|
1783 (skip-chars-backward " \t") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1784 (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
|
1785 (var (read str)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1786 val) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1787 ;; 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
|
1788 (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
|
1789 (setq continue nil) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1790 ;; 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
|
1791 (skip-chars-forward "^:") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1792 (forward-char 1) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1793 (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
|
1794 (skip-chars-backward "\n") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1795 (skip-chars-forward " \t") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1796 (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
|
1797 (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
|
1798 (if mode-only |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1799 (if (eq var 'mode) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1800 (setq mode-specified t)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1801 ;; 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
|
1802 (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
|
1803 (unless mode-only |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1804 (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
|
1805 mode-specified)) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1806 |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
1807 (defvar ignored-local-variables |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1808 '(enable-local-eval) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1809 "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
|
1810 |
6734
6e61dbbfce80
(hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
6733
diff
changeset
|
1811 ;; 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
|
1812 (put 'debugger 'risky-local-variable t) |
7682
ce09b4fd6cc8
Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents:
7662
diff
changeset
|
1813 (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
|
1814 (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
|
1815 (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
|
1816 (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
|
1817 (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
|
1818 (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
|
1819 (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
|
1820 (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
|
1821 (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
|
1822 (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
|
1823 (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
|
1824 (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
|
1825 (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
|
1826 (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
|
1827 (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
|
1828 ;; 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
|
1829 (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
|
1830 (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
|
1831 |
9162
53d02761f5b7
(hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
9068
diff
changeset
|
1832 ;; 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
|
1833 (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
|
1834 |
7217
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1835 (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
|
1836 (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
|
1837 |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1838 (defun hack-one-local-variable (var val) |
28325 | 1839 "\"Set\" one variable in a local variables spec. |
1840 A few variable names are treated specially." | |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1841 (cond ((eq var 'mode) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1842 (funcall (intern (concat (downcase (symbol-name val)) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1843 "-mode")))) |
19645
df1911293a5e
(hack-local-variables-prop-line): Ignore coding: tag.
Kenichi Handa <handa@m17n.org>
parents:
19575
diff
changeset
|
1844 ((eq var 'coding) |
df1911293a5e
(hack-local-variables-prop-line): Ignore coding: tag.
Kenichi Handa <handa@m17n.org>
parents:
19575
diff
changeset
|
1845 ;; 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
|
1846 nil) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1847 ((memq var ignored-local-variables) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1848 nil) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1849 ;; "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
|
1850 ;; 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
|
1851 ((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
|
1852 (and |
21327
01870b9b4f2a
(hack-one-local-variable): Variables named ...-predicate are treated as risky.
Richard M. Stallman <rms@gnu.org>
parents:
21263
diff
changeset
|
1853 (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
|
1854 (symbol-name var)) |
53d02761f5b7
(hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
9068
diff
changeset
|
1855 (not (get var 'safe-local-variable)))) |
13980 | 1856 ;; 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
|
1857 ;; if the args do nothing tricky. |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1858 (if (or (and (eq var 'eval) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1859 (consp val) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1860 (eq (car val) 'put) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1861 (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
|
1862 (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
|
1863 ;; 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
|
1864 ;; not functions. |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1865 (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
|
1866 (equal (nth 3 val) ''defun)) |
7217
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1867 (memq (nth 1 (nth 2 val)) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1868 '(lisp-indent-hook))) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1869 ;; 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
|
1870 (and (not (zerop (user-uid))) |
7217
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1871 (or (eq enable-local-eval t) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1872 (and enable-local-eval |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1873 (save-window-excursion |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1874 (switch-to-buffer (current-buffer)) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1875 (save-excursion |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1876 (beginning-of-line) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1877 (set-window-start (selected-window) (point))) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1878 (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
|
1879 (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
|
1880 (if buffer-file-name |
68c3d9e82bb7
(hack-one-local-variable): Cope with non-file buffers.
Richard M. Stallman <rms@gnu.org>
parents:
23657
diff
changeset
|
1881 (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
|
1882 (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
|
1883 (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
|
1884 (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
|
1885 (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
|
1886 (set var val)) |
23779
68c3d9e82bb7
(hack-one-local-variable): Cope with non-file buffers.
Richard M. Stallman <rms@gnu.org>
parents:
23657
diff
changeset
|
1887 (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
|
1888 ;; Ordinary variable, really set it. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1889 (t (make-local-variable var) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1890 (set var val)))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1891 |
337 | 1892 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
1893 (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
|
1894 "*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
|
1895 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
|
1896 \(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
|
1897 \(2) the current major mode is a \"special\" mode, |
17666 | 1898 \ not suitable for ordinary files, or |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
1899 \(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
|
1900 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
1901 :group 'editing-basics) |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1902 |
16971
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1903 (defun set-visited-file-name (filename &optional no-query along-with-file) |
337 | 1904 "Change name of file visited in current buffer to FILENAME. |
1905 The next time the buffer is saved it will go in the newly specified file. | |
1906 nil or empty string as argument means make buffer not be visiting any file. | |
1907 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
|
1908 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
|
1909 |
6ec32e968edb
(set-visited-file-name): New optional arg NO-QUERY.
Richard M. Stallman <rms@gnu.org>
parents:
15548
diff
changeset
|
1910 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
|
1911 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
|
1912 |
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1913 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
|
1914 the old visited file has been renamed to the new name FILENAME." |
337 | 1915 (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
|
1916 (if (buffer-base-buffer) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
1917 (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
|
1918 (let (truename) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1919 (if filename |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1920 (setq filename |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1921 (if (string-equal filename "") |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1922 nil |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1923 (expand-file-name filename)))) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1924 (if filename |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1925 (progn |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1926 (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
|
1927 (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
|
1928 (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
|
1929 (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
|
1930 (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
|
1931 (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
|
1932 (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
|
1933 filename))) |
3682b5e64ce3
(set-visited-file-name): Query if there's already another
Richard M. Stallman <rms@gnu.org>
parents:
14636
diff
changeset
|
1934 (error "Aborted"))) |
8140
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1935 (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
|
1936 (progn |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1937 (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
|
1938 (unlock-buffer))) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1939 (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
|
1940 (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
|
1941 (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
|
1942 (if (string= new-name "") |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1943 (error "Empty file name")) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1944 (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
|
1945 (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
|
1946 (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
|
1947 (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
|
1948 (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
|
1949 (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
|
1950 (or along-with-file |
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1951 (clear-visited-file-modtime)) |
13289
c4f93bb943b7
(set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
13182
diff
changeset
|
1952 ;; 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
|
1953 (if truename |
13289
c4f93bb943b7
(set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
13182
diff
changeset
|
1954 (progn |
c4f93bb943b7
(set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
13182
diff
changeset
|
1955 (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
|
1956 (if find-file-visit-truename |
c4f93bb943b7
(set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
13182
diff
changeset
|
1957 (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
|
1958 (setq buffer-file-number |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1959 (if filename |
13326
4e1b078121ad
(set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
13289
diff
changeset
|
1960 (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
|
1961 nil))) |
337 | 1962 ;; write-file-hooks is normally used for things like ftp-find-file |
1963 ;; that visit things that are not local files as if they were files. | |
1964 ;; Changing to visit an ordinary local file instead should flush the hook. | |
1965 (kill-local-variable 'write-file-hooks) | |
2375
94e135f2d64d
(local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
2335
diff
changeset
|
1966 (kill-local-variable 'local-write-file-hooks) |
337 | 1967 (kill-local-variable 'revert-buffer-function) |
1968 (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
|
1969 ;; 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
|
1970 ;; 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
|
1971 (if vc-mode |
8eb722515c31
(set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents:
6454
diff
changeset
|
1972 (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
|
1973 (kill-local-variable 'vc-mode) |
337 | 1974 ;; Turn off backup files for certain file names. |
1975 ;; 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
|
1976 (and buffer-file-name |
88e63a96a2d4
(set-visited-file-name): Don't call backup-enable-predicate
Karl Heuer <kwzh@gnu.org>
parents:
20660
diff
changeset
|
1977 (not (funcall backup-enable-predicate buffer-file-name)) |
337 | 1978 (progn |
1979 (make-local-variable 'backup-inhibited) | |
1980 (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
|
1981 (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
|
1982 ;; 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
|
1983 (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
|
1984 (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
|
1985 (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
|
1986 ;; 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
|
1987 ;; 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
|
1988 ;; 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
|
1989 ;; 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
|
1990 ;; 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
|
1991 (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
|
1992 (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
|
1993 ;; 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
|
1994 (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
|
1995 (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
|
1996 (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
|
1997 (and buffer-file-name |
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1998 (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
|
1999 (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
|
2000 ;; 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
|
2001 (condition-case nil |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
2002 ;; 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
|
2003 (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
|
2004 (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
|
2005 ;; 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
|
2006 (hack-local-variables t) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
2007 (set-auto-mode t)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
2008 (error nil))) |
337 | 2009 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2010 (defun write-file (filename &optional confirm) |
337 | 2011 "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
|
2012 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
|
2013 |
b772f629b45b
(write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents:
24764
diff
changeset
|
2014 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
|
2015 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
|
2016 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
|
2017 |
24832
b772f629b45b
(write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents:
24764
diff
changeset
|
2018 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
|
2019 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
|
2020 |
b772f629b45b
(write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents:
24764
diff
changeset
|
2021 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
|
2022 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
|
2023 Interactively, confirmation is required unless you supply a prefix argument." |
337 | 2024 ;; (interactive "FWrite file: ") |
2025 (interactive | |
2026 (list (if buffer-file-name | |
2027 (read-file-name "Write file: " | |
2028 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
|
2029 (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
|
2030 (expand-file-name |
b772f629b45b
(write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents:
24764
diff
changeset
|
2031 (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
|
2032 default-directory) |
b772f629b45b
(write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents:
24764
diff
changeset
|
2033 nil nil)) |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2034 (not current-prefix-arg))) |
337 | 2035 (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
|
2036 (progn |
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
2037 ;; 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
|
2038 ;; 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
|
2039 (if (file-directory-p filename) |
2003
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
2040 (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
|
2041 (file-name-nondirectory |
b772f629b45b
(write-file): When buffer is not already visiting a file,
Karl Heuer <kwzh@gnu.org>
parents:
24764
diff
changeset
|
2042 (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
|
2043 (and confirm |
5c97fabe0ab9
(write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents:
11222
diff
changeset
|
2044 (file-exists-p filename) |
5c97fabe0ab9
(write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents:
11222
diff
changeset
|
2045 (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
|
2046 (error "Canceled"))) |
16470
b050d980c422
(set-visited-file-name): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16440
diff
changeset
|
2047 (set-visited-file-name filename (not confirm)))) |
337 | 2048 (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
|
2049 ;; 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
|
2050 (and buffer-file-name |
96eee1e730a1
(write-file): Make buffer writable if the new file is.
Karl Heuer <kwzh@gnu.org>
parents:
20218
diff
changeset
|
2051 (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
|
2052 (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
|
2053 (save-buffer)) |
337 | 2054 |
2055 (defun backup-buffer () | |
2056 "Make a backup of the disk file visited by the current buffer, if appropriate. | |
2057 This is normally done before saving the buffer the first time. | |
2058 If the value is non-nil, it is the result of `file-modes' on the original | |
2059 file; this means that the caller, after saving the buffer, should change | |
16614 | 2060 the modes of the new file to agree with the old modes. |
2061 | |
2062 A backup may be done by renaming or by copying; see documentation of | |
2063 variable `make-backup-files'. If it's done by renaming, then the file is | |
2064 no longer accessible under its old name." | |
337 | 2065 (if (and make-backup-files (not backup-inhibited) |
2066 (not buffer-backed-up) | |
2067 (file-exists-p buffer-file-name) | |
2068 (memq (aref (elt (file-attributes buffer-file-name) 8) 0) | |
2069 '(?- ?l))) | |
2070 (let ((real-file-name buffer-file-name) | |
2071 backup-info backupname targets setmodes) | |
2072 ;; If specified name is a symbolic link, chase it to the target. | |
2073 ;; 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
|
2074 (setq real-file-name (file-chase-links real-file-name)) |
337 | 2075 (setq backup-info (find-backup-file-name real-file-name) |
2076 backupname (car backup-info) | |
2077 targets (cdr backup-info)) | |
2078 ;;; (if (file-directory-p buffer-file-name) | |
2079 ;;; (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
|
2080 (if backup-info |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2081 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2082 (let ((delete-old-versions |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2083 ;; 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
|
2084 ;; 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
|
2085 ;; 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
|
2086 (and targets |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2087 (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
|
2088 (or delete-old-versions |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2089 (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
|
2090 real-file-name)))))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2091 ;; 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
|
2092 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2093 (if (or file-precious-flag |
25604
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
2094 ; (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
|
2095 backup-by-copying |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2096 (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
|
2097 (> (file-nlinks real-file-name) 1)) |
28325 | 2098 (and (or backup-by-copying-when-mismatch |
25604
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
2099 (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
|
2100 (let ((attr (file-attributes real-file-name))) |
28325 | 2101 (and (or backup-by-copying-when-mismatch |
25604
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
2102 (and (integerp (nth 2 attr)) |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
2103 (integerp backup-by-copying-when-privileged-mismatch) |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
2104 (<= (nth 2 attr) backup-by-copying-when-privileged-mismatch))) |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
2105 (or (nth 9 attr) |
634f6f699331
(backup-by-copying-when-privileged-mismatch): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
25560
diff
changeset
|
2106 (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
|
2107 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2108 (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
|
2109 (file-error |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2110 ;; 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
|
2111 ;; 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
|
2112 (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
|
2113 (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
|
2114 (delete-file backupname)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2115 (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
|
2116 ;; 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
|
2117 (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
|
2118 (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
|
2119 (file-error |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2120 ;; 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
|
2121 (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
|
2122 (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
|
2123 "~/%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
|
2124 (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
|
2125 (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
|
2126 (sleep-for 1) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2127 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2128 (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
|
2129 (file-error |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2130 ;; 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
|
2131 ;; 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
|
2132 (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
|
2133 (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
|
2134 (delete-file backupname)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2135 (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
|
2136 (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
|
2137 ;; 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
|
2138 (if delete-old-versions |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2139 (while targets |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2140 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2141 (delete-file (car targets)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2142 (file-error nil)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2143 (setq targets (cdr targets)))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2144 setmodes) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2145 (file-error nil)))))) |
337 | 2146 |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2147 (defun file-name-sans-versions (name &optional keep-backup-version) |
28325 | 2148 "Return file NAME sans backup versions or strings. |
337 | 2149 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
|
2150 redefine it. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2151 If the optional argument KEEP-BACKUP-VERSION is non-nil, |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2152 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
|
2153 (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
|
2154 (if handler |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2155 (funcall handler 'file-name-sans-versions name keep-backup-version) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2156 (substring name 0 |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2157 (if (eq system-type 'vax-vms) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2158 ;; VMS version number is (a) semicolon, optional |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2159 ;; sign, zero or more digits or (b) period, option |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2160 ;; sign, zero or more digits, provided this is the |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2161 ;; second period encountered outside of the |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2162 ;; 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
|
2163 (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
|
2164 (if (string-match "\\.[^]>:]*\\(\\.[-+]?[0-9]*\\)\\'" |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2165 name) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2166 (match-beginning 1)) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2167 (length name)) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2168 (if keep-backup-version |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2169 (length name) |
12591
7caa97ba6a7b
(file-name-sans-versions): Recognize version control version numbers.
Richard M. Stallman <rms@gnu.org>
parents:
12587
diff
changeset
|
2170 (or (string-match "\\.~[0-9.]+~\\'" name) |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2171 (string-match "~\\'" name) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2172 (length name)))))))) |
337 | 2173 |
8987
1db2285cec99
(file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8937
diff
changeset
|
2174 (defun file-ownership-preserved-p (file) |
28325 | 2175 "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
|
2176 (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
|
2177 (if handler |
1db2285cec99
(file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8937
diff
changeset
|
2178 (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
|
2179 (let ((attributes (file-attributes file))) |
11817
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
2180 ;; 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
|
2181 ;; information would be lost by an (attempted) delete and create. |
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
2182 (or (null attributes) |
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
2183 (= (nth 2 attributes) (user-uid))))))) |
8987
1db2285cec99
(file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8937
diff
changeset
|
2184 |
8908
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
2185 (defun file-name-sans-extension (filename) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
2186 "Return FILENAME sans final \"extension\". |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
2187 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
|
2188 (save-match-data |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
2189 (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
|
2190 directory) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
2191 (if (string-match "\\.[^.]*\\'" file) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
2192 (if (setq directory (file-name-directory filename)) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
2193 (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
|
2194 directory) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
2195 (substring file 0 (match-beginning 0))) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
2196 filename)))) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
2197 |
16440
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
2198 (defun file-name-extension (filename &optional period) |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
2199 "Return FILENAME's final \"extension\". |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
2200 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
|
2201 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
|
2202 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
|
2203 |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
2204 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
|
2205 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
|
2206 the value is \"\"." |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
2207 (save-match-data |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
2208 (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
|
2209 (if (string-match "\\.[^.]*\\'" file) |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
2210 (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
|
2211 (if period |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
2212 ""))))) |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
2213 |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2214 (defcustom make-backup-file-name-function nil |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2215 "A function to use instead of the default `make-backup-file-name'. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2216 A value of nil gives the default `make-backup-file-name' behaviour. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2217 |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2218 This could be buffer-local to do something special for for specific |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2219 files. If you define it, you may need to change `backup-file-name-p' |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2220 and `file-name-sans-versions' too. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2221 |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2222 See also `backup-directory-alist'." |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2223 :group 'backup |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2224 :type '(choice (const :tag "Default" nil) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2225 (function :tag "Your function"))) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2226 |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2227 (defcustom backup-directory-alist nil |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2228 "Alist of filename patterns and backup directory names. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2229 Each element looks like (REGEXP . DIRECTORY). Backups of files with |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2230 names matching REGEXP will be made in DIRECTORY. DIRECTORY may be |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2231 relative or absolute. If it is absolute, so that all matching files |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2232 are backed up into the same directory, the file names in this |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2233 directory will be the full name of the file backed up with all |
29111
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2234 directory separators changed to `!' to prevent clashes. This will not |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2235 work correctly if your filesystem truncates the resulting name. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2236 |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2237 For the common case of all backups going into one directory, the alist |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2238 should contain a single element pairing \".\" with the appropriate |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2239 directory name. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2240 |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2241 If this variable is nil, or it fails to match a filename, the backup |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2242 is made in the original file's directory. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2243 |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2244 On MS-DOS filesystems without long names this variable is always |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2245 ignored." |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2246 :group 'backup |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2247 :type '(repeat (cons (regexp :tag "Regexp macthing filename") |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2248 (directory :tag "Backup directory name")))) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2249 |
337 | 2250 (defun make-backup-file-name (file) |
2251 "Create the non-numeric backup file name for FILE. | |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2252 Normally this will just be the file's name with `~' appended. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2253 Customization hooks are provided as follows. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2254 |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2255 If the variable `make-backup-file-name-function' is non-nil, its value |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2256 should be a function which will be called with FILE as its argument; |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2257 the resulting name is used. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2258 |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2259 Otherwise a match for FILE is sought in `backup-directory-alist'; see |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2260 the documentation of that variable. If the directory for the backup |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2261 doesn't exist, it is created." |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2262 (if make-backup-file-name-function |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2263 (funcall make-backup-file-name-function file) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2264 (if (and (eq system-type 'ms-dos) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2265 (not (msdos-long-file-names))) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2266 (let ((fn (file-name-nondirectory file))) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2267 (concat (file-name-directory file) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2268 (or (and (string-match "\\`[^.]+\\'" fn) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2269 (concat (match-string 0 fn) ".~")) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2270 (and (string-match "\\`[^.]+\\.\\(..?\\)?" fn) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2271 (concat (match-string 0 fn) "~"))))) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2272 (concat (make-backup-file-name-1 file) "~")))) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2273 |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2274 (defun make-backup-file-name-1 (file) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2275 "Subroutine of `make-backup-file-name' and `find-backup-file-name'." |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2276 (let ((alist backup-directory-alist) |
29111
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2277 elt backup-directory dir-sep-string) |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2278 (while alist |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2279 (setq elt (pop alist)) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2280 (if (string-match (car elt) file) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2281 (setq backup-directory (cdr elt) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2282 alist nil))) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2283 (if (null backup-directory) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2284 file |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2285 (unless (file-exists-p backup-directory) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2286 (condition-case nil |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2287 (make-directory backup-directory 'parents) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2288 (file-error file))) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2289 (if (file-name-absolute-p backup-directory) |
29111
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2290 (progn |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2291 (when (memq system-type '(windows-nt ms-dos)) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2292 ;; Normalize DOSish file names: convert all slashes to |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2293 ;; directory-sep-char, downcase the drive letter, if any, |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2294 ;; and replace the leading "x:" with "/drive_x". |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2295 (or (file-name-absolute-p file) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2296 (setq file (expand-file-name file))) ; make defaults explicit |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2297 (setq dir-sep-string (char-to-string directory-sep-char)) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2298 (or (eq directory-sep-char ?/) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2299 (subst-char-in-string ?/ ?\\ file)) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2300 (or (eq directory-sep-char ?\\) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2301 (subst-char-in-string ?\\ ?/ file)) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2302 (if (eq (aref file 1) ?:) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2303 (setq file (concat dir-sep-string |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2304 "drive_" |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2305 (char-to-string (downcase (aref file 0))) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2306 (if (eq (aref file 2) directory-sep-char) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2307 "" |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2308 dir-sep-string) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2309 (substring file 2))))) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2310 ;; Make the name unique by substituting directory |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2311 ;; separators. It may not really be worth bothering about |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2312 ;; doubling `!'s in the original name... |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2313 (expand-file-name |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2314 (subst-char-in-string |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2315 directory-sep-char ?! |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2316 (replace-regexp-in-string "!" "!!" file)) |
e52d90f01f53
(make-backup-file-name-1): Replace slashes with `!'
Eli Zaretskii <eliz@gnu.org>
parents:
29108
diff
changeset
|
2317 backup-directory)) |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2318 (expand-file-name (file-name-nondirectory file) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2319 (file-name-as-directory |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2320 (expand-file-name backup-directory |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2321 (file-name-directory file)))))))) |
337 | 2322 |
2323 (defun backup-file-name-p (file) | |
2324 "Return non-nil if FILE is a backup file name (numeric or not). | |
2325 This is a separate function so you can redefine it for customization. | |
2326 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
|
2327 (string-match "~\\'" file)) |
337 | 2328 |
17734
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2329 (defvar backup-extract-version-start) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2330 |
890
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
2331 ;; This is used in various files. |
24945 | 2332 ;; The usage of backup-extract-version-start is not very clean, |
2333 ;; 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
|
2334 (defun backup-extract-version (fn) |
28325 | 2335 "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
|
2336 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
|
2337 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
|
2338 (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
|
2339 (= (match-beginning 0) backup-extract-version-start)) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2340 (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
|
2341 0)) |
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
2342 |
337 | 2343 ;; I believe there is no need to alter this behavior for VMS; |
2344 ;; since backup files are not made on VMS, it should not get called. | |
2345 (defun find-backup-file-name (fn) | |
28325 | 2346 "Find a file name for a backup file FN, and suggestions for deletions. |
337 | 2347 Value is a list whose car is the name for the backup file |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2348 and whose cdr is a list of old versions to consider deleting now. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2349 If the value is nil, don't make a backup. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2350 Uses `backup-directory-alist' in the same way as does |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2351 `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
|
2352 (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
|
2353 ;; 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
|
2354 (if handler |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2355 (funcall handler 'find-backup-file-name fn) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2356 (if (eq version-control 'never) |
337 | 2357 (list (make-backup-file-name fn)) |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2358 (let* ((basic-name (make-backup-file-name-1 fn)) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2359 (base-versions (concat (file-name-nondirectory basic-name) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2360 ".~")) |
17734
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2361 (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
|
2362 (high-water-mark 0) |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2363 (number-to-delete 0) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2364 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
|
2365 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2366 (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
|
2367 base-versions |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2368 (file-name-directory basic-name)) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2369 versions (sort (mapcar #'backup-extract-version |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2370 possibilities) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2371 #'<) |
10408
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2372 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
|
2373 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
|
2374 (> high-water-mark 0)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
2375 number-to-delete (- (length versions) |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2376 kept-old-versions |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2377 kept-new-versions |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2378 -1)) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2379 (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
|
2380 (if (not deserve-versions-p) |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2381 (list (concat basic-name "~")) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2382 (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
|
2383 (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
|
2384 ;; 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
|
2385 ;; 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
|
2386 (>= (+ kept-new-versions kept-old-versions -1) 0)) |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2387 (mapcar (lambda (n) |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2388 (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
|
2389 (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
|
2390 (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
|
2391 v)))))))))) |
337 | 2392 |
2393 (defun file-nlinks (filename) | |
2394 "Return number of names file FILENAME has." | |
2395 (car (cdr (file-attributes filename)))) | |
1229
d4324e885a41
(file-relative-name): New function.
Roland McGrath <roland@gnu.org>
parents:
1212
diff
changeset
|
2396 |
d4324e885a41
(file-relative-name): New function.
Roland McGrath <roland@gnu.org>
parents:
1212
diff
changeset
|
2397 (defun file-relative-name (filename &optional directory) |
28325 | 2398 "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
|
2399 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
|
2400 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
|
2401 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
|
2402 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
|
2403 then it returns FILENAME." |
16976
c7683cba14c7
(file-relative-name): Protect the match-data.
Erik Naggum <erik@naggum.no>
parents:
16971
diff
changeset
|
2404 (save-match-data |
17734
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2405 (let ((fname (expand-file-name filename))) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2406 (setq directory (file-name-as-directory |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2407 (expand-file-name (or directory default-directory)))) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2408 ;; 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
|
2409 ;; 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
|
2410 (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
|
2411 (eq system-type 'windows-nt)) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2412 (not (string-equal (substring fname 0 2) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2413 (substring directory 0 2)))) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
2414 filename |
18466
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
2415 (let ((ancestor ".") |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
2416 (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
|
2417 (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
|
2418 (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
|
2419 (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
|
2420 ancestor (if (equal ancestor ".") |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
2421 ".." |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
2422 (concat "../" ancestor)))) |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
2423 ;; 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
|
2424 (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
|
2425 ;; 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
|
2426 ;; 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
|
2427 (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
|
2428 (if (and (equal ancestor ".") |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
2429 (not (equal rest ""))) |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
2430 ;; 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
|
2431 rest |
535a18a6b623
(file-chase-links): When handling .., make newname absolute.
Richard M. Stallman <rms@gnu.org>
parents:
18340
diff
changeset
|
2432 (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
|
2433 ;; 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
|
2434 ancestor)))))) |
337 | 2435 |
2436 (defun save-buffer (&optional args) | |
2437 "Save current buffer in visited file if modified. Versions described below. | |
2438 By default, makes the previous version into a backup file | |
2439 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
|
2440 With 1 \\[universal-argument], marks this version |
337 | 2441 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
|
2442 With 2 \\[universal-argument]'s, |
337 | 2443 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
|
2444 With 3 \\[universal-argument]'s, marks this version |
881e5c4a01cb
(save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
13749
diff
changeset
|
2445 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
|
2446 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
|
2447 |
23396
24d9060befa8
(save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23385
diff
changeset
|
2448 With argument of 0, never make the previous version into a backup file. |
337 | 2449 |
2450 If a file's name is FOO, the names of its numbered backup versions are | |
2451 FOO.~i~ for various integers i. A non-numbered backup file is called FOO~. | |
2452 Numeric backups (rather than FOO~) will be made if value of | |
2453 `version-control' is not the atom `never' and either there are already | |
2454 numeric versions of the file being backed up, or `version-control' is | |
2455 non-nil. | |
2456 We don't want excessive versions piling up, so there are variables | |
2457 `kept-old-versions', which tells Emacs how many oldest versions to keep, | |
2458 and `kept-new-versions', which tells how many newest versions to keep. | |
2459 Defaults are 2 old versions and 2 new. | |
2460 `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
|
2461 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
|
2462 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
|
2463 |
23396
24d9060befa8
(save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
23385
diff
changeset
|
2464 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
|
2465 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
|
2466 (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
|
2467 |
22738
d35510185a2d
(find-file-noselect-1): Use kill-local-variable on
Richard M. Stallman <rms@gnu.org>
parents:
22582
diff
changeset
|
2468 See the subroutine `basic-save-buffer' for more information." |
337 | 2469 (interactive "p") |
2470 (let ((modp (buffer-modified-p)) | |
2471 (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
|
2472 (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
|
2473 (memq args '(16 64))))) |
337 | 2474 (and modp (memq args '(16 64)) (setq buffer-backed-up nil)) |
2475 (if (and modp large) (message "Saving file %s..." (buffer-file-name))) | |
2476 (basic-save-buffer) | |
2477 (and modp (memq args '(4 64)) (setq buffer-backed-up nil)))) | |
2478 | |
2479 (defun delete-auto-save-file-if-necessary (&optional force) | |
2480 "Delete auto-save file for current buffer if `delete-auto-save-files' is t. | |
2481 Normally delete only if the file was written by this Emacs since | |
2482 the last real save, but optional arg FORCE non-nil means delete anyway." | |
2483 (and buffer-auto-save-file-name delete-auto-save-files | |
2484 (not (string= buffer-file-name buffer-auto-save-file-name)) | |
2485 (or force (recent-auto-save-p)) | |
2486 (progn | |
2487 (condition-case () | |
2488 (delete-file buffer-auto-save-file-name) | |
2489 (file-error nil)) | |
2490 (set-buffer-auto-saved)))) | |
2491 | |
24061 | 2492 (defvar auto-save-hook nil |
2493 "Normal hook run just before auto-saving.") | |
2494 | |
12963
337ba86981f5
(basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12930
diff
changeset
|
2495 (defvar after-save-hook nil |
337ba86981f5
(basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12930
diff
changeset
|
2496 "Normal hook that is run after a buffer is saved to its file.") |
337ba86981f5
(basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12930
diff
changeset
|
2497 |
22026
237140fdea76
(save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21773
diff
changeset
|
2498 (defvar save-buffer-coding-system nil |
237140fdea76
(save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21773
diff
changeset
|
2499 "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
|
2500 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
|
2501 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
|
2502 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
|
2503 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
|
2504 in such cases.") |
237140fdea76
(save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21773
diff
changeset
|
2505 |
22807
ff685e4dce0b
(basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22806
diff
changeset
|
2506 (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
|
2507 (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
|
2508 |
337 | 2509 (defun basic-save-buffer () |
12963
337ba86981f5
(basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12930
diff
changeset
|
2510 "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
|
2511 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
|
2512 `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
|
2513 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
|
2514 After saving the buffer, this function runs `after-save-hook'." |
337 | 2515 (interactive) |
21071
39d081df3643
(basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
21069
diff
changeset
|
2516 (save-current-buffer |
10298
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2517 ;; 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
|
2518 (if (buffer-base-buffer) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2519 (set-buffer (buffer-base-buffer))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2520 (if (buffer-modified-p) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2521 (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
|
2522 setmodes tempsetmodes) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2523 ;; 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
|
2524 (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
|
2525 (not (string= buffer-file-name |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2526 (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
|
2527 (let (buffer-new-name) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2528 ;; 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
|
2529 (setq buffer-file-name |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2530 (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
|
2531 ;; 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
|
2532 (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
|
2533 (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
|
2534 (kill-buffer buf)) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2535 (rename-buffer buffer-new-name))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2536 ;; 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
|
2537 (or buffer-file-name |
12895
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2538 (let ((filename |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2539 (expand-file-name |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2540 (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
|
2541 (and (file-exists-p filename) |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2542 (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
|
2543 filename)) |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2544 (error "Canceled"))) |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2545 (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
|
2546 (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
|
2547 (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
|
2548 (yes-or-no-p |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2549 (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
|
2550 (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
|
2551 (error "Save not confirmed")) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2552 (save-restriction |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2553 (widen) |
21071
39d081df3643
(basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
21069
diff
changeset
|
2554 (save-excursion |
39d081df3643
(basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
21069
diff
changeset
|
2555 (and (> (point-max) 1) |
39d081df3643
(basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
21069
diff
changeset
|
2556 (/= (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
|
2557 (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
|
2558 (= (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
|
2559 (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
|
2560 (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
|
2561 (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
|
2562 (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
|
2563 (buffer-name))))) |
39d081df3643
(basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
21069
diff
changeset
|
2564 (save-excursion |
39d081df3643
(basic-save-buffer): Use save-current-buffer not save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
21069
diff
changeset
|
2565 (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
|
2566 (insert ?\n)))) |
10298
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2567 (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
|
2568 (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
|
2569 (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
|
2570 ;; 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
|
2571 ;; 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
|
2572 (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
|
2573 ;; 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
|
2574 ;; 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
|
2575 ;; 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
|
2576 (if save-buffer-coding-system |
237140fdea76
(save-buffer-coding-system): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21773
diff
changeset
|
2577 (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
|
2578 (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
|
2579 (setq buffer-file-number |
4e1b078121ad
(set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
13289
diff
changeset
|
2580 (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
|
2581 (if setmodes |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2582 (condition-case () |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2583 (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
|
2584 (error nil)))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2585 ;; 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
|
2586 ;; delete it now. |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2587 (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
|
2588 ;; Support VC `implicit' locking. |
0fac64b0452e
(basic-save-buffer): Call vc-after-save.
Richard M. Stallman <rms@gnu.org>
parents:
12929
diff
changeset
|
2589 (vc-after-save) |
10298
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2590 (run-hooks 'after-save-hook)) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2591 (message "(No changes need to be saved)")))) |
337 | 2592 |
6574
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2593 ;; 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
|
2594 ;; 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
|
2595 ;; 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
|
2596 ;; 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
|
2597 (defun basic-save-buffer-1 () |
22807
ff685e4dce0b
(basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22806
diff
changeset
|
2598 (if save-buffer-coding-system |
ff685e4dce0b
(basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22806
diff
changeset
|
2599 (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
|
2600 (basic-save-buffer-2)) |
ff685e4dce0b
(basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22806
diff
changeset
|
2601 (basic-save-buffer-2))) |
ff685e4dce0b
(basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22806
diff
changeset
|
2602 |
ff685e4dce0b
(basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22806
diff
changeset
|
2603 (defun basic-save-buffer-2 () |
ff685e4dce0b
(basic-save-buffer-2): New function.
Richard M. Stallman <rms@gnu.org>
parents:
22806
diff
changeset
|
2604 (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
|
2605 (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
|
2606 (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
|
2607 (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
|
2608 (if (file-exists-p dir) |
881a46c98ddf
(set-auto-mode): If -*- line specifies a mode,
Richard M. Stallman <rms@gnu.org>
parents:
18676
diff
changeset
|
2609 (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
|
2610 (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
|
2611 (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
|
2612 (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
|
2613 (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
|
2614 (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
|
2615 (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
|
2616 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
|
2617 (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
|
2618 (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
|
2619 (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
|
2620 (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
|
2621 (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
|
2622 (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
|
2623 (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
|
2624 ;; 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
|
2625 ;; 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
|
2626 ;; 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
|
2627 (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
|
2628 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
|
2629 (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
|
2630 (setq i 0) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2631 (setq nogood t) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2632 ;; 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
|
2633 (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
|
2634 (setq tempname (format |
15269
b6381b3a6c99
(make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents:
15056
diff
changeset
|
2635 (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
|
2636 (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
|
2637 "%s#%d.tm#" ; MSDOS limits files to 8+3 |
28623
6d94533af241
(basic-save-buffer-2): Use a template with `$'
Gerd Moellmann <gerd@gnu.org>
parents:
28613
diff
changeset
|
2638 (if (memq system-type '(vax-vms axp-vms)) |
6d94533af241
(basic-save-buffer-2): Use a template with `$'
Gerd Moellmann <gerd@gnu.org>
parents:
28613
diff
changeset
|
2639 "%s$tmp$%d" |
6d94533af241
(basic-save-buffer-2): Use a template with `$'
Gerd Moellmann <gerd@gnu.org>
parents:
28613
diff
changeset
|
2640 "%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
|
2641 dir i)) |
8362
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2642 (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
|
2643 (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
|
2644 (unwind-protect |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2645 (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
|
2646 (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
|
2647 tempname nil realname |
0b04a441c06d
(basic-save-buffer-1): Pass new arg to write-region.
Richard M. Stallman <rms@gnu.org>
parents:
12850
diff
changeset
|
2648 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
|
2649 (setq succeed t)) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2650 ;; 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
|
2651 ;; 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
|
2652 (or succeed |
8937
065d01c10c78
(basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents:
8908
diff
changeset
|
2653 (progn |
065d01c10c78
(basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents:
8908
diff
changeset
|
2654 (delete-file tempname) |
065d01c10c78
(basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents:
8908
diff
changeset
|
2655 (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
|
2656 ;; 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
|
2657 ;; 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
|
2658 ;; 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
|
2659 (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
|
2660 ;; 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
|
2661 ;; so rename it. |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2662 (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
|
2663 ;; 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
|
2664 ;; 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
|
2665 ;; 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
|
2666 ;; (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
|
2667 (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
|
2668 ;; 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
|
2669 (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
|
2670 (set-file-modes buffer-file-name 511))) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2671 (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
|
2672 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
|
2673 setmodes)) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2674 |
26745
91304e25926b
(save-some-buffers): Turn EXITING into the more general
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26612
diff
changeset
|
2675 (defun save-some-buffers (&optional arg pred) |
337 | 2676 "Save some modified file-visiting buffers. Asks user about each one. |
423 | 2677 Optional argument (the prefix) non-nil means save all with no questions. |
26745
91304e25926b
(save-some-buffers): Turn EXITING into the more general
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26612
diff
changeset
|
2678 Optional second argument PRED determines which buffers are considered: |
91304e25926b
(save-some-buffers): Turn EXITING into the more general
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26612
diff
changeset
|
2679 If PRED is nil, all the file-visiting buffers are considered. |
91304e25926b
(save-some-buffers): Turn EXITING into the more general
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26612
diff
changeset
|
2680 If PRED is t, then certain non-file buffers will also be considered. |
91304e25926b
(save-some-buffers): Turn EXITING into the more general
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26612
diff
changeset
|
2681 If PRED is a zero-argument function, it indicates for each buffer whether |
28325 | 2682 to consider it or not when called with that buffer current." |
337 | 2683 (interactive "P") |
891 | 2684 (save-window-excursion |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2685 (let* ((queried nil) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2686 (files-done |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2687 (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
|
2688 (function |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2689 (lambda (buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2690 (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
|
2691 (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
|
2692 (or |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2693 (buffer-file-name buffer) |
26745
91304e25926b
(save-some-buffers): Turn EXITING into the more general
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26612
diff
changeset
|
2694 (and pred |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2695 (progn |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2696 (set-buffer buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2697 (and buffer-offer-save (> (buffer-size) 0))))) |
26745
91304e25926b
(save-some-buffers): Turn EXITING into the more general
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26612
diff
changeset
|
2698 (or (not (functionp pred)) |
91304e25926b
(save-some-buffers): Turn EXITING into the more general
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26612
diff
changeset
|
2699 (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
|
2700 (if arg |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2701 t |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2702 (setq queried t) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2703 (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
|
2704 (format "Save file %s? " |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2705 (buffer-file-name buffer)) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2706 (format "Save buffer %s? " |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2707 (buffer-name buffer))))))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2708 (function |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2709 (lambda (buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2710 (set-buffer buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2711 (save-buffer))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2712 (buffer-list) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2713 '("buffer" "buffers" "save") |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2714 (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
|
2715 (view-buffer buf |
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
2716 (function |
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
2717 (lambda (ignore) |
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
2718 (exit-recursive-edit)))) |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2719 (recursive-edit) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2720 ;; 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
|
2721 nil) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2722 "display the current buffer")))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2723 (abbrevs-done |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2724 (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
|
2725 (progn |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2726 (if (or arg |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2727 (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
|
2728 abbrev-file-name))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2729 (write-abbrev-file nil)) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2730 ;; 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
|
2731 (setq abbrevs-changed nil) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2732 t)))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2733 (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
|
2734 (message "(No files need saving)"))))) |
337 | 2735 |
2736 (defun not-modified (&optional arg) | |
2737 "Mark current buffer as unmodified, not needing to be saved. | |
10430 | 2738 With prefix arg, mark buffer as modified, so \\[save-buffer] will save. |
2739 | |
2740 It is not a good idea to use this function in Lisp programs, because it | |
2741 prints a message in the minibuffer. Instead, use `set-buffer-modified-p'." | |
337 | 2742 (interactive "P") |
2743 (message (if arg "Modification-flag set" | |
2744 "Modification-flag cleared")) | |
2745 (set-buffer-modified-p arg)) | |
2746 | |
2747 (defun toggle-read-only (&optional arg) | |
2748 "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
|
2749 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
|
2750 If visiting file read-only and `view-read-only' is non-nil, enter view mode." |
337 | 2751 (interactive "P") |
18316
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
2752 (cond |
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
2753 ((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
|
2754 (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
|
2755 nil) ; do nothing. |
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
2756 ;; Toggle. |
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
2757 ((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
|
2758 (View-exit-and-edit) |
746adedbb6ba
(toggle-read-only): When exiting View mode, locally
Karl Heuer <kwzh@gnu.org>
parents:
22179
diff
changeset
|
2759 (make-local-variable 'view-read-only) |
746adedbb6ba
(toggle-read-only): When exiting View mode, locally
Karl Heuer <kwzh@gnu.org>
parents:
22179
diff
changeset
|
2760 (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
|
2761 ((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
|
2762 (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
|
2763 (view-mode-enter)) |
1058f8684eca
(backup, find-file): Make `files' their parent.
Richard M. Stallman <rms@gnu.org>
parents:
18164
diff
changeset
|
2764 (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
|
2765 (force-mode-line-update)))) |
337 | 2766 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2767 (defun insert-file (filename) |
337 | 2768 "Insert contents of file FILENAME into buffer after point. |
2769 Set mark after the inserted text. | |
2770 | |
2771 This function is meant for the user to run interactively. | |
2772 Don't call it from programs! Use `insert-file-contents' instead. | |
2773 \(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
|
2774 (interactive "*fInsert file: ") |
3835
e3a00a940cf4
(insert-file): Report error if file is directory.
Richard M. Stallman <rms@gnu.org>
parents:
3709
diff
changeset
|
2775 (if (file-directory-p filename) |
e3a00a940cf4
(insert-file): Report error if file is directory.
Richard M. Stallman <rms@gnu.org>
parents:
3709
diff
changeset
|
2776 (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
|
2777 filename))) |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2778 (let ((tem (insert-file-contents filename))) |
337 | 2779 (push-mark (+ (point) (car (cdr tem)))))) |
2780 | |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2781 (defun append-to-file (start end filename) |
337 | 2782 "Append the contents of the region to the end of file FILENAME. |
2783 When called from a function, expects three arguments, | |
2784 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
|
2785 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
|
2786 (interactive "r\nFAppend to file: ") |
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2787 (write-region start end filename t)) |
337 | 2788 |
2789 (defun file-newest-backup (filename) | |
2790 "Return most recent backup file for FILENAME or nil if no backups exist." | |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2791 ;; `make-backup-file-name' will get us the right directory for |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2792 ;; ordinary or numeric backups. It might create a directory for |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2793 ;; backups as a side-effect, according to `backup-directory-alist'. |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2794 (let* ((filename (file-name-sans-versions |
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2795 (make-backup-file-name filename))) |
337 | 2796 (file (file-name-nondirectory filename)) |
2797 (dir (file-name-directory filename)) | |
2798 (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
|
2799 (newest nil) |
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2800 tem) |
337 | 2801 (while comp |
28524
98e34e5245c9
(backup-enable-predicate): Use temporary-file-directory,
Dave Love <fx@gnu.org>
parents:
28488
diff
changeset
|
2802 (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
|
2803 (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
|
2804 (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
|
2805 (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
|
2806 (if (or (null newest) |
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2807 (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
|
2808 (setq newest tem))))) |
337 | 2809 newest)) |
2810 | |
2811 (defun rename-uniquely () | |
2812 "Rename current buffer to a similar name not already taken. | |
2813 This function is useful for creating multiple shell process buffers | |
2814 or multiple mail buffers, etc." | |
2815 (interactive) | |
11522
5177611e8e4d
(rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents:
11463
diff
changeset
|
2816 (save-match-data |
20218 | 2817 (let ((base-name (buffer-name))) |
2818 (and (string-match "<[0-9]+>\\'" base-name) | |
2819 (not (and buffer-file-name | |
2820 (string= base-name | |
2821 (file-name-nondirectory buffer-file-name)))) | |
2822 ;; If the existing buffer name has a <NNN>, | |
2823 ;; which isn't part of the file name (if any), | |
2824 ;; then get rid of that. | |
2825 (setq base-name (substring base-name 0 (match-beginning 0)))) | |
2826 (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
|
2827 (force-mode-line-update)))) |
423 | 2828 |
1537
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2829 (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
|
2830 "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
|
2831 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
|
2832 is the current default directory for file names. |
13980 | 2833 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
|
2834 |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2835 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
|
2836 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
|
2837 (interactive |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2838 (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
|
2839 nil nil) |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2840 t)) |
7030
9e51b51e8595
Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents:
6899
diff
changeset
|
2841 (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
|
2842 (if handler |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2843 (funcall handler 'make-directory dir parents) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2844 (if (not parents) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2845 (make-directory-internal dir) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2846 (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
|
2847 create-list) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2848 (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
|
2849 (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
|
2850 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
|
2851 (while create-list |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2852 (make-directory-internal (car create-list)) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2853 (setq create-list (cdr create-list)))))))) |
337 | 2854 |
2855 (put 'revert-buffer-function 'permanent-local t) | |
2856 (defvar revert-buffer-function nil | |
8160
1013d56a1133
(revert-buffer-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8158
diff
changeset
|
2857 "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
|
2858 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
|
2859 which are the arguments that `revert-buffer' received.") |
337 | 2860 |
2861 (put 'revert-buffer-insert-file-contents-function 'permanent-local t) | |
2862 (defvar revert-buffer-insert-file-contents-function nil | |
2863 "Function to use to insert contents when reverting this buffer. | |
2864 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
|
2865 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
|
2866 |
5169ebe70135
(revert-buffer): Don't preserve point here.
Richard M. Stallman <rms@gnu.org>
parents:
24874
diff
changeset
|
2867 The function you specify is responsible for updating (or preserving) point.") |
337 | 2868 |
11995
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2869 (defvar before-revert-hook nil |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2870 "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
|
2871 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
|
2872 mechanism, this hook is not used.") |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2873 |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2874 (defvar after-revert-hook nil |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2875 "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
|
2876 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
|
2877 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
|
2878 hook functions. |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2879 |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2880 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
|
2881 mechanism, this hook is not used.") |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2882 |
23500
8f220d8d170d
(auto-mode-alist): Recognize .rpm files.
Richard M. Stallman <rms@gnu.org>
parents:
23473
diff
changeset
|
2883 (defvar revert-buffer-internal-hook) |
8f220d8d170d
(auto-mode-alist): Recognize .rpm files.
Richard M. Stallman <rms@gnu.org>
parents:
23473
diff
changeset
|
2884 |
13857
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
2885 (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
|
2886 "Replace current buffer text with the text of the visited file on disk. |
337 | 2887 This undoes all changes since the file was visited or saved. |
605 | 2888 With a prefix argument, offer to revert from latest auto-save file, if |
2889 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
|
2890 |
16544
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2891 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
|
2892 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
|
2893 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
|
2894 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
|
2895 |
10942
3f77513d0a77
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
10901
diff
changeset
|
2896 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
|
2897 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
|
2898 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
|
2899 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
|
2900 to nil. |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2901 |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2902 Optional second argument NOCONFIRM means don't ask for confirmation at |
28325 | 2903 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
|
2904 confirmation.) |
337 | 2905 |
15890
c2ef756791fe
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
15753
diff
changeset
|
2906 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
|
2907 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
|
2908 |
605 | 2909 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
|
2910 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
|
2911 `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
|
2912 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
|
2913 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
|
2914 |
1905
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2915 ;; 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
|
2916 ;; 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
|
2917 ;; 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
|
2918 ;; 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
|
2919 ;; 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
|
2920 ;; 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
|
2921 (interactive (list (not current-prefix-arg))) |
337 | 2922 (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
|
2923 (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
|
2924 (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
|
2925 (recent-auto-save-p) |
337 | 2926 buffer-auto-save-file-name |
2927 (file-readable-p buffer-auto-save-file-name) | |
2928 (y-or-n-p | |
2929 "Buffer has been auto-saved recently. Revert from auto-save file? "))) | |
2930 (file-name (if auto-save-p | |
2931 buffer-auto-save-file-name | |
2932 buffer-file-name))) | |
2933 (cond ((null file-name) | |
2934 (error "Buffer does not seem to be associated with any file")) | |
2935 ((or noconfirm | |
17894
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2936 (and (not (buffer-modified-p)) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2937 (let ((tail revert-without-query) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2938 (found nil)) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2939 (while tail |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2940 (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
|
2941 (setq found t)) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2942 (setq tail (cdr tail))) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2943 found)) |
337 | 2944 (yes-or-no-p (format "Revert buffer from file %s? " |
2945 file-name))) | |
5716
82588f97d478
(revert-buffer): reposition after-revert-hook, and add before-revert-hook.
Karl Heuer <kwzh@gnu.org>
parents:
5624
diff
changeset
|
2946 (run-hooks 'before-revert-hook) |
337 | 2947 ;; If file was backed up but has changed since, |
2948 ;; we shd make another backup. | |
2949 (and (not auto-save-p) | |
423 | 2950 (not (verify-visited-file-modtime (current-buffer))) |
337 | 2951 (setq buffer-backed-up nil)) |
2952 ;; Get rid of all undo records for this buffer. | |
2953 (or (eq buffer-undo-list t) | |
2954 (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
|
2955 ;; 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
|
2956 ;; 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
|
2957 (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
|
2958 (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
|
2959 (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
|
2960 after-revert-hook))) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2961 (let (buffer-read-only |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2962 ;; 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
|
2963 (buffer-undo-list t)) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2964 (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
|
2965 (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
|
2966 file-name auto-save-p) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2967 (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
|
2968 (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
|
2969 ;; 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
|
2970 ;; 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
|
2971 (let ((buffer-file-name nil)) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2972 (or auto-save-p |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2973 (unlock-buffer))) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2974 (widen) |
19552
c8a5bd70b9cd
(revert-buffer): Read a file without any code
Kenichi Handa <handa@m17n.org>
parents:
19435
diff
changeset
|
2975 (let ((coding-system-for-read |
c8a5bd70b9cd
(revert-buffer): Read a file without any code
Kenichi Handa <handa@m17n.org>
parents:
19435
diff
changeset
|
2976 ;; 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
|
2977 ;; any code conversion. |
c8a5bd70b9cd
(revert-buffer): Read a file without any code
Kenichi Handa <handa@m17n.org>
parents:
19435
diff
changeset
|
2978 (if auto-save-p 'no-conversion |
c8a5bd70b9cd
(revert-buffer): Read a file without any code
Kenichi Handa <handa@m17n.org>
parents:
19435
diff
changeset
|
2979 coding-system-for-read))) |
24925
5169ebe70135
(revert-buffer): Don't preserve point here.
Richard M. Stallman <rms@gnu.org>
parents:
24874
diff
changeset
|
2980 ;; 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
|
2981 (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
|
2982 nil nil t)))) |
11982
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2983 ;; 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
|
2984 ;; have changed the truename. |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2985 (setq buffer-file-truename |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2986 (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
|
2987 (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
|
2988 ;; 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
|
2989 (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
|
2990 (if local-hook-p |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2991 (progn |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2992 (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
|
2993 (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
|
2994 (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
|
2995 (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
|
2996 t))))) |
337 | 2997 |
2998 (defun recover-file (file) | |
2999 "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
|
3000 ;; 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
|
3001 ;; only rarely. |
5b86ce0cddb5
(recover-file): Use ordinary `f' to read file name.
Richard M. Stallman <rms@gnu.org>
parents:
10430
diff
changeset
|
3002 ;; 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
|
3003 (interactive "FRecover file: ") |
337 | 3004 (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
|
3005 (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
|
3006 (error "%s is an auto-save file" file)) |
337 | 3007 (let ((file-name (let ((buffer-file-name file)) |
3008 (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
|
3009 (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
|
3010 (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
|
3011 (not (file-exists-p file-name))) |
337 | 3012 (error "Auto-save file %s not current" file-name)) |
3013 ((save-window-excursion | |
19680
90127e640713
(file-truename) [windows-nt]: Use the canonicalized
Geoff Voelker <voelker@cs.washington.edu>
parents:
19663
diff
changeset
|
3014 (if (not (memq system-type '(vax-vms windows-nt))) |
337 | 3015 (with-output-to-temp-buffer "*Directory*" |
3016 (buffer-disable-undo standard-output) | |
3017 (call-process "ls" nil standard-output nil | |
736
18b892513cb7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
735
diff
changeset
|
3018 (if (file-symlink-p file) "-lL" "-l") |
18b892513cb7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
735
diff
changeset
|
3019 file file-name))) |
337 | 3020 (yes-or-no-p (format "Recover auto save file %s? " file-name))) |
3021 (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
|
3022 (let ((buffer-read-only nil) |
24764
ece1961bd955
(recover-file): Recover buffer-file-coding-system.
Kenichi Handa <handa@m17n.org>
parents:
24727
diff
changeset
|
3023 ;; Keep the current buffer-file-coding-system. |
ece1961bd955
(recover-file): Recover buffer-file-coding-system.
Kenichi Handa <handa@m17n.org>
parents:
24727
diff
changeset
|
3024 (coding-system buffer-file-coding-system) |
17004
cd1d930a2c98
(find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents:
16976
diff
changeset
|
3025 ;; Auto-saved file shoule be read without any code conversion. |
cd1d930a2c98
(find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents:
16976
diff
changeset
|
3026 (coding-system-for-read 'no-conversion)) |
337 | 3027 (erase-buffer) |
24764
ece1961bd955
(recover-file): Recover buffer-file-coding-system.
Kenichi Handa <handa@m17n.org>
parents:
24727
diff
changeset
|
3028 (insert-file-contents file-name nil) |
ece1961bd955
(recover-file): Recover buffer-file-coding-system.
Kenichi Handa <handa@m17n.org>
parents:
24727
diff
changeset
|
3029 (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
|
3030 (after-find-file nil nil t)) |
17525
a92a4702711a
(recover-file): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
17421
diff
changeset
|
3031 (t (error "Recover-file cancelled"))))) |
337 | 3032 |
11739
a9614b779859
(recover-session): Renamed from multiple-recover.
Richard M. Stallman <rms@gnu.org>
parents:
11636
diff
changeset
|
3033 (defun recover-session () |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3034 "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
|
3035 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
|
3036 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
|
3037 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
|
3038 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
|
3039 (interactive) |
16372
e311d5372d8c
(recover-session): Error if session files turned off.
Richard M. Stallman <rms@gnu.org>
parents:
16334
diff
changeset
|
3040 (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
|
3041 (error "You set `auto-save-list-file-prefix' to disable making session files")) |
28788
b4439d3505f3
(recover-session): Make directories as necessary
Gerd Moellmann <gerd@gnu.org>
parents:
28758
diff
changeset
|
3042 (let ((dir (file-name-directory auto-save-list-file-prefix))) |
b4439d3505f3
(recover-session): Make directories as necessary
Gerd Moellmann <gerd@gnu.org>
parents:
28758
diff
changeset
|
3043 (unless (file-directory-p dir) |
b4439d3505f3
(recover-session): Make directories as necessary
Gerd Moellmann <gerd@gnu.org>
parents:
28758
diff
changeset
|
3044 (make-directory dir t))) |
13879
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3045 (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
|
3046 (dired (concat auto-save-list-file-prefix "*") |
67515c200d09
(recover-session): Add `t' to switches.
Richard M. Stallman <rms@gnu.org>
parents:
17004
diff
changeset
|
3047 (concat dired-listing-switches "t"))) |
23989
38295026616a
(recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents:
23983
diff
changeset
|
3048 (save-excursion |
38295026616a
(recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents:
23983
diff
changeset
|
3049 (goto-char (point-min)) |
38295026616a
(recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents:
23983
diff
changeset
|
3050 (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
|
3051 (let ((inhibit-read-only t)) |
38295026616a
(recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents:
23983
diff
changeset
|
3052 ;; Each line starts with a space |
38295026616a
(recover-session): Preserve point when inserting
Andreas Schwab <schwab@suse.de>
parents:
23983
diff
changeset
|
3053 ;; 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
|
3054 (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
|
3055 " 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
|
3056 " 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
|
3057 " 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
|
3058 (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
|
3059 (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
|
3060 |
12050
b740095d6a47
(multiple-recover-finish): Renamed to recover-session-finish.
Roland McGrath <roland@gnu.org>
parents:
11995
diff
changeset
|
3061 (defun recover-session-finish () |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3062 "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
|
3063 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
|
3064 \\[recover-session]." |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3065 (interactive) |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3066 ;; 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
|
3067 (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
|
3068 files |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3069 (buffer (get-buffer-create " *recover*"))) |
22084
08f31e440c92
(system-tmp-directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
22026
diff
changeset
|
3070 (dired-unmark 1) |
12740
8b44b70e655d
(recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents:
12719
diff
changeset
|
3071 (dired-do-flagged-delete t) |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3072 (unwind-protect |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3073 (save-excursion |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3074 ;; 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
|
3075 (set-buffer buffer) |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3076 (erase-buffer) |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3077 (insert-file-contents file) |
13115
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3078 ;; 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
|
3079 ;; 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
|
3080 (while (not (eobp)) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3081 (let (thisfile autofile) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3082 (if (eolp) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3083 ;; 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
|
3084 ;; 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
|
3085 ;; 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
|
3086 (progn |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3087 (forward-line 1) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3088 (setq autofile |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3089 (buffer-substring-no-properties |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3090 (point) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3091 (save-excursion |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3092 (end-of-line) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3093 (point)))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3094 (setq thisfile |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3095 (expand-file-name |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3096 (substring |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3097 (file-name-nondirectory autofile) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3098 1 -1) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3099 (file-name-directory autofile))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3100 (forward-line 1)) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3101 ;; 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
|
3102 ;; 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
|
3103 (progn |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3104 (setq thisfile |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3105 (buffer-substring-no-properties |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3106 (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
|
3107 (forward-line 1) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3108 (setq autofile |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3109 (buffer-substring-no-properties |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3110 (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
|
3111 (forward-line 1))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3112 ;; 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
|
3113 (if (file-exists-p autofile) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3114 (setq files (cons thisfile files))))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3115 (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
|
3116 ;; 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
|
3117 ;; 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
|
3118 ;; 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
|
3119 ;; 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
|
3120 (if files |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3121 (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
|
3122 (lambda (file) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3123 (condition-case nil |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3124 (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
|
3125 (error |
13115
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3126 "Failed to recover `%s'" file))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3127 files |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3128 '("file" "files" "recover")) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
3129 (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
|
3130 (kill-buffer buffer)))) |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
3131 |
15963
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
3132 (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
|
3133 "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
|
3134 LIST defaults to all existing live buffers." |
337 | 3135 (interactive) |
15963
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
3136 (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
|
3137 (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
|
3138 (while list |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
3139 (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
|
3140 (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
|
3141 (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
|
3142 (/= (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
|
3143 (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
|
3144 (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
|
3145 name |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
3146 (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
|
3147 "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
|
3148 (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
|
3149 (setq list (cdr list)))) |
337 | 3150 |
3151 (defun auto-save-mode (arg) | |
3152 "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
|
3153 With prefix argument ARG, turn auto-saving on if positive, else off." |
337 | 3154 (interactive "P") |
3155 (setq buffer-auto-save-file-name | |
3156 (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
|
3157 (or (not buffer-auto-save-file-name) |
23382 | 3158 ;; 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
|
3159 ;; 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
|
3160 (< buffer-saved-size 0)) |
337 | 3161 (or (eq arg t) (listp arg) (and (integerp arg) (> arg 0)))) |
3162 (if (and buffer-file-name auto-save-visited-file-name | |
3163 (not buffer-read-only)) | |
3164 buffer-file-name | |
3165 (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
|
3166 ;; 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
|
3167 ;; 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
|
3168 (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
|
3169 (setq buffer-saved-size 0)) |
337 | 3170 (if (interactive-p) |
3171 (message "Auto-save %s (in this buffer)" | |
3172 (if buffer-auto-save-file-name "on" "off"))) | |
3173 buffer-auto-save-file-name) | |
3174 | |
3175 (defun rename-auto-save-file () | |
3176 "Adjust current buffer's auto save file name for current conditions. | |
3177 Also rename any existing auto save file, if it was made in this session." | |
3178 (let ((osave buffer-auto-save-file-name)) | |
3179 (setq buffer-auto-save-file-name | |
3180 (make-auto-save-file-name)) | |
3181 (if (and osave buffer-auto-save-file-name | |
3182 (not (string= buffer-auto-save-file-name buffer-file-name)) | |
3183 (not (string= buffer-auto-save-file-name osave)) | |
3184 (file-exists-p osave) | |
3185 (recent-auto-save-p)) | |
3186 (rename-file osave buffer-auto-save-file-name t)))) | |
3187 | |
3188 (defun make-auto-save-file-name () | |
3189 "Return file name to use for auto-saves of current buffer. | |
3190 Does not consider `auto-save-visited-file-name' as that variable is checked | |
3191 before calling this function. You can redefine this for customization. | |
3192 See also `auto-save-file-name-p'." | |
3193 (if buffer-file-name | |
28758
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3194 (let ((list auto-save-file-name-transforms) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3195 (filename buffer-file-name) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3196 result) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3197 ;; Apply user-specified translations |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3198 ;; to the file name. |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3199 (while (and list (not result)) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3200 (if (string-match (car (car list)) filename) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3201 (setq result (replace-match (cadr (car list)) t nil |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3202 filename))) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3203 (setq list (cdr list))) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3204 (if result (setq filename result)) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3205 |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3206 (if (and (eq system-type 'ms-dos) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3207 (not (msdos-long-file-names))) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3208 (let ((fn (file-name-nondirectory buffer-file-name))) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3209 (string-match "\\`\\([^.]+\\)\\(\\.\\(..?\\)?.?\\|\\)\\'" fn) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3210 (concat (file-name-directory buffer-file-name) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3211 "#" (match-string 1 fn) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3212 "." (match-string 3 fn) "#")) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3213 (concat (file-name-directory filename) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3214 "#" |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3215 (file-name-nondirectory filename) |
8ab223e4ce03
(make-auto-save-file-name):
Gerd Moellmann <gerd@gnu.org>
parents:
28623
diff
changeset
|
3216 "#"))) |
7944
a114bbe9a63c
(make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents:
7895
diff
changeset
|
3217 |
a114bbe9a63c
(make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents:
7895
diff
changeset
|
3218 ;; 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
|
3219 ;; 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
|
3220 |
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
|
3221 (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
|
3222 (limit 0)) |
17256
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
3223 ;; 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
|
3224 ;; 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
|
3225 ;; 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
|
3226 (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
|
3227 (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
|
3228 (replacement |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
3229 (cond ((eq character ?%) "%%") |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
3230 ((eq character ?/) "%+") |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
3231 ((eq character ?\\) "%-")))) |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
3232 (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
|
3233 (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
|
3234 ;; Generate the file name. |
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
3235 (expand-file-name |
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
3236 (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
|
3237 ;; 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
|
3238 (cond |
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
3239 ((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
|
3240 ((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
|
3241 ("~/")))))) |
337 | 3242 |
3243 (defun auto-save-file-name-p (filename) | |
3244 "Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'. | |
3245 FILENAME should lack slashes. You can redefine this for customization." | |
3246 (string-match "^#.*#$" filename)) | |
3247 | |
13879
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3248 (defun wildcard-to-regexp (wildcard) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3249 "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
|
3250 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
|
3251 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
|
3252 by `sh' are supported." |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3253 (let* ((i (string-match "[[.*+\\^$?]" wildcard)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3254 ;; Copy the initial run of non-special characters. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3255 (result (substring wildcard 0 i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3256 (len (length wildcard))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3257 ;; If no special characters, we're almost done. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3258 (if i |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3259 (while (< i len) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3260 (let ((ch (aref wildcard i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3261 j) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3262 (setq |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3263 result |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3264 (concat result |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3265 (cond |
16544
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
3266 ((and (eq ch ?\[) |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
3267 (< (1+ i) len) |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
3268 (eq (aref wildcard (1+ i)) ?\])) |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
3269 "\\[") |
13879
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3270 ((eq ch ?\[) ; [...] maps to regexp char class |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3271 (progn |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3272 (setq i (1+ i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3273 (concat |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3274 (cond |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3275 ((eq (aref wildcard i) ?!) ; [!...] -> [^...] |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3276 (progn |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3277 (setq i (1+ i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3278 (if (eq (aref wildcard i) ?\]) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3279 (progn |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3280 (setq i (1+ i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3281 "[^]") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3282 "[^"))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3283 ((eq (aref wildcard i) ?^) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3284 ;; Found "[^". Insert a `\0' character |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3285 ;; (which cannot happen in a filename) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3286 ;; into the character class, so that `^' |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3287 ;; is not the first character after `[', |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3288 ;; and thus non-special in a regexp. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3289 (progn |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3290 (setq i (1+ i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3291 "[\000^")) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3292 ((eq (aref wildcard i) ?\]) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3293 ;; I don't think `]' can appear in a |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3294 ;; character class in a wildcard, but |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3295 ;; let's be general here. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3296 (progn |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3297 (setq i (1+ i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3298 "[]")) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3299 (t "[")) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3300 (prog1 ; copy everything upto next `]'. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3301 (substring wildcard |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3302 i |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3303 (setq j (string-match |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3304 "]" wildcard i))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3305 (setq i (if j (1- j) (1- len))))))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3306 ((eq ch ?.) "\\.") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3307 ((eq ch ?*) "[^\000]*") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3308 ((eq ch ?+) "\\+") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3309 ((eq ch ?^) "\\^") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3310 ((eq ch ?$) "\\$") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3311 ((eq ch ?\\) "\\\\") ; probably cannot happen... |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3312 ((eq ch ??) "[^\000]") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3313 (t (char-to-string ch))))) |
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 ;; Shell wildcards should match the entire filename, |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3316 ;; not its part. Make the regexp say so. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3317 (concat "\\`" result "\\'"))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
3318 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
3319 (defcustom list-directory-brief-switches |
337 | 3320 (if (eq system-type 'vax-vms) "" "-CF") |
28325 | 3321 "*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
|
3322 :type 'string |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
3323 :group 'dired) |
337 | 3324 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
3325 (defcustom list-directory-verbose-switches |
337 | 3326 (if (eq system-type 'vax-vms) |
3327 "/PROTECTION/SIZE/DATE/OWNER/WIDTH=(OWNER:10)" | |
3328 "-l") | |
28325 | 3329 "*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
|
3330 :type 'string |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
3331 :group 'dired) |
337 | 3332 |
23473
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
3333 (defun file-expand-wildcards (pattern &optional full) |
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
3334 "Expand wildcard pattern PATTERN. |
23942
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3335 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
|
3336 |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3337 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
|
3338 the values are absolute also. |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3339 |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3340 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
|
3341 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
|
3342 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
|
3343 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
|
3344 (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
|
3345 (dirpart (file-name-directory pattern)) |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3346 ;; 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
|
3347 ;; 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
|
3348 ;; if DIRPART contains wildcards. |
24217
37a08636670b
(file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents:
24167
diff
changeset
|
3349 (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
|
3350 (mapcar 'file-name-as-directory |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3351 (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
|
3352 (list dirpart))) |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3353 contents) |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3354 (while dirs |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3355 (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
|
3356 (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
|
3357 (let ((this-dir-contents |
24217
37a08636670b
(file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents:
24167
diff
changeset
|
3358 ;; Filter out "." and ".." |
37a08636670b
(file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents:
24167
diff
changeset
|
3359 (delq nil |
37a08636670b
(file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents:
24167
diff
changeset
|
3360 (mapcar #'(lambda (name) |
37a08636670b
(file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents:
24167
diff
changeset
|
3361 (unless (string-match "\\`\\.\\.?\\'" |
37a08636670b
(file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents:
24167
diff
changeset
|
3362 (file-name-nondirectory name)) |
37a08636670b
(file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents:
24167
diff
changeset
|
3363 name)) |
37a08636670b
(file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents:
24167
diff
changeset
|
3364 (directory-files (or (car dirs) ".") full |
37a08636670b
(file-expand-wildcards): Never consider `.' and `..' a
Andreas Schwab <schwab@suse.de>
parents:
24167
diff
changeset
|
3365 (wildcard-to-regexp nondir)))))) |
23942
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3366 (setq contents |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3367 (nconc |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3368 (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
|
3369 (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
|
3370 this-dir-contents) |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3371 this-dir-contents) |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3372 contents)))) |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3373 (setq dirs (cdr dirs))) |
8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Richard M. Stallman <rms@gnu.org>
parents:
23842
diff
changeset
|
3374 contents)) |
23473
4c242b09e413
(find-file-wildcards): New option.
Richard M. Stallman <rms@gnu.org>
parents:
23396
diff
changeset
|
3375 |
337 | 3376 (defun list-directory (dirname &optional verbose) |
3377 "Display a list of files in or matching DIRNAME, a la `ls'. | |
3378 DIRNAME is globbed by the shell if necessary. | |
3379 Prefix arg (second arg if noninteractive) means supply -l switch to `ls'. | |
3380 Actions controlled by variables `list-directory-brief-switches' | |
3381 and `list-directory-verbose-switches'." | |
3382 (interactive (let ((pfx current-prefix-arg)) | |
3383 (list (read-file-name (if pfx "List directory (verbose): " | |
3384 "List directory (brief): ") | |
3385 nil default-directory nil) | |
3386 pfx))) | |
3387 (let ((switches (if verbose list-directory-verbose-switches | |
3388 list-directory-brief-switches))) | |
3389 (or dirname (setq dirname default-directory)) | |
3390 (setq dirname (expand-file-name dirname)) | |
3391 (with-output-to-temp-buffer "*Directory*" | |
3392 (buffer-disable-undo standard-output) | |
3393 (princ "Directory ") | |
3394 (princ dirname) | |
3395 (terpri) | |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3396 (save-excursion |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3397 (set-buffer "*Directory*") |
14401
83e1b1f5ce8f
(list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents:
14287
diff
changeset
|
3398 (setq default-directory |
83e1b1f5ce8f
(list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents:
14287
diff
changeset
|
3399 (if (file-directory-p dirname) |
83e1b1f5ce8f
(list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents:
14287
diff
changeset
|
3400 (file-name-as-directory dirname) |
83e1b1f5ce8f
(list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents:
14287
diff
changeset
|
3401 (file-name-directory dirname))) |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3402 (let ((wildcard (not (file-directory-p dirname)))) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3403 (insert-directory dirname switches wildcard (not wildcard))))))) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3404 |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3405 (defvar insert-directory-program "ls" |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3406 "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
|
3407 |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3408 ;; insert-directory |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3409 ;; - must insert _exactly_one_line_ describing FILE if WILDCARD and |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3410 ;; FULL-DIRECTORY-P is nil. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3411 ;; 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
|
3412 ;; given, namely, an absolute path name. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3413 ;; - 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
|
3414 ;; FULL-DIRECTORY-P is t, plus one optional "total" line |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3415 ;; 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
|
3416 ;; 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
|
3417 ;; allowed. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3418 ;; File lines should display the basename. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3419 ;; - must be consistent with |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3420 ;; - 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
|
3421 ;; dired-move-to-end-of-filename, |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3422 ;; dired-between-files, (shortcut for (not (dired-move-to-filename))) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3423 ;; dired-insert-headerline |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3424 ;; dired-after-subdir-garbage (defines what a "total" line is) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3425 ;; - variable dired-subdir-regexp |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3426 (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
|
3427 "Insert directory listing for FILE, formatted according to SWITCHES. |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3428 Leaves point after the inserted text. |
8207
96e6518c209b
(insert-directory): Allow list for SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
8181
diff
changeset
|
3429 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
|
3430 Optional third arg WILDCARD means treat FILE as shell wildcard. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3431 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
|
3432 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
|
3433 |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3434 This works by running a directory listing program |
1892
c4ff65277bb3
(insert-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
1879
diff
changeset
|
3435 whose name is in the variable `insert-directory-program'. |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3436 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
|
3437 ;; We need the directory in order to find the right handler. |
3846302b9c9c
(insert-directory): Use expanded file name to find handler.
Richard M. Stallman <rms@gnu.org>
parents:
7686
diff
changeset
|
3438 (let ((handler (find-file-name-handler (expand-file-name file) |
3846302b9c9c
(insert-directory): Use expanded file name to find handler.
Richard M. Stallman <rms@gnu.org>
parents:
7686
diff
changeset
|
3439 'insert-directory))) |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3440 (if handler |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3441 (funcall handler 'insert-directory file switches |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3442 wildcard full-directory-p) |
337 | 3443 (if (eq system-type 'vax-vms) |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
3444 (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
|
3445 (let* ((coding-system-for-read |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3446 (and enable-multibyte-characters |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3447 (or file-name-coding-system |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3448 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
|
3449 ;; 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
|
3450 (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
|
3451 (result |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3452 (if wildcard |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3453 ;; Run ls in the directory of the file pattern we asked for. |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3454 (let ((default-directory |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3455 (if (file-name-absolute-p file) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3456 (file-name-directory file) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3457 (file-name-directory (expand-file-name file)))) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3458 (pattern (file-name-nondirectory file)) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3459 (beg 0)) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3460 ;; Quote some characters that have special meanings in shells; |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3461 ;; but don't quote the wildcards--we want them to be special. |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3462 ;; We also currently don't quote the quoting characters |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3463 ;; in case people want to use them explicitly to quote |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3464 ;; wildcard characters. |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3465 (while (string-match "[ \t\n;<>&|()#$]" pattern beg) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3466 (setq pattern |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3467 (concat (substring pattern 0 (match-beginning 0)) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3468 "\\" |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3469 (substring pattern (match-beginning 0))) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3470 beg (1+ (match-end 0)))) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3471 (call-process shell-file-name nil t nil |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3472 "-c" (concat "\\";; Disregard shell aliases! |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3473 insert-directory-program |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3474 " -d " |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3475 (if (stringp switches) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3476 switches |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3477 (mapconcat 'identity switches " ")) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3478 " -- " |
21046
390b026f483d
(insert-directory): Bind coding-system-for-write.
Kenichi Handa <handa@m17n.org>
parents:
21041
diff
changeset
|
3479 pattern))) |
21041
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3480 ;; 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
|
3481 ;; 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
|
3482 (apply 'call-process |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3483 insert-directory-program nil t nil |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3484 (let (list) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3485 (if (listp switches) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3486 (setq list switches) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3487 (if (not (equal switches "")) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3488 (progn |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3489 ;; Split the switches at any spaces |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3490 ;; so we can pass separate options as separate args. |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3491 (while (string-match " " switches) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3492 (setq list (cons (substring switches 0 (match-beginning 0)) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3493 list) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3494 switches (substring switches (match-end 0)))) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3495 (setq list (nreverse (cons switches list)))))) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3496 (append list |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3497 ;; Avoid lossage if FILE starts with `-'. |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3498 '("--") |
22179
edc72bb3a3ff
(insert-directory): When WILDCARD is nil, expand ~ if necessary.
Richard M. Stallman <rms@gnu.org>
parents:
22175
diff
changeset
|
3499 (progn |
edc72bb3a3ff
(insert-directory): When WILDCARD is nil, expand ~ if necessary.
Richard M. Stallman <rms@gnu.org>
parents:
22175
diff
changeset
|
3500 (if (string-match "\\`~" file) |
edc72bb3a3ff
(insert-directory): When WILDCARD is nil, expand ~ if necessary.
Richard M. Stallman <rms@gnu.org>
parents:
22175
diff
changeset
|
3501 (setq file (expand-file-name file))) |
edc72bb3a3ff
(insert-directory): When WILDCARD is nil, expand ~ if necessary.
Richard M. Stallman <rms@gnu.org>
parents:
22175
diff
changeset
|
3502 (list |
edc72bb3a3ff
(insert-directory): When WILDCARD is nil, expand ~ if necessary.
Richard M. Stallman <rms@gnu.org>
parents:
22175
diff
changeset
|
3503 (if full-directory-p |
edc72bb3a3ff
(insert-directory): When WILDCARD is nil, expand ~ if necessary.
Richard M. Stallman <rms@gnu.org>
parents:
22175
diff
changeset
|
3504 (concat (file-name-as-directory file) ".") |
edc72bb3a3ff
(insert-directory): When WILDCARD is nil, expand ~ if necessary.
Richard M. Stallman <rms@gnu.org>
parents:
22175
diff
changeset
|
3505 file))))))))) |
21041
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3506 (if (/= result 0) |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3507 ;; We get here if ls failed. |
a7526e76aac9
(insert-directory): Bind coding-system-for-read to
Kenichi Handa <handa@m17n.org>
parents:
21001
diff
changeset
|
3508 ;; Access the file to get a suitable error. |
28488
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3509 (access-file file "Reading directory") |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3510 ;; Replace "total" with "used", to avoid confusion. |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3511 ;; Add in the amount of free space. |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3512 (save-excursion |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3513 (goto-char (point-min)) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3514 (when (re-search-forward "^total" nil t) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3515 (replace-match "used") |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3516 (end-of-line) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3517 (let (available) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3518 (with-temp-buffer |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3519 (call-process "df" nil t nil ".") |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3520 (goto-char (point-min)) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3521 (forward-line 1) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3522 (skip-chars-forward "^ \t") |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3523 (forward-word 3) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3524 (let ((end (point))) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3525 (forward-word -1) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3526 (setq available (buffer-substring (point) end)))) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3527 (insert " available " available)))))))))) |
d68718635663
(insert-directory): List the total free space
Gerd Moellmann <gerd@gnu.org>
parents:
28325
diff
changeset
|
3528 |
6050
afc731c614d3
(kill-emacs-query-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5974
diff
changeset
|
3529 (defvar kill-emacs-query-functions nil |
7686
814e18e2d3d4
(kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
7682
diff
changeset
|
3530 "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
|
3531 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
|
3532 `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
|
3533 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
|
3534 See also `kill-emacs-hook'.") |
6050
afc731c614d3
(kill-emacs-query-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5974
diff
changeset
|
3535 |
337 | 3536 (defun save-buffers-kill-emacs (&optional arg) |
3537 "Offer to save each buffer, then kill this Emacs process. | |
3538 With prefix arg, silently save all file-visiting buffers, then kill." | |
3539 (interactive "P") | |
3540 (save-some-buffers arg t) | |
3541 (and (or (not (memq t (mapcar (function | |
3542 (lambda (buf) (and (buffer-file-name buf) | |
3543 (buffer-modified-p buf)))) | |
3544 (buffer-list)))) | |
3545 (yes-or-no-p "Modified buffers exist; exit anyway? ")) | |
3546 (or (not (fboundp 'process-list)) | |
3547 ;; process-list is not defined on VMS. | |
3548 (let ((processes (process-list)) | |
3549 active) | |
3550 (while processes | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
736
diff
changeset
|
3551 (and (memq (process-status (car processes)) '(run stop open)) |
337 | 3552 (let ((val (process-kill-without-query (car processes)))) |
3553 (process-kill-without-query (car processes) val) | |
3554 val) | |
3555 (setq active t)) | |
3556 (setq processes (cdr processes))) | |
3557 (or (not active) | |
24017
d6ab8dbc44f2
(save-buffers-kill-emacs): Show the list of current
Richard M. Stallman <rms@gnu.org>
parents:
23989
diff
changeset
|
3558 (list-processes) |
337 | 3559 (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
|
3560 ;; 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
|
3561 (run-hook-with-args-until-failure 'kill-emacs-query-functions) |
337 | 3562 (kill-emacs))) |
3563 | |
28325 | 3564 ;; 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
|
3565 ;; 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
|
3566 |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3567 (setq file-name-handler-alist |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3568 (cons '("\\`/:" . file-name-non-special) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3569 file-name-handler-alist)) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3570 |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3571 ;; 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
|
3572 ;; 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
|
3573 ;; has been handled already. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3574 ;; 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
|
3575 |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3576 (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
|
3577 (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
|
3578 (default-directory |
496ecb0c5e68
(file-name-non-special): For insert-directory operation,
Karl Heuer <kwzh@gnu.org>
parents:
20094
diff
changeset
|
3579 (if (eq operation 'insert-directory) |
496ecb0c5e68
(file-name-non-special): For insert-directory operation,
Karl Heuer <kwzh@gnu.org>
parents:
20094
diff
changeset
|
3580 (directory-file-name |
28325 | 3581 (expand-file-name |
20095
496ecb0c5e68
(file-name-non-special): For insert-directory operation,
Karl Heuer <kwzh@gnu.org>
parents:
20094
diff
changeset
|
3582 (unhandled-file-name-directory default-directory))) |
496ecb0c5e68
(file-name-non-special): For insert-directory operation,
Karl Heuer <kwzh@gnu.org>
parents:
20094
diff
changeset
|
3583 default-directory)) |
16387
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3584 ;; 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
|
3585 (file-arg-indices |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3586 (cdr (or (assq operation |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3587 ;; The first four are special because they |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3588 ;; 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
|
3589 ;; in the return value. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3590 ;; 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
|
3591 '((expand-file-name . nil) |
18040
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
3592 ;; `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
|
3593 ;; as stripped of its quoting. |
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
3594 (substitute-in-file-name . identity) |
16387
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3595 (file-name-directory . nil) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3596 (file-name-as-directory . nil) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3597 (directory-file-name . nil) |
18164
33e7093070f8
(file-name-non-special): Handle
Richard M. Stallman <rms@gnu.org>
parents:
18040
diff
changeset
|
3598 (file-name-completion 0 1) |
33e7093070f8
(file-name-non-special): Handle
Richard M. Stallman <rms@gnu.org>
parents:
18040
diff
changeset
|
3599 (file-name-all-completions 0 1) |
16387
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3600 (rename-file 0 1) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3601 (copy-file 0 1) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3602 (make-symbolic-link 0 1) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3603 (add-name-to-file 0 1))) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3604 ;; 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
|
3605 ;; as the file name. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3606 '(nil 0)))) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3607 ;; 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
|
3608 (arguments (copy-sequence arguments))) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3609 ;; 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
|
3610 (save-match-data |
18040
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
3611 (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
|
3612 (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
|
3613 (and (car pair) |
583c3ace07bf
(file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents:
20093
diff
changeset
|
3614 (string-match "\\`/:" (car pair)) |
583c3ace07bf
(file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents:
20093
diff
changeset
|
3615 (setcar pair |
583c3ace07bf
(file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents:
20093
diff
changeset
|
3616 (if (= (length (car pair)) 2) |
583c3ace07bf
(file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents:
20093
diff
changeset
|
3617 "/" |
583c3ace07bf
(file-name-non-special): If "/:" is the entire file
Karl Heuer <kwzh@gnu.org>
parents:
20093
diff
changeset
|
3618 (substring (car pair) 2))))) |
16387
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3619 (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
|
3620 (if (eq file-arg-indices 'identity) |
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
3621 (car arguments) |
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
3622 (apply operation arguments)))) |
16387
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
3623 |
337 | 3624 (define-key ctl-x-map "\C-f" 'find-file) |
3625 (define-key ctl-x-map "\C-r" 'find-file-read-only) | |
3626 (define-key ctl-x-map "\C-v" 'find-alternate-file) | |
3627 (define-key ctl-x-map "\C-s" 'save-buffer) | |
3628 (define-key ctl-x-map "s" 'save-some-buffers) | |
3629 (define-key ctl-x-map "\C-w" 'write-file) | |
3630 (define-key ctl-x-map "i" 'insert-file) | |
3631 (define-key esc-map "~" 'not-modified) | |
3632 (define-key ctl-x-map "\C-d" 'list-directory) | |
3633 (define-key ctl-x-map "\C-c" 'save-buffers-kill-emacs) | |
3634 | |
3635 (define-key ctl-x-4-map "f" 'find-file-other-window) | |
3636 (define-key ctl-x-4-map "r" 'find-file-read-only-other-window) | |
3637 (define-key ctl-x-4-map "\C-f" 'find-file-other-window) | |
3638 (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
|
3639 (define-key ctl-x-4-map "\C-o" 'display-buffer) |
423 | 3640 |
778 | 3641 (define-key ctl-x-5-map "b" 'switch-to-buffer-other-frame) |
3642 (define-key ctl-x-5-map "f" 'find-file-other-frame) | |
3643 (define-key ctl-x-5-map "\C-f" 'find-file-other-frame) | |
3644 (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
|
3645 |
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
638
diff
changeset
|
3646 ;;; files.el ends here |