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