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