Mercurial > emacs
annotate lisp/files.el @ 18092:8428d56cd207
(smtpmail-via-smtp): Recognize XVRB as a synonym for
VERB and XONE as a synonym for ONEX.
(smtpmail-read-response): Add "%s" to `message' calls to avoid
problems with percent signs in strings.
(smtpmail-read-response): Return all lines of the
response text as a list of strings. Formerly only the first line
was returned. This is insufficient when one wants to parse
e.g. an EHLO response.
Ignore responses starting with "0". This is necessary to support
the VERB SMTP extension.
(smtpmail-via-smtp): Try EHLO and find out which SMTP service
extensions the receiving mailer supports.
Issue the ONEX and XUSR commands if the corresponding extensions
are supported.
Issue VERB if supported and `smtpmail-debug-info' is non-nil.
Add SIZE attribute to MAIL FROM: command if SIZE extension is
supported.
Add code that could set the BODY= attribute to MAIL FROM: if the
receiving mailer supports 8BITMIME. This is currently disabled,
since doing it right might involve adding MIME headers to, and in
some cases reencoding, the message.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 01 Jun 1997 22:24:22 +0000 |
parents | 89969b579beb |
children | 33e7093070f8 |
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, |
4 ;; 94, 95, 1996 Free Software Foundation, Inc. | |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
844
diff
changeset
|
5 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
778
diff
changeset
|
6 ;; Maintainer: FSF |
337 | 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." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
35 :group 'data) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
36 |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
37 (defgroup find-file nil |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
38 "Finding and editing files." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
39 :group 'data) |
337 | 40 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
41 |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
42 (defcustom delete-auto-save-files t |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
43 "*Non-nil means delete auto-save file when a buffer is saved or killed." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
44 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
45 :group 'auto-save) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
46 |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
47 (defcustom directory-abbrev-alist |
337 | 48 nil |
49 "*Alist of abbreviations for file directories. | |
50 A list of elements of the form (FROM . TO), each meaning to replace | |
51 FROM with TO when it appears in a directory name. This replacement is | |
52 done when setting up the default directory of a newly visited file. | |
53 *Every* FROM string should start with `^'. | |
54 | |
4735
97c1e7309a2d
(directory-abbrev-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
4699
diff
changeset
|
55 Do not use `~' in the TO strings. |
97c1e7309a2d
(directory-abbrev-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
4699
diff
changeset
|
56 They should be ordinary absolute directory names. |
97c1e7309a2d
(directory-abbrev-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
4699
diff
changeset
|
57 |
337 | 58 Use this feature when you have directories which you normally refer to |
59 via absolute symbolic links. Make TO the name of the link, and FROM | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
60 the name it is linked to." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
61 :type '(repeat (cons :format "%v" |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
62 :value ("" . "") |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
63 (regexp :tag "From") |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
64 (regexp :tag "To"))) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
65 :group 'abbrev |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
66 :group 'find-file) |
337 | 67 |
68 ;;; Turn off backup files on VMS since it has version numbers. | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
69 (defcustom make-backup-files (not (eq system-type 'vax-vms)) |
3634
1a0df59ac5fa
(make-backup-files): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
3630
diff
changeset
|
70 "*Non-nil means make a backup of a file the first time it is saved. |
337 | 71 This can be done by renaming the file or by copying. |
72 | |
73 Renaming means that Emacs renames the existing file so that it is a | |
74 backup file, then writes the buffer into a new file. Any other names | |
75 that the old file had will now refer to the backup file. The new file | |
76 is owned by you and its group is defaulted. | |
77 | |
78 Copying means that Emacs copies the existing file into the backup | |
79 file, then writes the buffer on top of the existing file. Any other | |
80 names that the old file had will now refer to the new (edited) file. | |
81 The file's owner and group are unchanged. | |
82 | |
83 The choice of renaming or copying is controlled by the variables | |
84 `backup-by-copying', `backup-by-copying-when-linked' and | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
85 `backup-by-copying-when-mismatch'. See also `backup-inhibited'." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
86 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
87 :group 'backup) |
337 | 88 |
89 ;; Do this so that local variables based on the file name | |
90 ;; are not overridden by the major mode. | |
91 (defvar backup-inhibited nil | |
4597
7ae2e83e40ea
(backup-inhibited): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
4466
diff
changeset
|
92 "Non-nil means don't make a backup, regardless of the other parameters. |
7ae2e83e40ea
(backup-inhibited): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
4466
diff
changeset
|
93 This variable is intended for use by making it local to a buffer. |
7ae2e83e40ea
(backup-inhibited): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
4466
diff
changeset
|
94 But it is local only if you make it local.") |
337 | 95 (put 'backup-inhibited 'permanent-local t) |
96 | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
97 (defcustom backup-by-copying nil |
337 | 98 "*Non-nil means always use copying to create backup files. |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
99 See documentation of variable `make-backup-files'." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
100 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
101 :group 'backup) |
337 | 102 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
103 (defcustom backup-by-copying-when-linked nil |
337 | 104 "*Non-nil means use copying to create backups for files with multiple names. |
105 This causes the alternate names to refer to the latest version as edited. | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
106 This variable is relevant only if `backup-by-copying' is nil." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
107 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
108 :group 'backup) |
337 | 109 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
110 (defcustom backup-by-copying-when-mismatch nil |
337 | 111 "*Non-nil means create backups by copying if this preserves owner or group. |
112 Renaming may still be used (subject to control of other variables) | |
113 when it would not result in changing the owner or group of the file; | |
114 that is, for files which are owned by you and whose group matches | |
115 the default for a new file created there by you. | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
116 This variable is relevant only if `backup-by-copying' is nil." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
117 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
118 :group 'backup) |
337 | 119 |
120 (defvar backup-enable-predicate | |
121 '(lambda (name) | |
122 (or (< (length name) 5) | |
123 (not (string-equal "/tmp/" (substring name 0 5))))) | |
124 "Predicate that looks at a file name and decides whether to make backups. | |
125 Called with an absolute file name as argument, it returns t to enable backup.") | |
126 | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
127 (defcustom buffer-offer-save nil |
337 | 128 "*Non-nil in a buffer means offer to save the buffer on exit |
129 even if the buffer is not visiting a file. | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
130 Automatically local in all buffers." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
131 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
132 :group 'backup) |
337 | 133 (make-variable-buffer-local 'buffer-offer-save) |
134 | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
135 (defcustom find-file-existing-other-name t |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
136 "*Non-nil means find a file under alternative names, in existing buffers. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
137 This means if any existing buffer is visiting the file you want |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
138 under another name, you get the existing buffer instead of a new buffer." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
139 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
140 :group 'find-file) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
141 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
142 (defcustom find-file-visit-truename nil |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
143 "*Non-nil means visit a file under its truename. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
144 The truename of a file is found by chasing all links |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
145 both at the file level and at the levels of the containing directories." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
146 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
147 :group 'find-file) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
148 |
17894
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
149 (defcustom revert-without-query |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
150 nil |
16684
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
151 "*Specify which files should be reverted without query. |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
152 The value is a list of regular expressions. |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
153 If the file name matches one of these regular expressions, |
17894
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
154 then `revert-buffer' reverts the file without querying |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
155 if the file has changed on disk and you have not edited the buffer." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
156 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
157 :group 'find-file) |
16684
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
158 |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
159 (defvar buffer-file-number nil |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
160 "The device number and file number of the file visited in the current buffer. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
161 The value is a list of the form (FILENUM DEVNUM). |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
162 This pair of numbers uniquely identifies the file. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
163 If the buffer is visiting a new file, the value is nil.") |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
164 (make-variable-buffer-local 'buffer-file-number) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
165 (put 'buffer-file-number 'permanent-local t) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
166 |
15329
19008fd7774d
(buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents:
15269
diff
changeset
|
167 (defvar buffer-file-numbers-unique (not (memq system-type '(windows-nt))) |
19008fd7774d
(buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents:
15269
diff
changeset
|
168 "Non-nil means that buffer-file-number uniquely identifies files.") |
19008fd7774d
(buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents:
15269
diff
changeset
|
169 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
170 (defcustom file-precious-flag nil |
337 | 171 "*Non-nil means protect against I/O errors while saving files. |
12105 | 172 Some modes set this non-nil in particular buffers. |
12145
bd3e59a5c0b3
(file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents:
12105
diff
changeset
|
173 |
bd3e59a5c0b3
(file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents:
12105
diff
changeset
|
174 This feature works by writing the new contents into a temporary file |
bd3e59a5c0b3
(file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents:
12105
diff
changeset
|
175 and then renaming the temporary file to replace the original. |
bd3e59a5c0b3
(file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents:
12105
diff
changeset
|
176 In this way, any I/O error in writing leaves the original untouched, |
bd3e59a5c0b3
(file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents:
12105
diff
changeset
|
177 and there is never any instant where the file is nonexistent. |
bd3e59a5c0b3
(file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents:
12105
diff
changeset
|
178 |
bd3e59a5c0b3
(file-precious-flag): Doc clarification.
Karl Heuer <kwzh@gnu.org>
parents:
12105
diff
changeset
|
179 Note that this feature forces backups to be made by copying. |
12105 | 180 Yet, at the same time, saving a precious file |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
181 breaks any hard links between it and other files." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
182 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
183 :group 'backup) |
337 | 184 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
185 (defcustom version-control nil |
337 | 186 "*Control use of version numbers for backup files. |
187 t means make numeric backup versions unconditionally. | |
188 nil means make them for files that have some already. | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
189 `never' means do not make them." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
190 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
191 :group 'backup |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
192 :group 'vc) |
337 | 193 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
194 (defcustom dired-kept-versions 2 |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
195 "*When cleaning directory, number of versions to keep." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
196 :type 'integer |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
197 :group 'backup |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
198 :group 'dired) |
337 | 199 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
200 (defcustom delete-old-versions nil |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
201 "*If t, delete excess backup versions silently. |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
202 If nil, ask confirmation. Any other value prevents any trimming." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
203 :type '(choice (const :tag "Delete" t) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
204 (const :tag "Ask" nil) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
205 (sexp :tag "Leave" :format "%t\n" other)) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
206 :group 'backup) |
337 | 207 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
208 (defcustom kept-old-versions 2 |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
209 "*Number of oldest versions to keep when a new numbered backup is made." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
210 :type 'integer |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
211 :group 'backup) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
212 |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
213 (defcustom kept-new-versions 2 |
337 | 214 "*Number of newest versions to keep when a new numbered backup is made. |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
215 Includes the new backup. Must be > 0" |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
216 :type 'integer |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
217 :group 'backup) |
337 | 218 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
219 (defcustom require-final-newline nil |
337 | 220 "*Value of t says silently ensure a file ends in a newline when it is saved. |
221 Non-nil but not t says ask user whether to add a newline when there isn't one. | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
222 nil means don't add newlines." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
223 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
224 :group 'editing-basics) |
337 | 225 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
226 (defcustom auto-save-default t |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
227 "*Non-nil says by default do auto-saving of every file-visiting buffer." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
228 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
229 :group 'auto-save) |
337 | 230 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
231 (defcustom auto-save-visited-file-name nil |
337 | 232 "*Non-nil says auto-save a buffer in the file it is visiting, when practical. |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
233 Normally auto-save files are written under other names." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
234 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
235 :group 'auto-save) |
337 | 236 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
237 (defcustom save-abbrevs nil |
337 | 238 "*Non-nil means save word abbrevs too when files are saved. |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
239 Loading an abbrev file sets this to t." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
240 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
241 :group 'abbrev) |
337 | 242 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
243 (defcustom find-file-run-dired t |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
244 "*Non-nil says run dired if `find-file' is given the name of a directory." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
245 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
246 :group 'find-file) |
337 | 247 |
1879
c9b4ece292cc
(find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents:
1799
diff
changeset
|
248 ;;;It is not useful to make this a local variable. |
c9b4ece292cc
(find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents:
1799
diff
changeset
|
249 ;;;(put 'find-file-not-found-hooks 'permanent-local t) |
337 | 250 (defvar find-file-not-found-hooks nil |
251 "List of functions to be called for `find-file' on nonexistent file. | |
252 These functions are called as soon as the error is detected. | |
253 `buffer-file-name' is already set up. | |
254 The functions are called in the order given until one of them returns non-nil.") | |
255 | |
1879
c9b4ece292cc
(find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents:
1799
diff
changeset
|
256 ;;;It is not useful to make this a local variable. |
c9b4ece292cc
(find-file-hooks): Delete permanent-local property.
Richard M. Stallman <rms@gnu.org>
parents:
1799
diff
changeset
|
257 ;;;(put 'find-file-hooks 'permanent-local t) |
337 | 258 (defvar find-file-hooks nil |
259 "List of functions to be called after a buffer is loaded from a file. | |
260 The buffer's local variables (if any) will have been processed before the | |
261 functions are called.") | |
262 | |
263 (defvar write-file-hooks nil | |
264 "List of functions to be called before writing out a buffer to a file. | |
265 If one of them returns non-nil, the file is considered already written | |
605 | 266 and the rest are not called. |
267 These hooks are considered to pertain to the visited file. | |
268 So this list is cleared if you change the visited file name. | |
14112
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
269 |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
270 Don't make this variable buffer-local; instead, use `local-write-file-hooks'. |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
271 See also `write-contents-hooks'.") |
4762
5eaa5d4eaaca
(local-write-file-hooks): Make this variable buffer-local.
Brian Fox <bfox@gnu.org>
parents:
4735
diff
changeset
|
272 ;;; However, in case someone does make it local... |
5eaa5d4eaaca
(local-write-file-hooks): Make this variable buffer-local.
Brian Fox <bfox@gnu.org>
parents:
4735
diff
changeset
|
273 (put 'write-file-hooks 'permanent-local t) |
2375
94e135f2d64d
(local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
2335
diff
changeset
|
274 |
94e135f2d64d
(local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
2335
diff
changeset
|
275 (defvar local-write-file-hooks nil |
94e135f2d64d
(local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
2335
diff
changeset
|
276 "Just like `write-file-hooks', except intended for per-buffer use. |
94e135f2d64d
(local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
2335
diff
changeset
|
277 The functions in this list are called before the ones in |
14112
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
278 `write-file-hooks'. |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
279 |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
280 This variable is meant to be used for hooks that have to do with a |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
281 particular visited file. Therefore, it is a permanent local, so that |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
282 changing the major mode does not clear it. However, calling |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
283 `set-visited-file-name' does clear it.") |
4762
5eaa5d4eaaca
(local-write-file-hooks): Make this variable buffer-local.
Brian Fox <bfox@gnu.org>
parents:
4735
diff
changeset
|
284 (make-variable-buffer-local 'local-write-file-hooks) |
5eaa5d4eaaca
(local-write-file-hooks): Make this variable buffer-local.
Brian Fox <bfox@gnu.org>
parents:
4735
diff
changeset
|
285 (put 'local-write-file-hooks 'permanent-local t) |
605 | 286 |
287 (defvar write-contents-hooks nil | |
288 "List of functions to be called before writing out a buffer to a file. | |
289 If one of them returns non-nil, the file is considered already written | |
290 and the rest are not called. | |
14112
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
291 |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
292 This variable is meant to be used for hooks that pertain to the |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
293 buffer's contents, not to the particular visited file; thus, |
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
294 `set-visited-file-name' does not clear this variable; but changing the |
14176
5e5779fa54cb
(auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents:
14112
diff
changeset
|
295 major mode does clear it. |
5e5779fa54cb
(auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents:
14112
diff
changeset
|
296 |
5e5779fa54cb
(auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents:
14112
diff
changeset
|
297 This variable automatically becomes buffer-local whenever it is set. |
16586
4176f951b342
(write-contents-hooks): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
16544
diff
changeset
|
298 If you use `add-hook' to add elements to the list, use nil for the |
14176
5e5779fa54cb
(auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents:
14112
diff
changeset
|
299 LOCAL argument. |
14112
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
300 |
605 | 301 See also `write-file-hooks'.") |
14112
271075f54794
(write-contents-hooks): Call make-variable-buffer-local.
Karl Heuer <kwzh@gnu.org>
parents:
14025
diff
changeset
|
302 (make-variable-buffer-local 'write-contents-hooks) |
337 | 303 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
304 (defcustom enable-local-variables t |
16440
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
305 "*Control use of local variables in files you visit. |
337 | 306 The value can be t, nil or something else. |
16440
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
307 A value of t means file local variables specifications are obeyed; |
337 | 308 nil means they are ignored; anything else means query. |
309 | |
16440
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
310 The command \\[normal-mode] always obeys file local variable |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
311 specifications and ignores this variable." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
312 :type '(choice (const :tag "Obey" t) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
313 (const :tag "Ignore" nil) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
314 (sexp :tag "Query" :format "%t\n" other)) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
315 :group 'find-file) |
337 | 316 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
317 (defcustom enable-local-eval 'maybe |
722
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
318 "*Control processing of the \"variable\" `eval' in a file's local variables. |
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
319 The value can be t, nil or something else. |
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
320 A value of t means obey `eval' variables; |
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
321 nil means ignore them; anything else means query. |
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
322 |
0a2391511b46
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
705
diff
changeset
|
323 The command \\[normal-mode] always obeys local-variables lists |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
324 and ignores this variable." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
325 :type '(choice (const :tag "Obey" t) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
326 (const :tag "Ignore" nil) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
327 (sexp :tag "Query" :format "%t\n" other)) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
328 :group 'find-file) |
337 | 329 |
330 ;; Avoid losing in versions where CLASH_DETECTION is disabled. | |
331 (or (fboundp 'lock-buffer) | |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
332 (defalias 'lock-buffer 'ignore)) |
337 | 333 (or (fboundp 'unlock-buffer) |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
334 (defalias 'unlock-buffer 'ignore)) |
16214
fa8dbed4d40e
(file-locked-p): Alias to `ignore' if no file locking.
Richard M. Stallman <rms@gnu.org>
parents:
16187
diff
changeset
|
335 (or (fboundp 'file-locked-p) |
fa8dbed4d40e
(file-locked-p): Alias to `ignore' if no file locking.
Richard M. Stallman <rms@gnu.org>
parents:
16187
diff
changeset
|
336 (defalias 'file-locked-p 'ignore)) |
4186
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
337 |
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
338 ;; This hook function provides support for ange-ftp host name |
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
339 ;; completion. It runs the usual ange-ftp hook, but only for |
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
340 ;; completion operations. Having this here avoids the need |
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
341 ;; to load ange-ftp when it's not really in use. |
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
342 (defun ange-ftp-completion-hook-function (op &rest args) |
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
343 (if (memq op '(file-name-completion file-name-all-completions)) |
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
344 (apply 'ange-ftp-hook-function op args) |
7142
2b445c15563e
(ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents:
7036
diff
changeset
|
345 (let ((inhibit-file-name-handlers |
2b445c15563e
(ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents:
7036
diff
changeset
|
346 (cons 'ange-ftp-completion-hook-function |
2b445c15563e
(ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents:
7036
diff
changeset
|
347 (and (eq inhibit-file-name-operation op) |
2b445c15563e
(ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents:
7036
diff
changeset
|
348 inhibit-file-name-handlers))) |
2b445c15563e
(ange-ftp-completion-hook-function): Use new inhibit vars.
Richard M. Stallman <rms@gnu.org>
parents:
7036
diff
changeset
|
349 (inhibit-file-name-operation op)) |
4186
45fc16fdf07e
(ange-ftp-completion-hook-function): New function.
Richard M. Stallman <rms@gnu.org>
parents:
4148
diff
changeset
|
350 (apply op args)))) |
13903
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
351 |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
352 (defun convert-standard-filename (filename) |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
353 "Convert a standard file's name to something suitable for the current OS. |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
354 This function's standard definition is trivial; it just returns the argument. |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
355 However, on some systems, the function is redefined |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
356 with a definition that really does change some file names." |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
357 filename) |
337 | 358 |
359 (defun pwd () | |
360 "Show the current default directory." | |
361 (interactive nil) | |
362 (message "Directory %s" default-directory)) | |
363 | |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
364 (defvar cd-path nil |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
365 "Value of the CDPATH environment variable, as a list. |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
366 Not actually set up until the first time you you use it.") |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
367 |
11817
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
368 (defvar path-separator ":" |
17894
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
369 "Character used to separate directories in search paths.") |
11817
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
370 |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
371 (defun parse-colon-path (cd-path) |
17894
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
372 "Explode a colon-separated search path into a list of directory names." |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
373 (and cd-path |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
374 (let (cd-prefix cd-list (cd-start 0) cd-colon) |
11817
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
375 (setq cd-path (concat cd-path path-separator)) |
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
376 (while (setq cd-colon (string-match path-separator cd-path cd-start)) |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
377 (setq cd-list |
3038
4bdac10d920a
(cd): Set cd-path to a list.
Richard M. Stallman <rms@gnu.org>
parents:
2896
diff
changeset
|
378 (nconc cd-list |
4216
6f940dcec978
(parse-colon-path): Really make nil, not ".", for empty path element.
Richard M. Stallman <rms@gnu.org>
parents:
4196
diff
changeset
|
379 (list (if (= cd-start cd-colon) |
6f940dcec978
(parse-colon-path): Really make nil, not ".", for empty path element.
Richard M. Stallman <rms@gnu.org>
parents:
4196
diff
changeset
|
380 nil |
6f940dcec978
(parse-colon-path): Really make nil, not ".", for empty path element.
Richard M. Stallman <rms@gnu.org>
parents:
4196
diff
changeset
|
381 (substitute-in-file-name |
4196
20f7ea2f83ef
(parse-colon-path): Turn empty substring into nil.
Richard M. Stallman <rms@gnu.org>
parents:
4186
diff
changeset
|
382 (file-name-as-directory |
20f7ea2f83ef
(parse-colon-path): Turn empty substring into nil.
Richard M. Stallman <rms@gnu.org>
parents:
4186
diff
changeset
|
383 (substring cd-path cd-start cd-colon))))))) |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
384 (setq cd-start (+ cd-colon 1))) |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
385 cd-list))) |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
386 |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
387 (defun cd-absolute (dir) |
3652
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
388 "Change current directory to given absolute file name DIR." |
8362
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
389 ;; Put the name into directory syntax now, |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
390 ;; because otherwise expand-file-name may give some bad results. |
337 | 391 (if (not (eq system-type 'vax-vms)) |
392 (setq dir (file-name-as-directory dir))) | |
8362
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
393 (setq dir (abbreviate-file-name (expand-file-name dir))) |
337 | 394 (if (not (file-directory-p dir)) |
395 (error "%s is not a directory" dir) | |
396 (if (file-executable-p dir) | |
397 (setq default-directory dir) | |
3038
4bdac10d920a
(cd): Set cd-path to a list.
Richard M. Stallman <rms@gnu.org>
parents:
2896
diff
changeset
|
398 (error "Cannot cd to %s: Permission denied" dir)))) |
337 | 399 |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
400 (defun cd (dir) |
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
401 "Make DIR become the current buffer's default directory. |
3652
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
402 If your environment includes a `CDPATH' variable, try each one of that |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
403 colon-separated list of directories when resolving a relative directory name." |
12719
dde58f45b00a
(cd): When reading arg, use just directory as the default.
Richard M. Stallman <rms@gnu.org>
parents:
12591
diff
changeset
|
404 (interactive |
dde58f45b00a
(cd): When reading arg, use just directory as the default.
Richard M. Stallman <rms@gnu.org>
parents:
12591
diff
changeset
|
405 (list (read-file-name "Change default directory: " |
13095
8477c2dca6b0
(cd): Fix interactive spec to require match if there is no CDPATH.
Roland McGrath <roland@gnu.org>
parents:
13091
diff
changeset
|
406 default-directory default-directory |
8477c2dca6b0
(cd): Fix interactive spec to require match if there is no CDPATH.
Roland McGrath <roland@gnu.org>
parents:
13091
diff
changeset
|
407 (and (member cd-path '(nil ("./"))) |
8477c2dca6b0
(cd): Fix interactive spec to require match if there is no CDPATH.
Roland McGrath <roland@gnu.org>
parents:
13091
diff
changeset
|
408 (null (getenv "CDPATH")))))) |
3652
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
409 (if (file-name-absolute-p dir) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
410 (cd-absolute (expand-file-name dir)) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
411 (if (null cd-path) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
412 (let ((trypath (parse-colon-path (getenv "CDPATH")))) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
413 (setq cd-path (or trypath (list "./"))))) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
414 (if (not (catch 'found |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
415 (mapcar |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
416 (function (lambda (x) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
417 (let ((f (expand-file-name (concat x dir)))) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
418 (if (file-directory-p f) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
419 (progn |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
420 (cd-absolute f) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
421 (throw 'found t)))))) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
422 cd-path) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
423 nil)) |
31e55359fcdb
(cd): Use file-name-absolute-p.
Richard M. Stallman <rms@gnu.org>
parents:
3634
diff
changeset
|
424 (error "No such directory found via CDPATH environment variable")))) |
2575
1c5dca7628cb
(cd): Changed to use to resolve relative cd calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2553
diff
changeset
|
425 |
337 | 426 (defun load-file (file) |
427 "Load the Lisp file named FILE." | |
428 (interactive "fLoad file: ") | |
429 (load (expand-file-name file) nil nil t)) | |
430 | |
431 (defun load-library (library) | |
432 "Load the library named LIBRARY. | |
433 This is an interface to the function `load'." | |
434 (interactive "sLoad library: ") | |
435 (load library)) | |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
436 |
7036 | 437 (defun file-local-copy (file &optional buffer) |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
438 "Copy the file FILE into a temporary file on this machine. |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
439 Returns the name of the local copy, or nil, if FILE is directly |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
440 accessible." |
7030
9e51b51e8595
Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents:
6899
diff
changeset
|
441 (let ((handler (find-file-name-handler file 'file-local-copy))) |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
442 (if handler |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
443 (funcall handler 'file-local-copy file) |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1109
diff
changeset
|
444 nil))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
445 |
8148
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
446 (defun file-truename (filename &optional counter prev-dirs) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
447 "Return the truename of FILENAME, which should be absolute. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
448 The truename of a file name is found by chasing symbolic links |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
449 both at the level of the file and at the level of the directories |
8148
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
450 containing it, until no links are left at any level. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
451 |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
452 The arguments COUNTER and PREV-DIRS are used only in recursive calls. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
453 Do not specify them in other calls." |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
454 ;; COUNTER can be a cons cell whose car is the count of how many more links |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
455 ;; to chase before getting an error. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
456 ;; PREV-DIRS can be a cons cell whose car is an alist |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
457 ;; of truenames we've just recently computed. |
12202
0bd2831dff40
Test for "" too; let it go to expand-file-name if it is equal.
Simon Marshall <simon@gnu.org>
parents:
12145
diff
changeset
|
458 |
0bd2831dff40
Test for "" too; let it go to expand-file-name if it is equal.
Simon Marshall <simon@gnu.org>
parents:
12145
diff
changeset
|
459 ;; The last test looks dubious, maybe `+' is meant here? --simon. |
0bd2831dff40
Test for "" too; let it go to expand-file-name if it is equal.
Simon Marshall <simon@gnu.org>
parents:
12145
diff
changeset
|
460 (if (or (string= filename "") (string= filename "~") |
4965
dad86ab54e36
(find-backup-file-name): Don't fatal-error on
Richard M. Stallman <rms@gnu.org>
parents:
4847
diff
changeset
|
461 (and (string= (substring filename 0 1) "~") |
dad86ab54e36
(find-backup-file-name): Don't fatal-error on
Richard M. Stallman <rms@gnu.org>
parents:
4847
diff
changeset
|
462 (string-match "~[^/]*" filename))) |
2613
709f672f450e
(find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2600
diff
changeset
|
463 (progn |
709f672f450e
(find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2600
diff
changeset
|
464 (setq filename (expand-file-name filename)) |
709f672f450e
(find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2600
diff
changeset
|
465 (if (string= filename "") |
709f672f450e
(find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2600
diff
changeset
|
466 (setq filename "/")))) |
8148
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
467 (or counter (setq counter (list 100))) |
8374
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
468 (let (done |
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
469 ;; For speed, remove the ange-ftp completion handler from the list. |
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
470 ;; We know it's not needed here. |
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
471 ;; For even more speed, do this only on the outermost call. |
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
472 (file-name-handler-alist |
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
473 (if prev-dirs file-name-handler-alist |
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
474 (let ((tem (copy-sequence file-name-handler-alist))) |
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
475 (delq (rassq 'ange-ftp-completion-hook-function tem) tem))))) |
4c6590fc242e
(file-truename): Temporarily get rid of the
Richard M. Stallman <rms@gnu.org>
parents:
8362
diff
changeset
|
476 (or prev-dirs (setq prev-dirs (list nil))) |
8148
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
477 ;; If this file directly leads to a link, process that iteratively |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
478 ;; so that we don't use lots of stack. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
479 (while (not done) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
480 (setcar counter (1- (car counter))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
481 (if (< (car counter) 0) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
482 (error "Apparent cycle of symbolic links for %s" filename)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
483 (let ((handler (find-file-name-handler filename 'file-truename))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
484 ;; For file name that has a special handler, call handler. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
485 ;; This is so that ange-ftp can save time by doing a no-op. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
486 (if handler |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
487 (setq filename (funcall handler 'file-truename filename) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
488 done t) |
9234
da491f38518c
(file-truename): If name has no dir, use default-directory.
Richard M. Stallman <rms@gnu.org>
parents:
9212
diff
changeset
|
489 (let ((dir (or (file-name-directory filename) default-directory)) |
8148
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
490 target dirfile) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
491 ;; Get the truename of the directory. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
492 (setq dirfile (directory-file-name dir)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
493 ;; If these are equal, we have the (or a) root directory. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
494 (or (string= dir dirfile) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
495 ;; If this is the same dir we last got the truename for, |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
496 ;; save time--don't recalculate. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
497 (if (assoc dir (car prev-dirs)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
498 (setq dir (cdr (assoc dir (car prev-dirs)))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
499 (let ((old dir) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
500 (new (file-name-as-directory (file-truename dirfile counter prev-dirs)))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
501 (setcar prev-dirs (cons (cons old new) (car prev-dirs))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
502 (setq dir new)))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
503 (if (equal ".." (file-name-nondirectory filename)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
504 (setq filename |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
505 (directory-file-name (file-name-directory (directory-file-name dir))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
506 done t) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
507 (if (equal "." (file-name-nondirectory filename)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
508 (setq filename (directory-file-name dir) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
509 done t) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
510 ;; Put it back on the file name. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
511 (setq filename (concat dir (file-name-nondirectory filename))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
512 ;; Is the file name the name of a link? |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
513 (setq target (file-symlink-p filename)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
514 (if target |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
515 ;; Yes => chase that link, then start all over |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
516 ;; since the link may point to a directory name that uses links. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
517 ;; We can't safely use expand-file-name here |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
518 ;; since target might look like foo/../bar where foo |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
519 ;; is itself a link. Instead, we handle . and .. above. |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
520 (setq filename |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
521 (if (file-name-absolute-p target) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
522 target |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
523 (concat dir target)) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
524 done nil) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
525 ;; No, we are done! |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
526 (setq done t)))))))) |
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
527 filename)) |
1672
ecf43116a845
The find-file-name-handler function in ../src/fileio.c is now
Jim Blandy <jimb@redhat.com>
parents:
1537
diff
changeset
|
528 |
3260
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
529 (defun file-chase-links (filename) |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
530 "Chase links in FILENAME until a name that is not a link. |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
531 Does not examine containing directories for links, |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
532 unlike `file-truename'." |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
533 (let (tem (count 100) (newname filename)) |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
534 (while (setq tem (file-symlink-p newname)) |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
535 (if (= count 0) |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
536 (error "Apparent cycle of symbolic links for %s" filename)) |
7430
1ec8830e553c
(file-chase-links): Delete redundant slashes.
Karl Heuer <kwzh@gnu.org>
parents:
7422
diff
changeset
|
537 ;; In the context of a link, `//' doesn't mean what Emacs thinks. |
1ec8830e553c
(file-chase-links): Delete redundant slashes.
Karl Heuer <kwzh@gnu.org>
parents:
7422
diff
changeset
|
538 (while (string-match "//+" tem) |
1ec8830e553c
(file-chase-links): Delete redundant slashes.
Karl Heuer <kwzh@gnu.org>
parents:
7422
diff
changeset
|
539 (setq tem (concat (substring tem 0 (1+ (match-beginning 0))) |
1ec8830e553c
(file-chase-links): Delete redundant slashes.
Karl Heuer <kwzh@gnu.org>
parents:
7422
diff
changeset
|
540 (substring tem (match-end 0))))) |
3263
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
541 ;; Handle `..' by hand, since it needs to work in the |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
542 ;; target of any directory symlink. |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
543 ;; This code is not quite complete; it does not handle |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
544 ;; embedded .. in some cases such as ./../foo and foo/bar/../../../lose. |
7430
1ec8830e553c
(file-chase-links): Delete redundant slashes.
Karl Heuer <kwzh@gnu.org>
parents:
7422
diff
changeset
|
545 (while (string-match "\\`\\.\\./" tem) |
3263
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
546 (setq tem (substring tem 3)) |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
547 (setq newname (file-name-as-directory |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
548 ;; Do the .. by hand. |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
549 (directory-file-name |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
550 (file-name-directory |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
551 ;; Chase links in the default dir of the symlink. |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
552 (file-chase-links |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
553 (directory-file-name |
82b564084ce6
(file-chase-links): Handle leading .. in symlink target.
Richard M. Stallman <rms@gnu.org>
parents:
3260
diff
changeset
|
554 (file-name-directory newname)))))))) |
3260
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
555 (setq newname (expand-file-name tem (file-name-directory newname))) |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
556 (setq count (1- count))) |
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
557 newname)) |
337 | 558 |
16831
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
559 (defun switch-to-buffer-other-window (buffer &optional norecord) |
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
560 "Select buffer BUFFER in another window. |
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
561 Optional second arg NORECORD non-nil means |
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
562 do not put this buffer at the front of the list of recently selected ones." |
337 | 563 (interactive "BSwitch to buffer in other window: ") |
564 (let ((pop-up-windows t)) | |
16831
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
565 (pop-to-buffer buffer t norecord))) |
337 | 566 |
16831
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
567 (defun switch-to-buffer-other-frame (buffer &optional norecord) |
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
568 "Switch to buffer BUFFER in another frame. |
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
569 Optional second arg NORECORD non-nil means |
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
570 do not put this buffer at the front of the list of recently selected ones." |
778 | 571 (interactive "BSwitch to buffer in other frame: ") |
572 (let ((pop-up-frames t)) | |
16831
3626b6cd2ad1
(switch-to-buffer-other-frame)
Richard M. Stallman <rms@gnu.org>
parents:
16792
diff
changeset
|
573 (pop-to-buffer buffer t norecord) |
8165
02ee07034f11
(switch-to-buffer-other-frame): Raise the frame.
Richard M. Stallman <rms@gnu.org>
parents:
8160
diff
changeset
|
574 (raise-frame (window-frame (selected-window))))) |
423 | 575 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
576 (defun find-file (filename) |
337 | 577 "Edit file FILENAME. |
578 Switch to a buffer visiting file FILENAME, | |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
579 creating one if none already exists." |
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
580 (interactive "FFind file: ") |
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
581 (switch-to-buffer (find-file-noselect filename))) |
337 | 582 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
583 (defun find-file-other-window (filename) |
337 | 584 "Edit file FILENAME, in another window. |
585 May create a new window, or reuse an existing one. | |
586 See the function `display-buffer'." | |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
587 (interactive "FFind file in other window: ") |
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
588 (switch-to-buffer-other-window (find-file-noselect filename))) |
337 | 589 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
590 (defun find-file-other-frame (filename) |
778 | 591 "Edit file FILENAME, in another frame. |
592 May create a new frame, or reuse an existing one. | |
423 | 593 See the function `display-buffer'." |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
594 (interactive "FFind file in other frame: ") |
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
595 (switch-to-buffer-other-frame (find-file-noselect filename))) |
423 | 596 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
597 (defun find-file-read-only (filename) |
337 | 598 "Edit file FILENAME but don't allow changes. |
599 Like \\[find-file] but marks buffer as read-only. | |
600 Use \\[toggle-read-only] to permit editing." | |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
601 (interactive "fFind file read-only: ") |
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
602 (find-file filename) |
3280
3b3717164db0
(find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
3263
diff
changeset
|
603 (setq buffer-read-only t) |
3b3717164db0
(find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
3263
diff
changeset
|
604 (current-buffer)) |
337 | 605 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
606 (defun find-file-read-only-other-window (filename) |
337 | 607 "Edit file FILENAME in another window but don't allow changes. |
608 Like \\[find-file-other-window] but marks buffer as read-only. | |
609 Use \\[toggle-read-only] to permit editing." | |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
610 (interactive "fFind file read-only other window: ") |
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
611 (find-file-other-window filename) |
3280
3b3717164db0
(find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
3263
diff
changeset
|
612 (setq buffer-read-only t) |
3b3717164db0
(find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
3263
diff
changeset
|
613 (current-buffer)) |
337 | 614 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
615 (defun find-file-read-only-other-frame (filename) |
778 | 616 "Edit file FILENAME in another frame but don't allow changes. |
617 Like \\[find-file-other-frame] but marks buffer as read-only. | |
423 | 618 Use \\[toggle-read-only] to permit editing." |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
619 (interactive "fFind file read-only other frame: ") |
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
620 (find-file-other-frame filename) |
3280
3b3717164db0
(find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
3263
diff
changeset
|
621 (setq buffer-read-only t) |
3b3717164db0
(find-file-run-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
3263
diff
changeset
|
622 (current-buffer)) |
423 | 623 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
624 (defun find-alternate-file-other-window (filename) |
13182
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
625 "Find file FILENAME as a replacement for the file in the next window. |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
626 This command does not select that window." |
13182
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
627 (interactive |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
628 (save-selected-window |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
629 (other-window 1) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
630 (let ((file buffer-file-name) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
631 (file-name nil) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
632 (file-dir nil)) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
633 (and file |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
634 (setq file-name (file-name-nondirectory file) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
635 file-dir (file-name-directory file))) |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
636 (list (read-file-name |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
637 "Find alternate file: " file-dir nil nil file-name))))) |
13182
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
638 (if (one-window-p) |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
639 (find-file-other-window filename) |
13182
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
640 (save-selected-window |
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
641 (other-window 1) |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
642 (find-alternate-file filename)))) |
13182
55c6e0f3c2f4
(find-alternate-file-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13118
diff
changeset
|
643 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
644 (defun find-alternate-file (filename) |
337 | 645 "Find file FILENAME, select its buffer, kill previous buffer. |
646 If the current buffer now contains an empty file that you just visited | |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
647 \(presumably by mistake), use this command to visit the file you really want." |
337 | 648 (interactive |
649 (let ((file buffer-file-name) | |
650 (file-name nil) | |
651 (file-dir nil)) | |
652 (and file | |
653 (setq file-name (file-name-nondirectory file) | |
654 file-dir (file-name-directory file))) | |
941 | 655 (list (read-file-name |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
656 "Find alternate file: " file-dir nil nil file-name)))) |
9048
dc5a9c83dc35
(find-alternate-file): Confirm killing buffer only if it is visiting a file.
Richard M. Stallman <rms@gnu.org>
parents:
8987
diff
changeset
|
657 (and (buffer-modified-p) (buffer-file-name) |
337 | 658 ;; (not buffer-read-only) |
659 (not (yes-or-no-p (format "Buffer %s is modified; kill anyway? " | |
660 (buffer-name)))) | |
661 (error "Aborted")) | |
662 (let ((obuf (current-buffer)) | |
663 (ofile buffer-file-name) | |
3191
d96fd9315996
(find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents:
3151
diff
changeset
|
664 (onum buffer-file-number) |
d96fd9315996
(find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents:
3151
diff
changeset
|
665 (otrue buffer-file-truename) |
337 | 666 (oname (buffer-name))) |
13037
3946c18462c8
(find-alternate-file): Kill any preexisting ` **lose**' buf.
Richard M. Stallman <rms@gnu.org>
parents:
13032
diff
changeset
|
667 (if (get-buffer " **lose**") |
3946c18462c8
(find-alternate-file): Kill any preexisting ` **lose**' buf.
Richard M. Stallman <rms@gnu.org>
parents:
13032
diff
changeset
|
668 (kill-buffer " **lose**")) |
337 | 669 (rename-buffer " **lose**") |
670 (unwind-protect | |
671 (progn | |
672 (unlock-buffer) | |
15410
559d91fe836a
(find-alternate-file): Don't clear buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents:
15365
diff
changeset
|
673 (setq buffer-file-name nil) |
559d91fe836a
(find-alternate-file): Don't clear buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents:
15365
diff
changeset
|
674 (setq buffer-file-number nil) |
559d91fe836a
(find-alternate-file): Don't clear buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents:
15365
diff
changeset
|
675 (setq buffer-file-truename nil) |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
676 (find-file filename)) |
337 | 677 (cond ((eq obuf (current-buffer)) |
678 (setq buffer-file-name ofile) | |
3191
d96fd9315996
(find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents:
3151
diff
changeset
|
679 (setq buffer-file-number onum) |
d96fd9315996
(find-alternate-file): Hide truename and inode number
Richard M. Stallman <rms@gnu.org>
parents:
3151
diff
changeset
|
680 (setq buffer-file-truename otrue) |
337 | 681 (lock-buffer) |
682 (rename-buffer oname)))) | |
683 (or (eq (current-buffer) obuf) | |
684 (kill-buffer obuf)))) | |
685 | |
686 (defun create-file-buffer (filename) | |
687 "Create a suitably named buffer for visiting FILENAME, and return it. | |
688 FILENAME (sans directory) is used unchanged if that name is free; | |
689 otherwise a string <2> or <3> or ... is appended to get an unused name." | |
690 (let ((lastname (file-name-nondirectory filename))) | |
691 (if (string= lastname "") | |
692 (setq lastname filename)) | |
693 (generate-new-buffer lastname))) | |
694 | |
423 | 695 (defun generate-new-buffer (name) |
696 "Create and return a buffer with a name based on NAME. | |
1461 | 697 Choose the buffer's name using `generate-new-buffer-name'." |
423 | 698 (get-buffer-create (generate-new-buffer-name name))) |
699 | |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
700 (defvar automount-dir-prefix "^/tmp_mnt/" |
817 | 701 "Regexp to match the automounter prefix in a directory name.") |
702 | |
1725
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
703 (defvar abbreviated-home-dir nil |
4847
e7d8cfd205d4
(abbreviated-home-dir): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
4837
diff
changeset
|
704 "The user's homedir abbreviated according to `directory-abbrev-list'.") |
1725
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
705 |
423 | 706 (defun abbreviate-file-name (filename) |
1461 | 707 "Return a version of FILENAME shortened using `directory-abbrev-alist'. |
423 | 708 This also substitutes \"~\" for the user's home directory. |
1461 | 709 Type \\[describe-variable] directory-abbrev-alist RET for more information." |
817 | 710 ;; Get rid of the prefixes added by the automounter. |
15548
ec7e7b99c680
(abbreviate-file-name): Ignore automount-dir-prefix if nil.
Richard M. Stallman <rms@gnu.org>
parents:
15545
diff
changeset
|
711 (if (and automount-dir-prefix |
ec7e7b99c680
(abbreviate-file-name): Ignore automount-dir-prefix if nil.
Richard M. Stallman <rms@gnu.org>
parents:
15545
diff
changeset
|
712 (string-match automount-dir-prefix filename) |
817 | 713 (file-exists-p (file-name-directory |
714 (substring filename (1- (match-end 0)))))) | |
715 (setq filename (substring filename (1- (match-end 0))))) | |
423 | 716 (let ((tail directory-abbrev-alist)) |
1725
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
717 ;; If any elt of directory-abbrev-alist matches this name, |
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
718 ;; abbreviate accordingly. |
423 | 719 (while tail |
720 (if (string-match (car (car tail)) filename) | |
721 (setq filename | |
722 (concat (cdr (car tail)) (substring filename (match-end 0))))) | |
723 (setq tail (cdr tail))) | |
1725
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
724 ;; Compute and save the abbreviated homedir name. |
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
725 ;; We defer computing this until the first time it's needed, to |
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
726 ;; give time for directory-abbrev-alist to be set properly. |
3624
386094c1a569
(abbreviate-file-name): Make abbreviated-home-dir
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
727 ;; We include a slash at the end, to avoid spurious matches |
386094c1a569
(abbreviate-file-name): Make abbreviated-home-dir
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
728 ;; such as `/usr/foobar' when the home dir is `/usr/foo'. |
1725
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
729 (or abbreviated-home-dir |
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
730 (setq abbreviated-home-dir |
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
731 (let ((abbreviated-home-dir "$foo")) |
3709
09e961c82be8
(abbreviate-file-name): Match home dir with no / if nothing else follows.
Richard M. Stallman <rms@gnu.org>
parents:
3672
diff
changeset
|
732 (concat "^" (abbreviate-file-name (expand-file-name "~")) |
09e961c82be8
(abbreviate-file-name): Match home dir with no / if nothing else follows.
Richard M. Stallman <rms@gnu.org>
parents:
3672
diff
changeset
|
733 "\\(/\\|$\\)")))) |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
734 |
1725
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
735 ;; If FILENAME starts with the abbreviated homedir, |
ac890f97e78b
(abbreviated-home-dir): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1672
diff
changeset
|
736 ;; make it start with `~' instead. |
5582
cc4892ee6807
(abbreviate-file-name): Don't convert / to ~/ when the home dir is /.
Richard M. Stallman <rms@gnu.org>
parents:
5468
diff
changeset
|
737 (if (and (string-match abbreviated-home-dir filename) |
cc4892ee6807
(abbreviate-file-name): Don't convert / to ~/ when the home dir is /.
Richard M. Stallman <rms@gnu.org>
parents:
5468
diff
changeset
|
738 ;; If the home dir is just /, don't change it. |
cc4892ee6807
(abbreviate-file-name): Don't convert / to ~/ when the home dir is /.
Richard M. Stallman <rms@gnu.org>
parents:
5468
diff
changeset
|
739 (not (and (= (match-end 0) 1) |
7440
1c0885a92832
(abbreviate-file-name): Add special case for ms-dos.
Richard M. Stallman <rms@gnu.org>
parents:
7430
diff
changeset
|
740 (= (aref filename 0) ?/))) |
13903
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
741 ;; MS-DOS root directories can come with a drive letter; |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
742 ;; Novell Netware allows drive letters beyond `Z:'. |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
743 (not (and (or (eq system-type 'ms-dos) |
9777
178a3bf170f3
(abbreviate-file-name): Handle drive letters on windows-nt as on ms-dos.
Richard M. Stallman <rms@gnu.org>
parents:
9731
diff
changeset
|
744 (eq system-type 'windows-nt)) |
7440
1c0885a92832
(abbreviate-file-name): Add special case for ms-dos.
Richard M. Stallman <rms@gnu.org>
parents:
7430
diff
changeset
|
745 (save-match-data |
13903
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
746 (string-match "^[a-zA-`]:/$" filename))))) |
423 | 747 (setq filename |
2630
47cf3a387530
* files.el (insert-directory): Undo change of March 23;
Jim Blandy <jimb@redhat.com>
parents:
2622
diff
changeset
|
748 (concat "~" |
3709
09e961c82be8
(abbreviate-file-name): Match home dir with no / if nothing else follows.
Richard M. Stallman <rms@gnu.org>
parents:
3672
diff
changeset
|
749 (substring filename (match-beginning 1) (match-end 1)) |
2630
47cf3a387530
* files.el (insert-directory): Undo change of March 23;
Jim Blandy <jimb@redhat.com>
parents:
2622
diff
changeset
|
750 (substring filename (match-end 0))))) |
423 | 751 filename)) |
752 | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
753 (defcustom find-file-not-true-dirname-list nil |
2622
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
754 "*List of logical names for which visiting shouldn't save the true dirname. |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
755 On VMS, when you visit a file using a logical name that searches a path, |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
756 you may or may not want the visited file name to record the specific |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
757 directory where the file was found. If you *do not* want that, add the logical |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
758 name to this list as a string." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
759 :type '(repeat (string :tag "Name")) |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
760 :group 'find-file) |
2622
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
761 |
6265
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
762 (defun find-buffer-visiting (filename) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
763 "Return the buffer visiting file FILENAME (a string). |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
764 This is like `get-file-buffer', except that it checks for any buffer |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
765 visiting the same file, possibly under a different name. |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
766 If there is no such live buffer, return nil." |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
767 (let ((buf (get-file-buffer filename)) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
768 (truename (abbreviate-file-name (file-truename filename)))) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
769 (or buf |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
770 (let ((list (buffer-list)) found) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
771 (while (and (not found) list) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
772 (save-excursion |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
773 (set-buffer (car list)) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
774 (if (and buffer-file-name |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
775 (string= buffer-file-truename truename)) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
776 (setq found (car list)))) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
777 (setq list (cdr list))) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
778 found) |
6272
d19db87b8c8e
(find-buffer-visiting): Fix typo in previous change.
Karl Heuer <kwzh@gnu.org>
parents:
6265
diff
changeset
|
779 (let ((number (nthcdr 10 (file-attributes truename))) |
6265
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
780 (list (buffer-list)) found) |
15329
19008fd7774d
(buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents:
15269
diff
changeset
|
781 (and buffer-file-numbers-unique |
19008fd7774d
(buffer-file-numbers-unique): New variable;
Richard M. Stallman <rms@gnu.org>
parents:
15269
diff
changeset
|
782 number |
6294
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
783 (while (and (not found) list) |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
784 (save-excursion |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
785 (set-buffer (car list)) |
6866
47bed999969a
(find-buffer-visiting): Don't check buffer-file-number
Richard M. Stallman <rms@gnu.org>
parents:
6780
diff
changeset
|
786 (if (and buffer-file-name |
47bed999969a
(find-buffer-visiting): Don't check buffer-file-number
Richard M. Stallman <rms@gnu.org>
parents:
6780
diff
changeset
|
787 (equal buffer-file-number number) |
6294
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
788 ;; Verify this buffer's file number |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
789 ;; still belongs to its file. |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
790 (file-exists-p buffer-file-name) |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
791 (equal (nthcdr 10 (file-attributes buffer-file-name)) |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
792 number)) |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
793 (setq found (car list)))) |
6044f2615082
(find-buffer-visiting): Don't compare NUMBER if it is nil.
Richard M. Stallman <rms@gnu.org>
parents:
6272
diff
changeset
|
794 (setq list (cdr list)))) |
6265
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
795 found)))) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
796 |
12850
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
797 (defun insert-file-contents-literally (filename &optional visit beg end replace) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
798 "Like `insert-file-contents', q.v., but only reads in the file. |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
799 A buffer may be modified in several ways after reading into the buffer due |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
800 to advanced Emacs features, such as file-name-handlers, format decoding, |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
801 find-file-hooks, etc. |
16334
5c4b76c66de2
(auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents:
16214
diff
changeset
|
802 This function ensures that none of these modifications will take place. |
5c4b76c66de2
(auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents:
16214
diff
changeset
|
803 |
5c4b76c66de2
(auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents:
16214
diff
changeset
|
804 This function does not work for remote files, because it turns off |
5c4b76c66de2
(auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents:
16214
diff
changeset
|
805 file name handlers and remote file access uses a file name handler." |
12850
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
806 (let ((file-name-handler-alist nil) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
807 (format-alist nil) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
808 (after-insert-file-functions nil) |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
809 (find-buffer-file-type-function |
12850
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
810 (if (fboundp 'find-buffer-file-type) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
811 (symbol-function 'find-buffer-file-type) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
812 nil))) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
813 (unwind-protect |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
814 (progn |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
815 (fset 'find-buffer-file-type (lambda (filename) t)) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
816 (insert-file-contents filename visit beg end replace)) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
817 (if find-buffer-file-type-function |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
818 (fset 'find-buffer-file-type find-buffer-file-type-function) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
819 (fmakunbound 'find-buffer-file-type))))) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
820 |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
821 (defun find-file-noselect (filename &optional nowarn rawfile) |
337 | 822 "Read file FILENAME into a buffer and return the buffer. |
823 If a buffer exists visiting FILENAME, return that one, but | |
824 verify that the file has not changed since visited or saved. | |
17004
cd1d930a2c98
(find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents:
16976
diff
changeset
|
825 The buffer is not selected, just returned to the caller. |
cd1d930a2c98
(find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents:
16976
diff
changeset
|
826 Optional first arg NOWARN non-nil means suppress any warning messages. |
cd1d930a2c98
(find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents:
16976
diff
changeset
|
827 Optional second arg RAWFILE non-nil means the file is read literally" |
817 | 828 (setq filename |
829 (abbreviate-file-name | |
830 (expand-file-name filename))) | |
337 | 831 (if (file-directory-p filename) |
832 (if find-file-run-dired | |
13497
156eb7abebbd
(find-file-noselect): Respect the value of
Karl Heuer <kwzh@gnu.org>
parents:
13496
diff
changeset
|
833 (dired-noselect (if find-file-visit-truename |
156eb7abebbd
(find-file-noselect): Respect the value of
Karl Heuer <kwzh@gnu.org>
parents:
13496
diff
changeset
|
834 (abbreviate-file-name (file-truename filename)) |
156eb7abebbd
(find-file-noselect): Respect the value of
Karl Heuer <kwzh@gnu.org>
parents:
13496
diff
changeset
|
835 filename)) |
14287
6cf50a9ff10f
(find-file-noselect): Fix error message style.
Karl Heuer <kwzh@gnu.org>
parents:
14229
diff
changeset
|
836 (error "%s is a directory" filename)) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
837 (let* ((buf (get-file-buffer filename)) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
838 (truename (abbreviate-file-name (file-truename filename))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
839 (number (nthcdr 10 (file-attributes truename))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
840 ;; Find any buffer for a file which has same truename. |
6265
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
841 (other (and (not buf) (find-buffer-visiting filename))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
842 error) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
843 ;; Let user know if there is a buffer with the same truename. |
6265
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
844 (if other |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
845 (progn |
7422
49876b60d0c6
(find-file-noselect): Suppress same-file warning if
Richard M. Stallman <rms@gnu.org>
parents:
7217
diff
changeset
|
846 (or nowarn |
49876b60d0c6
(find-file-noselect): Suppress same-file warning if
Richard M. Stallman <rms@gnu.org>
parents:
7217
diff
changeset
|
847 (string-equal filename (buffer-file-name other)) |
49876b60d0c6
(find-file-noselect): Suppress same-file warning if
Richard M. Stallman <rms@gnu.org>
parents:
7217
diff
changeset
|
848 (message "%s and %s are the same file" |
49876b60d0c6
(find-file-noselect): Suppress same-file warning if
Richard M. Stallman <rms@gnu.org>
parents:
7217
diff
changeset
|
849 filename (buffer-file-name other))) |
6265
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
850 ;; Optionally also find that buffer. |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
851 (if (or find-file-existing-other-name find-file-visit-truename) |
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
852 (setq buf other)))) |
337 | 853 (if buf |
854 (or nowarn | |
855 (verify-visited-file-modtime buf) | |
856 (cond ((not (file-exists-p filename)) | |
857 (error "File %s no longer exists!" filename)) | |
16684
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
858 ;; Certain files should be reverted automatically |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
859 ;; if they have changed on disk and not in the buffer. |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
860 ((and (not (buffer-modified-p buf)) |
17894
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
861 (let ((tail revert-without-query) |
16684
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
862 (found nil)) |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
863 (while tail |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
864 (if (string-match (car tail) filename) |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
865 (setq found t)) |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
866 (setq tail (cdr tail))) |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
867 found)) |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
868 (with-current-buffer buf |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
869 (message "Reverting file %s..." filename) |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
870 (revert-buffer t t) |
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
871 (message "Reverting file %s...done" filename))) |
337 | 872 ((yes-or-no-p |
11981
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
873 (if (string= (file-name-nondirectory filename) |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
874 (buffer-name buf)) |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
875 (format |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
876 (if (buffer-modified-p buf) |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
877 "File %s changed on disk. Discard your edits? " |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
878 "File %s changed on disk. Reread from disk? ") |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
879 (file-name-nondirectory filename)) |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
880 (format |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
881 (if (buffer-modified-p buf) |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
882 "File %s changed on disk. Discard your edits in %s? " |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
883 "File %s changed on disk. Reread from disk into %s? ") |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
884 (file-name-nondirectory filename) |
405d4e500223
(find-file-noselect): In "file changed" messages,
Karl Heuer <kwzh@gnu.org>
parents:
11867
diff
changeset
|
885 (buffer-name buf)))) |
16684
483a15efdf87
(find-file-revert-without-query): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16614
diff
changeset
|
886 (with-current-buffer buf |
337 | 887 (revert-buffer t t))))) |
888 (save-excursion | |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
889 ;;; The truename stuff makes this obsolete. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
890 ;;; (let* ((link-name (car (file-attributes filename))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
891 ;;; (linked-buf (and (stringp link-name) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
892 ;;; (get-file-buffer link-name)))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
893 ;;; (if (bufferp linked-buf) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
894 ;;; (message "Symbolic link to file in buffer %s" |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
895 ;;; (buffer-name linked-buf)))) |
337 | 896 (setq buf (create-file-buffer filename)) |
9731
2fbc8ef9ff44
(find-file-noselect): Call set-buffer-major-mode here.
Karl Heuer <kwzh@gnu.org>
parents:
9683
diff
changeset
|
897 (set-buffer-major-mode buf) |
337 | 898 (set-buffer buf) |
899 (erase-buffer) | |
12850
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
900 (if rawfile |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
901 (condition-case () |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
902 (insert-file-contents-literally filename t) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
903 (file-error |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
904 ;; Unconditionally set error |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
905 (setq error t))) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
906 (condition-case () |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
907 (insert-file-contents filename t) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
908 (file-error |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
909 ;; Run find-file-not-found-hooks until one returns non-nil. |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
910 (or (run-hook-with-args-until-success 'find-file-not-found-hooks) |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
911 ;; If they fail too, set error. |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
912 (setq error t))))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
913 ;; Find the file's truename, and maybe use that as visited name. |
6265
f901b6091821
(find-buffer-visiting): New function to look for another buffer visiting the
Karl Heuer <kwzh@gnu.org>
parents:
6168
diff
changeset
|
914 (setq buffer-file-truename truename) |
2622
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
915 (setq buffer-file-number number) |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
916 ;; On VMS, we may want to remember which directory in a search list |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
917 ;; the file was found in. |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
918 (and (eq system-type 'vax-vms) |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
919 (let (logical) |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
920 (if (string-match ":" (file-name-directory filename)) |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
921 (setq logical (substring (file-name-directory filename) |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
922 0 (match-beginning 0)))) |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
923 (not (member logical find-file-not-true-dirname-list))) |
15cb6ba42da3
(find-file-noselect): On VMS, maybe set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2613
diff
changeset
|
924 (setq buffer-file-name buffer-file-truename)) |
2613
709f672f450e
(find-file-noselect): Do set buffer-file-name
Richard M. Stallman <rms@gnu.org>
parents:
2600
diff
changeset
|
925 (if find-file-visit-truename |
3151
923f5564a2a1
(find-file-noselect): Expand buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents:
3122
diff
changeset
|
926 (setq buffer-file-name |
923f5564a2a1
(find-file-noselect): Expand buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents:
3122
diff
changeset
|
927 (setq filename |
923f5564a2a1
(find-file-noselect): Expand buffer-file-truename
Richard M. Stallman <rms@gnu.org>
parents:
3122
diff
changeset
|
928 (expand-file-name buffer-file-truename)))) |
337 | 929 ;; Set buffer's default directory to that of the file. |
930 (setq default-directory (file-name-directory filename)) | |
931 ;; Turn off backup files for certain file names. Since | |
932 ;; this is a permanent local, the major mode won't eliminate it. | |
933 (and (not (funcall backup-enable-predicate buffer-file-name)) | |
934 (progn | |
935 (make-local-variable 'backup-inhibited) | |
936 (setq backup-inhibited t))) | |
12850
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
937 (if rawfile |
0948f5af4680
(insert-file-contents-literally): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12846
diff
changeset
|
938 nil |
14636
2edced5a8756
(find-file-noselect): If after-find-file switches buffers,
Karl Heuer <kwzh@gnu.org>
parents:
14598
diff
changeset
|
939 (after-find-file error (not nowarn)) |
2edced5a8756
(find-file-noselect): If after-find-file switches buffers,
Karl Heuer <kwzh@gnu.org>
parents:
14598
diff
changeset
|
940 (setq buf (current-buffer))))) |
337 | 941 buf))) |
942 | |
8650
deb008af7049
(after-find-file-from-revert-buffer): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
8618
diff
changeset
|
943 (defvar after-find-file-from-revert-buffer nil) |
deb008af7049
(after-find-file-from-revert-buffer): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
8618
diff
changeset
|
944 |
8556
04a87d0e4a62
(after-find-file): New arg renamed to after-find-file-from-revert-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
8554
diff
changeset
|
945 (defun after-find-file (&optional error warn noauto |
13857
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
946 after-find-file-from-revert-buffer |
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
947 nomodes) |
337 | 948 "Called after finding a file and by the default revert function. |
949 Sets buffer mode, parses local variables. | |
1212
de70f50101c0
(after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents:
1182
diff
changeset
|
950 Optional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an |
337 | 951 error in reading the file. WARN non-nil means warn if there |
952 exists an auto-save file more recent than the visited file. | |
1212
de70f50101c0
(after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents:
1182
diff
changeset
|
953 NOAUTO means don't mess with auto-save mode. |
8556
04a87d0e4a62
(after-find-file): New arg renamed to after-find-file-from-revert-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
8554
diff
changeset
|
954 Fourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER non-nil |
04a87d0e4a62
(after-find-file): New arg renamed to after-find-file-from-revert-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
8554
diff
changeset
|
955 means this call was from `revert-buffer'. |
13857
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
956 Fifth arg NOMODES non-nil means don't alter the file's modes. |
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
957 Finishes by calling the functions in `find-file-hooks' |
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
958 unless NOMODES is non-nil." |
337 | 959 (setq buffer-read-only (not (file-writable-p buffer-file-name))) |
960 (if noninteractive | |
961 nil | |
962 (let* (not-serious | |
963 (msg | |
964 (cond ((and error (file-attributes buffer-file-name)) | |
965 (setq buffer-read-only t) | |
4466
9d62b3cb7dd6
(after-find-file): Improve warning message about
Richard M. Stallman <rms@gnu.org>
parents:
4375
diff
changeset
|
966 "File exists, but cannot be read.") |
337 | 967 ((not buffer-read-only) |
968 (if (and warn | |
969 (file-newer-than-file-p (make-auto-save-file-name) | |
970 buffer-file-name)) | |
15050
7cc3bad1b93e
(after-find-file): Mention file name in "auto save is newer" message.
Richard M. Stallman <rms@gnu.org>
parents:
15010
diff
changeset
|
971 (format "%s has auto save data; consider M-x recover-file" |
7cc3bad1b93e
(after-find-file): Mention file name in "auto save is newer" message.
Richard M. Stallman <rms@gnu.org>
parents:
15010
diff
changeset
|
972 (file-name-nondirectory buffer-file-name)) |
337 | 973 (setq not-serious t) |
974 (if error "(New file)" nil))) | |
975 ((not error) | |
976 (setq not-serious t) | |
977 "Note: file is write protected") | |
978 ((file-attributes (directory-file-name default-directory)) | |
979 "File not found and directory write-protected") | |
1537
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
980 ((file-exists-p (file-name-directory buffer-file-name)) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
981 (setq buffer-read-only nil)) |
337 | 982 (t |
423 | 983 (setq buffer-read-only nil) |
1537
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
984 (if (file-exists-p (file-name-directory (directory-file-name (file-name-directory buffer-file-name)))) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
985 "Use M-x make-dir RET RET to create the directory" |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
986 "Use C-u M-x make-dir RET RET to create directory and its parents"))))) |
337 | 987 (if msg |
988 (progn | |
989 (message msg) | |
990 (or not-serious (sit-for 1 nil t))))) | |
1212
de70f50101c0
(after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents:
1182
diff
changeset
|
991 (if (and auto-save-default (not noauto)) |
337 | 992 (auto-save-mode t))) |
13857
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
993 (if nomodes |
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
994 nil |
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
995 (normal-mode t) |
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
996 (run-hooks 'find-file-hooks))) |
337 | 997 |
998 (defun normal-mode (&optional find-file) | |
999 "Choose the major mode for this buffer automatically. | |
1000 Also sets up any specified local variables of the file. | |
1001 Uses the visited file name, the -*- line, and the local variables spec. | |
1002 | |
1003 This function is called automatically from `find-file'. In that case, | |
1004 we may set up specified local variables depending on the value of | |
1005 `enable-local-variables': if it is t, we do; if it is nil, we don't; | |
1006 otherwise, we query. `enable-local-variables' is ignored if you | |
1007 run `normal-mode' explicitly." | |
1008 (interactive) | |
1009 (or find-file (funcall (or default-major-mode 'fundamental-mode))) | |
1010 (condition-case err | |
1011 (set-auto-mode) | |
1012 (error (message "File mode specification error: %s" | |
1013 (prin1-to-string err)))) | |
1014 (condition-case err | |
566 | 1015 (let ((enable-local-variables (or (not find-file) |
1016 enable-local-variables))) | |
1017 (hack-local-variables)) | |
337 | 1018 (error (message "File local-variables error: %s" |
1019 (prin1-to-string err))))) | |
1020 | |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1021 (defvar auto-mode-alist |
13903
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
1022 '(("\\.te?xt\\'" . text-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1023 ("\\.c\\'" . c-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1024 ("\\.h\\'" . c-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1025 ("\\.tex\\'" . tex-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1026 ("\\.ltx\\'" . latex-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1027 ("\\.el\\'" . emacs-lisp-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1028 ("\\.mm\\'" . nroff-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1029 ("\\.me\\'" . nroff-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1030 ("\\.ms\\'" . nroff-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1031 ("\\.man\\'" . nroff-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1032 ("\\.scm\\'" . scheme-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1033 ("\\.l\\'" . lisp-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1034 ("\\.lisp\\'" . lisp-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1035 ("\\.f\\'" . fortran-mode) |
15056
4f2cfe6ee83c
(auto-mode-alist): .F gets fortran mode.
Richard M. Stallman <rms@gnu.org>
parents:
15050
diff
changeset
|
1036 ("\\.F\\'" . fortran-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1037 ("\\.for\\'" . fortran-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1038 ("\\.p\\'" . pascal-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1039 ("\\.pas\\'" . pascal-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1040 ("\\.ad[abs]\\'" . ada-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1041 ("\\.pl\\'" . perl-mode) |
15545
74530b877334
(auto-mode-alist): Treat .pm like .pl.
Richard M. Stallman <rms@gnu.org>
parents:
15496
diff
changeset
|
1042 ("\\.pm\\'" . perl-mode) |
17731
a08d96324d4f
(auto-mode-alist): Shuffle a few elements,
Richard M. Stallman <rms@gnu.org>
parents:
17673
diff
changeset
|
1043 ("\\.s?html?\\'" . html-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1044 ("\\.cc\\'" . c++-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1045 ("\\.hh\\'" . c++-mode) |
16414
941a90cef0b4
(auto-mode-alist): .hpp files get C++ mode.
Richard M. Stallman <rms@gnu.org>
parents:
16387
diff
changeset
|
1046 ("\\.hpp\\'" . c++-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1047 ("\\.C\\'" . c++-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1048 ("\\.H\\'" . c++-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1049 ("\\.cpp\\'" . c++-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1050 ("\\.cxx\\'" . c++-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1051 ("\\.hxx\\'" . c++-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1052 ("\\.c\\+\\+\\'" . c++-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1053 ("\\.h\\+\\+\\'" . c++-mode) |
16477
590593175cc7
more auto-mode-alist modes.
Simon Marshall <simon@gnu.org>
parents:
16470
diff
changeset
|
1054 ("\\.m\\'" . objc-mode) |
14987
5457cf99d7e1
(auto-mode-alist): Handle `.java'.
Richard M. Stallman <rms@gnu.org>
parents:
14927
diff
changeset
|
1055 ("\\.java\\'" . java-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1056 ("\\.mk\\'" . makefile-mode) |
14576
d82c768cb571
(auto-mode-alist): Recognize GNUmakefile.
Karl Heuer <kwzh@gnu.org>
parents:
14574
diff
changeset
|
1057 ("\\(M\\|m\\|GNUm\\)akefile\\(.in\\)?\\'" . makefile-mode) |
566 | 1058 ;;; Less common extensions come here |
1059 ;;; so more common ones above are found faster. | |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1060 ("\\.texinfo\\'" . texinfo-mode) |
13903
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
1061 ("\\.te?xi\\'" . texinfo-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1062 ("\\.s\\'" . asm-mode) |
13743
16b681bc9286
(auto-mode-alist): Recognize .S and .asm extensions.
Karl Heuer <kwzh@gnu.org>
parents:
13737
diff
changeset
|
1063 ("\\.S\\'" . asm-mode) |
16b681bc9286
(auto-mode-alist): Recognize .S and .asm extensions.
Karl Heuer <kwzh@gnu.org>
parents:
13737
diff
changeset
|
1064 ("\\.asm\\'" . asm-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1065 ("ChangeLog\\'" . change-log-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1066 ("change.log\\'" . change-log-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1067 ("changelo\\'" . change-log-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1068 ("ChangeLog.[0-9]+\\'" . change-log-mode) |
16334
5c4b76c66de2
(auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents:
16214
diff
changeset
|
1069 ;; for MSDOS and MS-Windows (which are case-insensitive) |
5c4b76c66de2
(auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents:
16214
diff
changeset
|
1070 ("changelog\\'" . change-log-mode) |
5c4b76c66de2
(auto-mode-alist): Add lower-case varieties of
Richard M. Stallman <rms@gnu.org>
parents:
16214
diff
changeset
|
1071 ("changelog.[0-9]+\\'" . change-log-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1072 ("\\$CHANGE_LOG\\$\\.TXT" . change-log-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1073 ("\\.scm\\.[0-9]*\\'" . scheme-mode) |
14469
713f9bf02e20
(auto-mode-alist): .ksh suffix means sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
14401
diff
changeset
|
1074 ("\\.[ck]?sh\\'\\|\\.shar\\'\\|/\\.z?profile\\'" . sh-mode) |
14025
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1075 ("/\\.\\(bash_profile\\|z?login\\|bash_login\\|z?logout\\)\\'" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1076 ("/\\.\\(bash_logout\\|[kz]shrc\\|bashrc\\|t?cshrc\\|esrc\\)\\'" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1077 ("/\\.\\([kz]shenv\\|xinitrc\\|startxrc\\|xsession\\)\\'" . sh-mode) |
12554
fdc58e7e37c2
(auto-mode-alist): Move .scm.[0-9] before nroff-mode.
Karl Heuer <kwzh@gnu.org>
parents:
12438
diff
changeset
|
1078 ;;; The following should come after the ChangeLog pattern |
fdc58e7e37c2
(auto-mode-alist): Move .scm.[0-9] before nroff-mode.
Karl Heuer <kwzh@gnu.org>
parents:
12438
diff
changeset
|
1079 ;;; for the sake of ChangeLog.1, etc. |
fdc58e7e37c2
(auto-mode-alist): Move .scm.[0-9] before nroff-mode.
Karl Heuer <kwzh@gnu.org>
parents:
12438
diff
changeset
|
1080 ;;; and after the .scm.[0-9] pattern too. |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1081 ("\\.[12345678]\\'" . nroff-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1082 ("\\.TeX\\'" . tex-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1083 ("\\.sty\\'" . latex-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1084 ("\\.cls\\'" . latex-mode) ;LaTeX 2e class |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1085 ("\\.bbl\\'" . latex-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1086 ("\\.bib\\'" . bibtex-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1087 ("\\.article\\'" . text-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1088 ("\\.letter\\'" . text-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1089 ("\\.tcl\\'" . tcl-mode) |
14229
d9ef2de9c722
(auto-mode-alist): Recognize ".exp" suffix.
Karl Heuer <kwzh@gnu.org>
parents:
14205
diff
changeset
|
1090 ("\\.exp\\'" . tcl-mode) |
14574
1b6e39d4143c
(auto-mode-alist): Recognize .itcl and .itk suffixes.
Karl Heuer <kwzh@gnu.org>
parents:
14469
diff
changeset
|
1091 ("\\.itcl\\'" . tcl-mode) |
1b6e39d4143c
(auto-mode-alist): Recognize .itcl and .itk suffixes.
Karl Heuer <kwzh@gnu.org>
parents:
14469
diff
changeset
|
1092 ("\\.itk\\'" . tcl-mode) |
17731
a08d96324d4f
(auto-mode-alist): Shuffle a few elements,
Richard M. Stallman <rms@gnu.org>
parents:
17673
diff
changeset
|
1093 ("\\.icn\\'" . icon-mode) |
a08d96324d4f
(auto-mode-alist): Shuffle a few elements,
Richard M. Stallman <rms@gnu.org>
parents:
17673
diff
changeset
|
1094 ("\\.sim\\'" . simula-mode) |
a08d96324d4f
(auto-mode-alist): Shuffle a few elements,
Richard M. Stallman <rms@gnu.org>
parents:
17673
diff
changeset
|
1095 ("\\.mss\\'" . scribe-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1096 ("\\.f90\\'" . f90-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1097 ("\\.lsp\\'" . lisp-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1098 ("\\.awk\\'" . awk-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1099 ("\\.prolog\\'" . prolog-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1100 ("\\.tar\\'" . tar-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1101 ("\\.\\(arc\\|zip\\|lzh\\|zoo\\)\\'" . archive-mode) |
15445
d89ae6e193da
(auto-mode-alist): Add uppercase version of archive
Richard M. Stallman <rms@gnu.org>
parents:
15410
diff
changeset
|
1102 ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\)\\'" . archive-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1103 ;; Mailer puts message to be edited in |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1104 ;; /tmp/Re.... or Message |
14205
1e6f316414cf
(auto-mode-alist): Use "\\`" instead of "^".
Karl Heuer <kwzh@gnu.org>
parents:
14176
diff
changeset
|
1105 ("\\`/tmp/Re" . text-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1106 ("/Message[0-9]*\\'" . text-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1107 ("/drafts/[0-9]+\\'" . mh-letter-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1108 ;; some news reader is reported to use this |
14205
1e6f316414cf
(auto-mode-alist): Use "\\`" instead of "^".
Karl Heuer <kwzh@gnu.org>
parents:
14176
diff
changeset
|
1109 ("\\`/tmp/fol/" . text-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1110 ("\\.y\\'" . c-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1111 ("\\.lex\\'" . c-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1112 ("\\.oak\\'" . scheme-mode) |
14176
5e5779fa54cb
(auto-mode-alist): Add sgml-mode and html-mode.
Richard M. Stallman <rms@gnu.org>
parents:
14112
diff
changeset
|
1113 ("\\.sgml?\\'" . sgml-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1114 ("\\.dtd\\'" . sgml-mode) |
17421
28ec3ecb171e
(auto-mode-alist): Add .dsl and .dsssl for dsssl-mode.
Richard M. Stallman <rms@gnu.org>
parents:
17379
diff
changeset
|
1115 ("\\.ds\\(ss\\)?l\\'" . dsssl-mode) |
13662
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1116 ;; .emacs following a directory delimiter |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1117 ;; in either Unix or VMS syntax. |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1118 ("[]>:/]\\..*emacs\\'" . emacs-lisp-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1119 ;; _emacs following a directory delimiter |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1120 ;; in MsDos syntax |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1121 ("[:/]_emacs\\'" . emacs-lisp-mode) |
cb0496b98829
(auto-mode-alist): Don't purecopy the alist elts.
Richard M. Stallman <rms@gnu.org>
parents:
13497
diff
changeset
|
1122 ("\\.ml\\'" . lisp-mode)) |
566 | 1123 "\ |
1124 Alist of filename patterns vs corresponding major mode functions. | |
9602
13106af26190
(auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
9601
diff
changeset
|
1125 Each element looks like (REGEXP . FUNCTION) or (REGEXP FUNCTION NON-NIL). |
13106af26190
(auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
9601
diff
changeset
|
1126 \(NON-NIL stands for anything that is not nil; the value does not matter.) |
13106af26190
(auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
9601
diff
changeset
|
1127 Visiting a file whose name matches REGEXP specifies FUNCTION as the |
13106af26190
(auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
9601
diff
changeset
|
1128 mode function to use. FUNCTION will be called, unless it is nil. |
13106af26190
(auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
9601
diff
changeset
|
1129 |
13106af26190
(auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
9601
diff
changeset
|
1130 If the element has the form (REGEXP FUNCTION NON-NIL), then after |
13106af26190
(auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
9601
diff
changeset
|
1131 calling FUNCTION (if it's not nil), we delete the suffix that matched |
13106af26190
(auto-mode-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
9601
diff
changeset
|
1132 REGEXP and search the list again for another match.") |
566 | 1133 |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
1134 (defvar interpreter-mode-alist |
5956
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1135 '(("perl" . perl-mode) |
15010
1afa2e4aed57
(interpreter-mode-alist): Recognize perl5.
Richard M. Stallman <rms@gnu.org>
parents:
14987
diff
changeset
|
1136 ("perl5" . perl-mode) |
5956
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1137 ("wish" . tcl-mode) |
7662
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1138 ("wishx" . tcl-mode) |
5973
628188ceb43b
interpreter-mode-alist: Add modes for awk, gawk, and scm scripts.
Noah Friedman <friedman@splode.com>
parents:
5958
diff
changeset
|
1139 ("tcl" . tcl-mode) |
7662
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1140 ("tclsh" . tcl-mode) |
5973
628188ceb43b
interpreter-mode-alist: Add modes for awk, gawk, and scm scripts.
Noah Friedman <friedman@splode.com>
parents:
5958
diff
changeset
|
1141 ("awk" . awk-mode) |
14598
5a1435bd8ff3
(interpreter-mode-alist): Add mawk.
Karl Heuer <kwzh@gnu.org>
parents:
14576
diff
changeset
|
1142 ("mawk" . awk-mode) |
13091
9f60089ce2bb
(interpreter-mode-alist): Handle nawk.
Richard M. Stallman <rms@gnu.org>
parents:
13037
diff
changeset
|
1143 ("nawk" . awk-mode) |
5973
628188ceb43b
interpreter-mode-alist: Add modes for awk, gawk, and scm scripts.
Noah Friedman <friedman@splode.com>
parents:
5958
diff
changeset
|
1144 ("gawk" . awk-mode) |
14025
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1145 ("scm" . scheme-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1146 ("ash" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1147 ("bash" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1148 ("csh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1149 ("dtksh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1150 ("es" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1151 ("itcsh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1152 ("jsh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1153 ("ksh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1154 ("oash" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1155 ("pdksh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1156 ("rc" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1157 ("sh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1158 ("sh5" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1159 ("tcsh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1160 ("wksh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1161 ("wsh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1162 ("zsh" . sh-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1163 ("tail" . text-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1164 ("more" . text-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1165 ("less" . text-mode) |
c73d14ef6a6a
(interpreter-mode-alist): Add most shells, with sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
13980
diff
changeset
|
1166 ("pg" . text-mode)) |
5956
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1167 "Alist mapping interpreter names to major modes. |
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1168 This alist applies to files whose first line starts with `#!'. |
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1169 Each element looks like (INTERPRETER . MODE). |
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1170 The car of each element is compared with |
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1171 the name of the interpreter specified in the first line. |
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1172 If it matches, mode MODE is selected.") |
586a37656a31
(interpreter-mode-alist): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5804
diff
changeset
|
1173 |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
1174 (defvar inhibit-first-line-modes-regexps '("\\.tar\\'" "\\.tgz\\'") |
6780
06eb068ba329
(inhibit-first-line-modes-regexps): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
6734
diff
changeset
|
1175 "List of regexps; if one matches a file name, don't look for `-*-'.") |
3364
3dd9b89c6a17
(inhibit-local-variables-regexps): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
3280
diff
changeset
|
1176 |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
1177 (defvar inhibit-first-line-modes-suffixes nil |
11180
7a9dceb0fb96
(inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
11160
diff
changeset
|
1178 "List of regexps for what to ignore, for `inhibit-first-line-modes-regexps'. |
7a9dceb0fb96
(inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
11160
diff
changeset
|
1179 When checking `inhibit-first-line-modes-regexps', we first discard |
7a9dceb0fb96
(inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
11160
diff
changeset
|
1180 from the end of the file name anything that matches one of these regexps.") |
7a9dceb0fb96
(inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
11160
diff
changeset
|
1181 |
5453
691f7961e32c
[ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents:
5398
diff
changeset
|
1182 (defvar user-init-file |
691f7961e32c
[ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents:
5398
diff
changeset
|
1183 "" ; set by command-line |
691f7961e32c
[ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents:
5398
diff
changeset
|
1184 "File name including directory of user's initialization file.") |
691f7961e32c
[ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents:
5398
diff
changeset
|
1185 |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1186 (defun set-auto-mode (&optional just-from-file-name) |
337 | 1187 "Select major mode appropriate for current buffer. |
7662
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1188 This checks for a -*- mode tag in the buffer's text, |
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1189 compares the filename against the entries in `auto-mode-alist', |
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1190 or checks the interpreter that runs this file against |
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1191 `interpreter-mode-alist'. |
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1192 |
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1193 It does not check for the `mode:' local variable in the |
25cf7bc3b8c5
(interpreter-mode-alist): Add wishx, tclsh.
Richard M. Stallman <rms@gnu.org>
parents:
7643
diff
changeset
|
1194 Local Variables section of the file; for that, use `hack-local-variables'. |
566 | 1195 |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1196 If `enable-local-variables' is nil, this function does not check for a |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1197 -*- mode tag. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1198 |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1199 If the optional argument JUST-FROM-FILE-NAME is non-nil, |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1200 then we do not set anything but the major mode, |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1201 and we don't even do that unless it would come from the file name." |
337 | 1202 ;; Look for -*-MODENAME-*- or -*- ... mode: MODENAME; ... -*- |
13496
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1203 (let (beg end done modes) |
337 | 1204 (save-excursion |
1205 (goto-char (point-min)) | |
1206 (skip-chars-forward " \t\n") | |
4699
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1207 (and enable-local-variables |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1208 ;; Don't look for -*- if this file name matches any |
6780
06eb068ba329
(inhibit-first-line-modes-regexps): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
6734
diff
changeset
|
1209 ;; of the regexps in inhibit-first-line-modes-regexps. |
9251
2ecfcd3f778c
(set-auto-mode): Discard versions from file name before
Richard M. Stallman <rms@gnu.org>
parents:
9234
diff
changeset
|
1210 (let ((temp inhibit-first-line-modes-regexps) |
11636
919ac497342e
(set-auto-mode): If buffer has no file, use buffer name.
Richard M. Stallman <rms@gnu.org>
parents:
11630
diff
changeset
|
1211 (name (if buffer-file-name |
919ac497342e
(set-auto-mode): If buffer has no file, use buffer name.
Richard M. Stallman <rms@gnu.org>
parents:
11630
diff
changeset
|
1212 (file-name-sans-versions buffer-file-name) |
919ac497342e
(set-auto-mode): If buffer has no file, use buffer name.
Richard M. Stallman <rms@gnu.org>
parents:
11630
diff
changeset
|
1213 (buffer-name)))) |
11189
a2a85a29cdd6
(set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11180
diff
changeset
|
1214 (while (let ((sufs inhibit-first-line-modes-suffixes)) |
a2a85a29cdd6
(set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11180
diff
changeset
|
1215 (while (and sufs (not (string-match (car sufs) name))) |
a2a85a29cdd6
(set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11180
diff
changeset
|
1216 (setq sufs (cdr sufs))) |
a2a85a29cdd6
(set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11180
diff
changeset
|
1217 sufs) |
a2a85a29cdd6
(set-auto-mode): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11180
diff
changeset
|
1218 (setq name (substring name 0 (match-beginning 0)))) |
4699
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1219 (while (and temp |
11180
7a9dceb0fb96
(inhibit-first-line-modes-suffixes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
11160
diff
changeset
|
1220 (not (string-match (car temp) name))) |
4699
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1221 (setq temp (cdr temp))) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1222 (not temp)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1223 (search-forward "-*-" (save-excursion |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1224 ;; If the file begins with "#!" |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1225 ;; (exec interpreter magic), look |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1226 ;; for mode frobs in the first two |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1227 ;; lines. You cannot necessarily |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1228 ;; put them in the first line of |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1229 ;; such a file without screwing up |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1230 ;; the interpreter invocation. |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1231 (end-of-line (and (looking-at "^#!") 2)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1232 (point)) t) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1233 (progn |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1234 (skip-chars-forward " \t") |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1235 (setq beg (point)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1236 (search-forward "-*-" |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1237 (save-excursion (end-of-line) (point)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1238 t)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1239 (progn |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1240 (forward-char -3) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1241 (skip-chars-backward " \t") |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1242 (setq end (point)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1243 (goto-char beg) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1244 (if (save-excursion (search-forward ":" end t)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1245 ;; Find all specifications for the `mode:' variable |
6322 | 1246 ;; and execute them left to right. |
4699
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1247 (while (let ((case-fold-search t)) |
10132
d6ab8efcd2ff
(set-auto-mode): Don't get confused by anything ending in "mode:" which isn't
Karl Heuer <kwzh@gnu.org>
parents:
9995
diff
changeset
|
1248 (or (and (looking-at "mode:") |
d6ab8efcd2ff
(set-auto-mode): Don't get confused by anything ending in "mode:" which isn't
Karl Heuer <kwzh@gnu.org>
parents:
9995
diff
changeset
|
1249 (goto-char (match-end 0))) |
d6ab8efcd2ff
(set-auto-mode): Don't get confused by anything ending in "mode:" which isn't
Karl Heuer <kwzh@gnu.org>
parents:
9995
diff
changeset
|
1250 (re-search-forward "[ \t;]mode:" end t))) |
4699
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1251 (skip-chars-forward " \t") |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1252 (setq beg (point)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1253 (if (search-forward ";" end t) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1254 (forward-char -1) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1255 (goto-char end)) |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1256 (skip-chars-backward " \t") |
13496
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1257 (setq modes (cons (intern (concat (downcase (buffer-substring beg (point))) "-mode")) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1258 modes))) |
4699
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1259 ;; Simple -*-MODE-*- case. |
13496
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1260 (setq modes (cons (intern (concat (downcase (buffer-substring beg end)) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1261 "-mode")) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1262 modes)))))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1263 ;; If we found modes to use, invoke them now, |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1264 ;; outside the save-excursion. |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1265 (if modes |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1266 (unless just-from-file-name |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1267 (mapcar 'funcall (nreverse modes)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1268 (setq done t))) |
13496
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1269 ;; If we didn't find a mode from a -*- line, try using the file name. |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1270 (if (and (not done) buffer-file-name) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1271 (let ((name buffer-file-name) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1272 (keep-going t)) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1273 ;; Remove backup-suffixes from file name. |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1274 (setq name (file-name-sans-versions name)) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1275 (while keep-going |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1276 (setq keep-going nil) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1277 (let ((alist auto-mode-alist) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1278 (mode nil)) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1279 ;; Find first matching alist entry. |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
1280 (let ((case-fold-search |
13496
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1281 (memq system-type '(vax-vms windows-nt)))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1282 (while (and (not mode) alist) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1283 (if (string-match (car (car alist)) name) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1284 (if (and (consp (cdr (car alist))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1285 (nth 2 (car alist))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1286 (progn |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1287 (setq mode (car (cdr (car alist))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1288 name (substring name 0 (match-beginning 0)) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1289 keep-going t)) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1290 (setq mode (cdr (car alist)) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1291 keep-going nil))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1292 (setq alist (cdr alist)))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1293 (if mode |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1294 (funcall mode) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1295 ;; If we can't deduce a mode from the file name, |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1296 ;; look for an interpreter specified in the first line. |
13737
3902b2781a8f
(set-auto-mode): Recognize `#!/bin/env INTERPRETER' hack.
Karl Heuer <kwzh@gnu.org>
parents:
13693
diff
changeset
|
1297 ;; As a special case, allow for things like "#!/bin/env perl", |
3902b2781a8f
(set-auto-mode): Recognize `#!/bin/env INTERPRETER' hack.
Karl Heuer <kwzh@gnu.org>
parents:
13693
diff
changeset
|
1298 ;; which finds the interpreter anywhere in $PATH. |
13496
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1299 (let ((interpreter |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1300 (save-excursion |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1301 (goto-char (point-min)) |
14598
5a1435bd8ff3
(interpreter-mode-alist): Add mawk.
Karl Heuer <kwzh@gnu.org>
parents:
14576
diff
changeset
|
1302 (if (looking-at "#![ \t]?\\([^ \t\n]*/bin/env[ \t]\\)?\\([^ \t\n]+\\)") |
13737
3902b2781a8f
(set-auto-mode): Recognize `#!/bin/env INTERPRETER' hack.
Karl Heuer <kwzh@gnu.org>
parents:
13693
diff
changeset
|
1303 (buffer-substring (match-beginning 2) |
3902b2781a8f
(set-auto-mode): Recognize `#!/bin/env INTERPRETER' hack.
Karl Heuer <kwzh@gnu.org>
parents:
13693
diff
changeset
|
1304 (match-end 2)) |
13496
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1305 ""))) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1306 elt) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1307 ;; Map interpreter name to a mode. |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1308 (setq elt (assoc (file-name-nondirectory interpreter) |
1bd9f5d576ce
(set-auto-mode): If mode cmds move point, obey them.
Richard M. Stallman <rms@gnu.org>
parents:
13326
diff
changeset
|
1309 interpreter-mode-alist)) |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1310 (unless just-from-file-name |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1311 (if elt |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1312 (funcall (cdr elt)))))))))))) |
337 | 1313 |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1314 (defun hack-local-variables-prop-line () |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1315 ;; Set local variables specified in the -*- line. |
4699
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1316 ;; Ignore any specification for `mode:'; |
f57fe6dbf4a0
(hack-local-variables-prop-line): Ignore any specification
Richard M. Stallman <rms@gnu.org>
parents:
4645
diff
changeset
|
1317 ;; set-auto-mode should already have handled that. |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1318 (save-excursion |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1319 (goto-char (point-min)) |
6575
9aba6be8e460
(hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents:
6574
diff
changeset
|
1320 (let ((result nil) |
9aba6be8e460
(hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents:
6574
diff
changeset
|
1321 (end (save-excursion (end-of-line (and (looking-at "^#!") 2)) (point)))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1322 ;; Parse the -*- line into the `result' alist. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1323 (cond ((not (search-forward "-*-" end t)) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1324 ;; doesn't have one. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1325 nil) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1326 ((looking-at "[ \t]*\\([^ \t\n\r:;]+\\)\\([ \t]*-\\*-\\)") |
6575
9aba6be8e460
(hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents:
6574
diff
changeset
|
1327 ;; Simple form: "-*- MODENAME -*-". Already handled. |
9aba6be8e460
(hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents:
6574
diff
changeset
|
1328 nil) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1329 (t |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1330 ;; Hairy form: '-*-' [ <variable> ':' <value> ';' ]* '-*-' |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1331 ;; (last ";" is optional). |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1332 (save-excursion |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1333 (if (search-forward "-*-" end t) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1334 (setq end (- (point) 3)) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1335 (error "-*- not terminated before end of line"))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1336 (while (< (point) end) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1337 (or (looking-at "[ \t]*\\([^ \t\n:]+\\)[ \t]*:[ \t]*") |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1338 (error "malformed -*- line")) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1339 (goto-char (match-end 0)) |
12068
5d44c48f3b7b
(hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents:
12050
diff
changeset
|
1340 ;; There used to be a downcase here, |
5d44c48f3b7b
(hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents:
12050
diff
changeset
|
1341 ;; but the manual didn't say so, |
5d44c48f3b7b
(hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents:
12050
diff
changeset
|
1342 ;; and people want to set var names that aren't all lc. |
5d44c48f3b7b
(hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents:
12050
diff
changeset
|
1343 (let ((key (intern (buffer-substring |
5d44c48f3b7b
(hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents:
12050
diff
changeset
|
1344 (match-beginning 1) |
5d44c48f3b7b
(hack-local-variables-prop-line): Don't downcase var name.
Karl Heuer <kwzh@gnu.org>
parents:
12050
diff
changeset
|
1345 (match-end 1)))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1346 (val (save-restriction |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1347 (narrow-to-region (point) end) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1348 (read (current-buffer))))) |
16440
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1349 ;; It is traditional to ignore |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1350 ;; case when checking for `mode' in set-auto-mode, |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1351 ;; so we must do that here as well. |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1352 ;; That is inconsistent, but we're stuck with it. |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1353 (or (equal (downcase (symbol-name key)) "mode") |
6575
9aba6be8e460
(hack-local-variables-prop-line): Search two lines if "#!".
Karl Heuer <kwzh@gnu.org>
parents:
6574
diff
changeset
|
1354 (setq result (cons (cons key val) result))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1355 (skip-chars-forward " \t;"))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1356 (setq result (nreverse result)))) |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
1357 |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1358 (if (and result |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1359 (or (eq enable-local-variables t) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1360 (and enable-local-variables |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1361 (save-window-excursion |
5292
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1362 (condition-case nil |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1363 (switch-to-buffer (current-buffer)) |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1364 (error |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1365 ;; If we fail to switch in the selected window, |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1366 ;; it is probably a minibuffer. |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1367 ;; So try another window. |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1368 (condition-case nil |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1369 (switch-to-buffer-other-window (current-buffer)) |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1370 (error |
4b1f2e4dcf34
(hack-local-variables-prop-line): If we can't switch-to-buffer
Richard M. Stallman <rms@gnu.org>
parents:
4965
diff
changeset
|
1371 (switch-to-buffer-other-frame (current-buffer)))))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1372 (y-or-n-p (format "Set local variables as specified in -*- line of %s? " |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1373 (file-name-nondirectory buffer-file-name))))))) |
15365
104a97493dcc
(hack-local-variables-prop-line): Bind enable-local-eval.
Richard M. Stallman <rms@gnu.org>
parents:
15329
diff
changeset
|
1374 (let ((enable-local-eval enable-local-eval)) |
104a97493dcc
(hack-local-variables-prop-line): Bind enable-local-eval.
Richard M. Stallman <rms@gnu.org>
parents:
15329
diff
changeset
|
1375 (while result |
104a97493dcc
(hack-local-variables-prop-line): Bind enable-local-eval.
Richard M. Stallman <rms@gnu.org>
parents:
15329
diff
changeset
|
1376 (hack-one-local-variable (car (car result)) (cdr (car result))) |
104a97493dcc
(hack-local-variables-prop-line): Bind enable-local-eval.
Richard M. Stallman <rms@gnu.org>
parents:
15329
diff
changeset
|
1377 (setq result (cdr result)))))))) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1378 |
10169
04425b872c5b
(hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents:
10149
diff
changeset
|
1379 (defvar hack-local-variables-hook nil |
04425b872c5b
(hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents:
10149
diff
changeset
|
1380 "Normal hook run after processing a file's local variables specs. |
04425b872c5b
(hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents:
10149
diff
changeset
|
1381 Major modes can use this to examine user-specified local variables |
04425b872c5b
(hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents:
10149
diff
changeset
|
1382 in order to initialize other data structure based on them.") |
04425b872c5b
(hack-local-variables): Run hack-local-variables-hook.
Richard M. Stallman <rms@gnu.org>
parents:
10149
diff
changeset
|
1383 |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1384 (defun hack-local-variables (&optional mode-only) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1385 "Parse and put into effect this buffer's local variables spec. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1386 If MODE-ONLY is non-nil, all we do is check whether the major mode |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1387 is specified, returning t if it is specified." |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1388 (unless mode-only |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1389 (hack-local-variables-prop-line)) |
337 | 1390 ;; Look for "Local variables:" line in last page. |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1391 (let (mode-specified) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1392 (save-excursion |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1393 (goto-char (point-max)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1394 (search-backward "\n\^L" (max (- (point-max) 3000) (point-min)) 'move) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1395 (if (let ((case-fold-search t)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1396 (and (search-forward "Local Variables:" nil t) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1397 (or (eq enable-local-variables t) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1398 mode-only |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1399 (and enable-local-variables |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1400 (save-window-excursion |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1401 (switch-to-buffer (current-buffer)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1402 (save-excursion |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1403 (beginning-of-line) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1404 (set-window-start (selected-window) (point))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1405 (y-or-n-p (format "Set local variables as specified at end of %s? " |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1406 (if buffer-file-name |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1407 (file-name-nondirectory |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1408 buffer-file-name) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1409 (concat "buffer " |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1410 (buffer-name)))))))))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1411 (let ((continue t) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1412 prefix prefixlen suffix beg |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1413 mode-specified |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1414 (enable-local-eval enable-local-eval)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1415 ;; The prefix is what comes before "local variables:" in its line. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1416 ;; The suffix is what comes after "local variables:" in its line. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1417 (skip-chars-forward " \t") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1418 (or (eolp) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1419 (setq suffix (buffer-substring (point) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1420 (progn (end-of-line) (point))))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1421 (goto-char (match-beginning 0)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1422 (or (bolp) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1423 (setq prefix |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1424 (buffer-substring (point) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1425 (progn (beginning-of-line) (point))))) |
566 | 1426 |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1427 (if prefix (setq prefixlen (length prefix) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1428 prefix (regexp-quote prefix))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1429 (if suffix (setq suffix (concat (regexp-quote suffix) "$"))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1430 (while continue |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1431 ;; Look at next local variable spec. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1432 (if selective-display (re-search-forward "[\n\C-m]") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1433 (forward-line 1)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1434 ;; Skip the prefix, if any. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1435 (if prefix |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1436 (if (looking-at prefix) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1437 (forward-char prefixlen) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1438 (error "Local variables entry is missing the prefix"))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1439 ;; Find the variable name; strip whitespace. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1440 (skip-chars-forward " \t") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1441 (setq beg (point)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1442 (skip-chars-forward "^:\n") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1443 (if (eolp) (error "Missing colon in local variables entry")) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1444 (skip-chars-backward " \t") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1445 (let* ((str (buffer-substring beg (point))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1446 (var (read str)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1447 val) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1448 ;; Setting variable named "end" means end of list. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1449 (if (string-equal (downcase str) "end") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1450 (setq continue nil) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1451 ;; Otherwise read the variable value. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1452 (skip-chars-forward "^:") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1453 (forward-char 1) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1454 (setq val (read (current-buffer))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1455 (skip-chars-backward "\n") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1456 (skip-chars-forward " \t") |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1457 (or (if suffix (looking-at suffix) (eolp)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1458 (error "Local variables entry is terminated incorrectly")) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1459 (if mode-only |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1460 (if (eq var 'mode) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1461 (setq mode-specified t)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1462 ;; Set the variable. "Variables" mode and eval are funny. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1463 (hack-one-local-variable var val)))))))) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1464 (unless mode-only |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1465 (run-hooks 'hack-local-variables-hook)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1466 mode-specified)) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1467 |
16687
049c87a96dca
Change defconsts to defvars.
Richard M. Stallman <rms@gnu.org>
parents:
16684
diff
changeset
|
1468 (defvar ignored-local-variables |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1469 '(enable-local-eval) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1470 "Variables to be ignored in a file's local variable spec.") |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1471 |
6734
6e61dbbfce80
(hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
6733
diff
changeset
|
1472 ;; Get confirmation before setting these variables as locals in a file. |
8148
0035bfc4bc9d
(file-truename): Use iteration when possible.
Richard M. Stallman <rms@gnu.org>
parents:
8140
diff
changeset
|
1473 (put 'debugger 'risky-local-variable t) |
7682
ce09b4fd6cc8
Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents:
7662
diff
changeset
|
1474 (put 'enable-local-eval 'risky-local-variable t) |
10149
c1704135914f
(ignored-local-variables): Mark it risky.
Richard M. Stallman <rms@gnu.org>
parents:
10132
diff
changeset
|
1475 (put 'ignored-local-variables 'risky-local-variable t) |
6734
6e61dbbfce80
(hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
6733
diff
changeset
|
1476 (put 'eval 'risky-local-variable t) |
6e61dbbfce80
(hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
6733
diff
changeset
|
1477 (put 'file-name-handler-alist 'risky-local-variable t) |
6e61dbbfce80
(hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
6733
diff
changeset
|
1478 (put 'minor-mode-map-alist 'risky-local-variable t) |
6e61dbbfce80
(hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
6733
diff
changeset
|
1479 (put 'after-load-alist 'risky-local-variable t) |
7682
ce09b4fd6cc8
Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents:
7662
diff
changeset
|
1480 (put 'buffer-file-name 'risky-local-variable t) |
ce09b4fd6cc8
Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents:
7662
diff
changeset
|
1481 (put 'buffer-auto-save-file-name 'risky-local-variable t) |
ce09b4fd6cc8
Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents:
7662
diff
changeset
|
1482 (put 'buffer-file-truename 'risky-local-variable t) |
8171
750282040c17
(process-environment, exec-path, load-path,exec-directory):
Richard M. Stallman <rms@gnu.org>
parents:
8165
diff
changeset
|
1483 (put 'exec-path 'risky-local-variable t) |
750282040c17
(process-environment, exec-path, load-path,exec-directory):
Richard M. Stallman <rms@gnu.org>
parents:
8165
diff
changeset
|
1484 (put 'load-path 'risky-local-variable t) |
750282040c17
(process-environment, exec-path, load-path,exec-directory):
Richard M. Stallman <rms@gnu.org>
parents:
8165
diff
changeset
|
1485 (put 'exec-directory 'risky-local-variable t) |
750282040c17
(process-environment, exec-path, load-path,exec-directory):
Richard M. Stallman <rms@gnu.org>
parents:
8165
diff
changeset
|
1486 (put 'process-environment 'risky-local-variable t) |
15753
4d76ffbc2be1
(dabbrev-case-fold-search, dabbrev-case-replace): Set
Richard M. Stallman <rms@gnu.org>
parents:
15611
diff
changeset
|
1487 (put 'dabbrev-case-fold-search 'risky-local-variable t) |
4d76ffbc2be1
(dabbrev-case-fold-search, dabbrev-case-replace): Set
Richard M. Stallman <rms@gnu.org>
parents:
15611
diff
changeset
|
1488 (put 'dabbrev-case-replace 'risky-local-variable t) |
8177
defefddf88db
(outline-level): Mark it risky.
Richard M. Stallman <rms@gnu.org>
parents:
8171
diff
changeset
|
1489 ;; Don't wait for outline.el to be loaded, for the sake of outline-minor-mode. |
defefddf88db
(outline-level): Mark it risky.
Richard M. Stallman <rms@gnu.org>
parents:
8171
diff
changeset
|
1490 (put 'outline-level 'risky-local-variable t) |
8251
6f692cc01d52
(rmail-output-file-alist): Mark it risky.
Richard M. Stallman <rms@gnu.org>
parents:
8232
diff
changeset
|
1491 (put 'rmail-output-file-alist 'risky-local-variable t) |
7682
ce09b4fd6cc8
Add more risky-local-variable properties.
Richard M. Stallman <rms@gnu.org>
parents:
7662
diff
changeset
|
1492 |
9162
53d02761f5b7
(hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
9068
diff
changeset
|
1493 ;; This one is safe because the user gets to check it before it is used. |
53d02761f5b7
(hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
9068
diff
changeset
|
1494 (put 'compile-command 'safe-local-variable t) |
53d02761f5b7
(hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
9068
diff
changeset
|
1495 |
7217
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1496 (defun hack-one-local-variable-quotep (exp) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1497 (and (consp exp) (eq (car exp) 'quote) (consp (cdr exp)))) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1498 |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1499 ;; "Set" one variable in a local variables spec. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1500 ;; A few variable names are treated specially. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1501 (defun hack-one-local-variable (var val) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1502 (cond ((eq var 'mode) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1503 (funcall (intern (concat (downcase (symbol-name val)) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1504 "-mode")))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1505 ((memq var ignored-local-variables) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1506 nil) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1507 ;; "Setting" eval means either eval it or do nothing. |
3626
ae0389767674
(hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents:
3624
diff
changeset
|
1508 ;; Likewise for setting hook variables. |
6734
6e61dbbfce80
(hack-one-local-variable): Test for risky-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
6733
diff
changeset
|
1509 ((or (get var 'risky-local-variable) |
9162
53d02761f5b7
(hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
9068
diff
changeset
|
1510 (and |
53d02761f5b7
(hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
9068
diff
changeset
|
1511 (string-match "-hooks?$\\|-functions?$\\|-forms?$\\|-program$\\|-command$" |
53d02761f5b7
(hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
9068
diff
changeset
|
1512 (symbol-name var)) |
53d02761f5b7
(hack-one-local-variable): Support safe-local-variable property.
Richard M. Stallman <rms@gnu.org>
parents:
9068
diff
changeset
|
1513 (not (get var 'safe-local-variable)))) |
13980 | 1514 ;; Permit evalling a put of a harmless property. |
7217
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1515 ;; if the args do nothing tricky. |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1516 (if (or (and (eq var 'eval) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1517 (consp val) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1518 (eq (car val) 'put) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1519 (hack-one-local-variable-quotep (nth 1 val)) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1520 (hack-one-local-variable-quotep (nth 2 val)) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1521 ;; Only allow safe values of lisp-indent-hook; |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1522 ;; not functions. |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1523 (or (numberp (nth 3 val)) |
7643
86001e904ef3
(hack-one-local-variable): Check properly for `defun.
Richard M. Stallman <rms@gnu.org>
parents:
7440
diff
changeset
|
1524 (equal (nth 3 val) ''defun)) |
7217
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1525 (memq (nth 1 (nth 2 val)) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1526 '(lisp-indent-hook))) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1527 ;; Permit eval if not root and user says ok. |
8181
a5c67d37141b
(hack-one-local-variable): Check for root using user-uid.
Richard M. Stallman <rms@gnu.org>
parents:
8177
diff
changeset
|
1528 (and (not (zerop (user-uid))) |
7217
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1529 (or (eq enable-local-eval t) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1530 (and enable-local-eval |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1531 (save-window-excursion |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1532 (switch-to-buffer (current-buffer)) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1533 (save-excursion |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1534 (beginning-of-line) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1535 (set-window-start (selected-window) (point))) |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1536 (setq enable-local-eval |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1537 (y-or-n-p (format "Process `eval' or hook local variables in file %s? " |
c35a4919c161
(hack-one-local-variable): Silently execute eval
Richard M. Stallman <rms@gnu.org>
parents:
7215
diff
changeset
|
1538 (file-name-nondirectory buffer-file-name))))))))) |
3626
ae0389767674
(hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents:
3624
diff
changeset
|
1539 (if (eq var 'eval) |
ae0389767674
(hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents:
3624
diff
changeset
|
1540 (save-excursion (eval val)) |
ae0389767674
(hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents:
3624
diff
changeset
|
1541 (make-local-variable var) |
ae0389767674
(hack-one-local-variable): Treat ...-hook(s) and ..-function(s)
Richard M. Stallman <rms@gnu.org>
parents:
3624
diff
changeset
|
1542 (set var val)) |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1543 (message "Ignoring `eval:' in file's local variables"))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1544 ;; Ordinary variable, really set it. |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1545 (t (make-local-variable var) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1546 (set var val)))) |
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
1547 |
337 | 1548 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
1549 (defcustom change-major-mode-with-file-name t |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1550 "*Non-nil means \\[write-file] should set the major mode from the file name. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1551 However, the mode will not be changed if |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1552 \(1) a local variables list or the `-*-' line specifies a major mode, or |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1553 \(2) the current major mode is a \"special\" mode, |
17666 | 1554 \ not suitable for ordinary files, or |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
1555 \(3) the new file name does not particularly specify any mode." |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
1556 :type 'boolean |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
1557 :group 'editing-basics) |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1558 |
16971
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1559 (defun set-visited-file-name (filename &optional no-query along-with-file) |
337 | 1560 "Change name of file visited in current buffer to FILENAME. |
1561 The next time the buffer is saved it will go in the newly specified file. | |
1562 nil or empty string as argument means make buffer not be visiting any file. | |
1563 Remember to delete the initial contents of the minibuffer | |
15570
6ec32e968edb
(set-visited-file-name): New optional arg NO-QUERY.
Richard M. Stallman <rms@gnu.org>
parents:
15548
diff
changeset
|
1564 if you wish to pass an empty string as the argument. |
6ec32e968edb
(set-visited-file-name): New optional arg NO-QUERY.
Richard M. Stallman <rms@gnu.org>
parents:
15548
diff
changeset
|
1565 |
6ec32e968edb
(set-visited-file-name): New optional arg NO-QUERY.
Richard M. Stallman <rms@gnu.org>
parents:
15548
diff
changeset
|
1566 The optional second argument NO-QUERY, if non-nil, inhibits asking for |
16971
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1567 confirmation in the case where another buffer is already visiting FILENAME. |
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1568 |
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1569 The optional third argument ALONG-WITH-FILE, if non-nil, means that |
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1570 the old visited file has been renamed to the new name FILENAME." |
337 | 1571 (interactive "FSet visited file name: ") |
10298
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
1572 (if (buffer-base-buffer) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
1573 (error "An indirect buffer cannot visit a file")) |
8140
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1574 (let (truename) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1575 (if filename |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1576 (setq filename |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1577 (if (string-equal filename "") |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1578 nil |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1579 (expand-file-name filename)))) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1580 (if filename |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1581 (progn |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1582 (setq truename (file-truename filename)) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1583 (if find-file-visit-truename |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1584 (setq filename truename)))) |
14883
f8a7a08fb9dd
(set-visited-file-name): Don't call find-buffer-visiting if filename is nil.
Richard M. Stallman <rms@gnu.org>
parents:
14734
diff
changeset
|
1585 (let ((buffer (and filename (find-buffer-visiting filename)))) |
14731
3682b5e64ce3
(set-visited-file-name): Query if there's already another
Richard M. Stallman <rms@gnu.org>
parents:
14636
diff
changeset
|
1586 (and buffer (not (eq buffer (current-buffer))) |
15570
6ec32e968edb
(set-visited-file-name): New optional arg NO-QUERY.
Richard M. Stallman <rms@gnu.org>
parents:
15548
diff
changeset
|
1587 (not no-query) |
14731
3682b5e64ce3
(set-visited-file-name): Query if there's already another
Richard M. Stallman <rms@gnu.org>
parents:
14636
diff
changeset
|
1588 (not (y-or-n-p (message "A buffer is visiting %s; proceed? " |
3682b5e64ce3
(set-visited-file-name): Query if there's already another
Richard M. Stallman <rms@gnu.org>
parents:
14636
diff
changeset
|
1589 filename))) |
3682b5e64ce3
(set-visited-file-name): Query if there's already another
Richard M. Stallman <rms@gnu.org>
parents:
14636
diff
changeset
|
1590 (error "Aborted"))) |
8140
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1591 (or (equal filename buffer-file-name) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1592 (progn |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1593 (and filename (lock-buffer filename)) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1594 (unlock-buffer))) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1595 (setq buffer-file-name filename) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1596 (if filename ; make buffer name reflect filename. |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1597 (let ((new-name (file-name-nondirectory buffer-file-name))) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1598 (if (string= new-name "") |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1599 (error "Empty file name")) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1600 (if (eq system-type 'vax-vms) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1601 (setq new-name (downcase new-name))) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1602 (setq default-directory (file-name-directory buffer-file-name)) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1603 (or (string= new-name (buffer-name)) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1604 (rename-buffer new-name t)))) |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1605 (setq buffer-backed-up nil) |
16971
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1606 (or along-with-file |
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1607 (clear-visited-file-modtime)) |
13289
c4f93bb943b7
(set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
13182
diff
changeset
|
1608 ;; Abbreviate the file names of the buffer. |
8151
2ac4479dd0ff
(set-visited-file-name): Avoid crash if TRUENAME is nil.
Richard M. Stallman <rms@gnu.org>
parents:
8148
diff
changeset
|
1609 (if truename |
13289
c4f93bb943b7
(set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
13182
diff
changeset
|
1610 (progn |
c4f93bb943b7
(set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
13182
diff
changeset
|
1611 (setq buffer-file-truename (abbreviate-file-name truename)) |
c4f93bb943b7
(set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
13182
diff
changeset
|
1612 (if find-file-visit-truename |
c4f93bb943b7
(set-visited-file-name): Abbreviate buffer-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
13182
diff
changeset
|
1613 (setq buffer-file-name buffer-file-truename)))) |
8140
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1614 (setq buffer-file-number |
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1615 (if filename |
13326
4e1b078121ad
(set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
13289
diff
changeset
|
1616 (nthcdr 10 (file-attributes buffer-file-name)) |
8140
ed2ac2e85eef
(set-visited-file-name): Handle find-file-visit-truename
Richard M. Stallman <rms@gnu.org>
parents:
7993
diff
changeset
|
1617 nil))) |
337 | 1618 ;; write-file-hooks is normally used for things like ftp-find-file |
1619 ;; that visit things that are not local files as if they were files. | |
1620 ;; Changing to visit an ordinary local file instead should flush the hook. | |
1621 (kill-local-variable 'write-file-hooks) | |
2375
94e135f2d64d
(local-write-file-hooks): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
2335
diff
changeset
|
1622 (kill-local-variable 'local-write-file-hooks) |
337 | 1623 (kill-local-variable 'revert-buffer-function) |
1624 (kill-local-variable 'backup-inhibited) | |
6546
8eb722515c31
(set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents:
6454
diff
changeset
|
1625 ;; If buffer was read-only because of version control, |
8eb722515c31
(set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents:
6454
diff
changeset
|
1626 ;; that reason is gone now, so make it writable. |
8eb722515c31
(set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents:
6454
diff
changeset
|
1627 (if vc-mode |
8eb722515c31
(set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents:
6454
diff
changeset
|
1628 (setq buffer-read-only nil)) |
8eb722515c31
(set-visited-file-name): Kill local var vc-mode.
Richard M. Stallman <rms@gnu.org>
parents:
6454
diff
changeset
|
1629 (kill-local-variable 'vc-mode) |
337 | 1630 ;; Turn off backup files for certain file names. |
1631 ;; Since this is a permanent local, the major mode won't eliminate it. | |
1632 (and (not (funcall backup-enable-predicate buffer-file-name)) | |
1633 (progn | |
1634 (make-local-variable 'backup-inhibited) | |
1635 (setq backup-inhibited t))) | |
3944
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1636 (let ((oauto buffer-auto-save-file-name)) |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1637 ;; If auto-save was not already on, turn it on if appropriate. |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1638 (if (not buffer-auto-save-file-name) |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1639 (and buffer-file-name auto-save-default |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1640 (auto-save-mode t)) |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1641 ;; If auto save is on, start using a new name. |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1642 ;; We deliberately don't rename or delete the old auto save |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1643 ;; for the old visited file name. This is because perhaps |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1644 ;; the user wants to save the new state and then compare with the |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1645 ;; previous state from the auto save file. |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1646 (setq buffer-auto-save-file-name |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1647 (make-auto-save-file-name))) |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1648 ;; Rename the old auto save file if any. |
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1649 (and oauto buffer-auto-save-file-name |
3946
535f1f575d04
(set-visited-file-name): Rename auto-save file only if it exists.
Richard M. Stallman <rms@gnu.org>
parents:
3944
diff
changeset
|
1650 (file-exists-p oauto) |
3944
5e740ac08e39
(set-visited-file-name): Rename the old auto save file.
Richard M. Stallman <rms@gnu.org>
parents:
3835
diff
changeset
|
1651 (rename-file oauto buffer-auto-save-file-name t))) |
16971
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1652 (and buffer-file-name |
c1b9bc4c525b
(set-visited-file-name): New arg ALONG-WITH-FILE.
Richard M. Stallman <rms@gnu.org>
parents:
16831
diff
changeset
|
1653 (not along-with-file) |
17660
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1654 (set-buffer-modified-p t)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1655 ;; Update the major mode, if the file name determines it. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1656 (condition-case nil |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1657 ;; Don't change the mode if it is special. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1658 (or (not change-major-mode-with-file-name) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1659 (get major-mode 'mode-class) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1660 ;; Don't change the mode if the local variable list specifies it. |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1661 (hack-local-variables t) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1662 (set-auto-mode t)) |
473ee9294c31
(set-auto-mode): New arg JUST-FROM-FILE-NAME.
Richard M. Stallman <rms@gnu.org>
parents:
17525
diff
changeset
|
1663 (error nil))) |
337 | 1664 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
1665 (defun write-file (filename &optional confirm) |
337 | 1666 "Write current buffer into file FILENAME. |
2003
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
1667 Makes buffer visit that file, and marks it not modified. |
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
1668 If the buffer is already visiting a file, you can specify |
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
1669 a directory name as FILENAME, to write a file of the same |
11340
5c97fabe0ab9
(write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents:
11222
diff
changeset
|
1670 old name in that directory. |
14469
713f9bf02e20
(auto-mode-alist): .ksh suffix means sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
14401
diff
changeset
|
1671 |
11340
5c97fabe0ab9
(write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents:
11222
diff
changeset
|
1672 If optional second arg CONFIRM is non-nil, |
14469
713f9bf02e20
(auto-mode-alist): .ksh suffix means sh-mode.
Richard M. Stallman <rms@gnu.org>
parents:
14401
diff
changeset
|
1673 ask for confirmation for overwriting an existing file. |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
1674 Interactively, confirmation is required unless you supply a prefix argument." |
337 | 1675 ;; (interactive "FWrite file: ") |
1676 (interactive | |
1677 (list (if buffer-file-name | |
1678 (read-file-name "Write file: " | |
1679 nil nil nil nil) | |
1680 (read-file-name "Write file: " | |
1681 (cdr (assq 'default-directory | |
1682 (buffer-local-variables))) | |
11340
5c97fabe0ab9
(write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents:
11222
diff
changeset
|
1683 nil nil (buffer-name))) |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
1684 (not current-prefix-arg))) |
337 | 1685 (or (null filename) (string-equal filename "") |
2003
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
1686 (progn |
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
1687 ;; If arg is just a directory, |
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
1688 ;; use same file name, but in that directory. |
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
1689 (if (and (file-directory-p filename) buffer-file-name) |
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
1690 (setq filename (concat (file-name-as-directory filename) |
bff31af6c721
(write-file): Handle directory name as arg.
Richard M. Stallman <rms@gnu.org>
parents:
1905
diff
changeset
|
1691 (file-name-nondirectory buffer-file-name)))) |
11340
5c97fabe0ab9
(write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents:
11222
diff
changeset
|
1692 (and confirm |
5c97fabe0ab9
(write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents:
11222
diff
changeset
|
1693 (file-exists-p filename) |
5c97fabe0ab9
(write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents:
11222
diff
changeset
|
1694 (or (y-or-n-p (format "File `%s' exists; overwrite? " filename)) |
5c97fabe0ab9
(write-file): Default is ask for confirmation only interactively.
Richard M. Stallman <rms@gnu.org>
parents:
11222
diff
changeset
|
1695 (error "Canceled"))) |
16470
b050d980c422
(set-visited-file-name): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16440
diff
changeset
|
1696 (set-visited-file-name filename (not confirm)))) |
337 | 1697 (set-buffer-modified-p t) |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
1698 (save-buffer)) |
337 | 1699 |
1700 (defun backup-buffer () | |
1701 "Make a backup of the disk file visited by the current buffer, if appropriate. | |
1702 This is normally done before saving the buffer the first time. | |
1703 If the value is non-nil, it is the result of `file-modes' on the original | |
1704 file; this means that the caller, after saving the buffer, should change | |
16614 | 1705 the modes of the new file to agree with the old modes. |
1706 | |
1707 A backup may be done by renaming or by copying; see documentation of | |
1708 variable `make-backup-files'. If it's done by renaming, then the file is | |
1709 no longer accessible under its old name." | |
337 | 1710 (if (and make-backup-files (not backup-inhibited) |
1711 (not buffer-backed-up) | |
1712 (file-exists-p buffer-file-name) | |
1713 (memq (aref (elt (file-attributes buffer-file-name) 8) 0) | |
1714 '(?- ?l))) | |
1715 (let ((real-file-name buffer-file-name) | |
1716 backup-info backupname targets setmodes) | |
1717 ;; If specified name is a symbolic link, chase it to the target. | |
1718 ;; Thus we make the backups in the directory where the real file is. | |
3260
eecf2c0ca9b9
(file-chase-links): New function.
Richard M. Stallman <rms@gnu.org>
parents:
3240
diff
changeset
|
1719 (setq real-file-name (file-chase-links real-file-name)) |
337 | 1720 (setq backup-info (find-backup-file-name real-file-name) |
1721 backupname (car backup-info) | |
1722 targets (cdr backup-info)) | |
1723 ;;; (if (file-directory-p buffer-file-name) | |
1724 ;;; (error "Cannot save buffer in directory %s" buffer-file-name)) | |
10408
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1725 (if backup-info |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1726 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1727 (let ((delete-old-versions |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1728 ;; If have old versions to maybe delete, |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1729 ;; ask the user to confirm now, before doing anything. |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1730 ;; But don't actually delete til later. |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1731 (and targets |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1732 (or (eq delete-old-versions t) (eq delete-old-versions nil)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1733 (or delete-old-versions |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1734 (y-or-n-p (format "Delete excess backup versions of %s? " |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1735 real-file-name)))))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1736 ;; Actually write the back up file. |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1737 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1738 (if (or file-precious-flag |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1739 ; (file-symlink-p buffer-file-name) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1740 backup-by-copying |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1741 (and backup-by-copying-when-linked |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1742 (> (file-nlinks real-file-name) 1)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1743 (and backup-by-copying-when-mismatch |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1744 (let ((attr (file-attributes real-file-name))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1745 (or (nth 9 attr) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1746 (not (file-ownership-preserved-p real-file-name)))))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1747 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1748 (copy-file real-file-name backupname t t) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1749 (file-error |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1750 ;; If copying fails because file BACKUPNAME |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1751 ;; is not writable, delete that file and try again. |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1752 (if (and (file-exists-p backupname) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1753 (not (file-writable-p backupname))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1754 (delete-file backupname)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1755 (copy-file real-file-name backupname t t))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1756 ;; rename-file should delete old backup. |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1757 (rename-file real-file-name backupname t) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1758 (setq setmodes (file-modes backupname))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1759 (file-error |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1760 ;; If trouble writing the backup, write it in ~. |
13903
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
1761 (setq backupname (expand-file-name |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
1762 (convert-standard-filename |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
1763 "~/%backup%~"))) |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
1764 (message "Cannot write backup file; backing up in %s" |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
1765 (file-name-nondirectory backupname)) |
10408
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1766 (sleep-for 1) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1767 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1768 (copy-file real-file-name backupname t t) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1769 (file-error |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1770 ;; If copying fails because file BACKUPNAME |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1771 ;; is not writable, delete that file and try again. |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1772 (if (and (file-exists-p backupname) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1773 (not (file-writable-p backupname))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1774 (delete-file backupname)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1775 (copy-file real-file-name backupname t t))))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1776 (setq buffer-backed-up t) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1777 ;; Now delete the old versions, if desired. |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1778 (if delete-old-versions |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1779 (while targets |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1780 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1781 (delete-file (car targets)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1782 (file-error nil)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1783 (setq targets (cdr targets)))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1784 setmodes) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1785 (file-error nil)))))) |
337 | 1786 |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1787 (defun file-name-sans-versions (name &optional keep-backup-version) |
337 | 1788 "Return FILENAME sans backup versions or strings. |
1789 This is a separate procedure so your site-init or startup file can | |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1790 redefine it. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1791 If the optional argument KEEP-BACKUP-VERSION is non-nil, |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1792 we do not remove backup version numbers, only true file version numbers." |
7030
9e51b51e8595
Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents:
6899
diff
changeset
|
1793 (let ((handler (find-file-name-handler name 'file-name-sans-versions))) |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1794 (if handler |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1795 (funcall handler 'file-name-sans-versions name keep-backup-version) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1796 (substring name 0 |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1797 (if (eq system-type 'vax-vms) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1798 ;; VMS version number is (a) semicolon, optional |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1799 ;; sign, zero or more digits or (b) period, option |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1800 ;; sign, zero or more digits, provided this is the |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1801 ;; second period encountered outside of the |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1802 ;; device/directory part of the file name. |
6309
9217f29851c2
Don't use triple-hyphen in a character class.
Karl Heuer <kwzh@gnu.org>
parents:
6294
diff
changeset
|
1803 (or (string-match ";[-+]?[0-9]*\\'" name) |
9217f29851c2
Don't use triple-hyphen in a character class.
Karl Heuer <kwzh@gnu.org>
parents:
6294
diff
changeset
|
1804 (if (string-match "\\.[^]>:]*\\(\\.[-+]?[0-9]*\\)\\'" |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1805 name) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1806 (match-beginning 1)) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1807 (length name)) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1808 (if keep-backup-version |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1809 (length name) |
12591
7caa97ba6a7b
(file-name-sans-versions): Recognize version control version numbers.
Richard M. Stallman <rms@gnu.org>
parents:
12587
diff
changeset
|
1810 (or (string-match "\\.~[0-9.]+~\\'" name) |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1811 (string-match "~\\'" name) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
1812 (length name)))))))) |
337 | 1813 |
8987
1db2285cec99
(file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8937
diff
changeset
|
1814 (defun file-ownership-preserved-p (file) |
1db2285cec99
(file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8937
diff
changeset
|
1815 "Returns t if deleting FILE and rewriting it would preserve the owner." |
1db2285cec99
(file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8937
diff
changeset
|
1816 (let ((handler (find-file-name-handler file 'file-ownership-preserved-p))) |
1db2285cec99
(file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8937
diff
changeset
|
1817 (if handler |
1db2285cec99
(file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8937
diff
changeset
|
1818 (funcall handler 'file-ownership-preserved-p file) |
11867
b00d51017e13
(file-ownership-preserved-p): Fix typo in previous change.
Karl Heuer <kwzh@gnu.org>
parents:
11817
diff
changeset
|
1819 (let ((attributes (file-attributes file))) |
11817
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
1820 ;; Return t if the file doesn't exist, since it's true that no |
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
1821 ;; information would be lost by an (attempted) delete and create. |
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
1822 (or (null attributes) |
ba82c338bee3
(path-separator): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
11739
diff
changeset
|
1823 (= (nth 2 attributes) (user-uid))))))) |
8987
1db2285cec99
(file-ownership-preserved-p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8937
diff
changeset
|
1824 |
8908
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1825 (defun file-name-sans-extension (filename) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1826 "Return FILENAME sans final \"extension\". |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1827 The extension, in a file name, is the part that follows the last `.'." |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1828 (save-match-data |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1829 (let ((file (file-name-sans-versions (file-name-nondirectory filename))) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1830 directory) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1831 (if (string-match "\\.[^.]*\\'" file) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1832 (if (setq directory (file-name-directory filename)) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1833 (expand-file-name (substring file 0 (match-beginning 0)) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1834 directory) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1835 (substring file 0 (match-beginning 0))) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1836 filename)))) |
25d8b804abd3
(file-name-sans-extension): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8650
diff
changeset
|
1837 |
16440
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1838 (defun file-name-extension (filename &optional period) |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1839 "Return FILENAME's final \"extension\". |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1840 The extension, in a file name, is the part that follows the last `.'. |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1841 Return nil for extensionless file names such as `foo'. |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1842 Return the empty string for file names such as `foo.'. |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1843 |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1844 If PERIOD is non-nil, then the returned value includes the period |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1845 that delimits the extension, and if FILENAME has no extension, |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1846 the value is \"\"." |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1847 (save-match-data |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1848 (let ((file (file-name-sans-versions (file-name-nondirectory filename)))) |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1849 (if (string-match "\\.[^.]*\\'" file) |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1850 (substring file (+ (match-beginning 0) (if period 0 1))) |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1851 (if period |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1852 ""))))) |
e735290b9ebb
(hack-local-variables-prop-line):
Richard M. Stallman <rms@gnu.org>
parents:
16414
diff
changeset
|
1853 |
337 | 1854 (defun make-backup-file-name (file) |
1855 "Create the non-numeric backup file name for FILE. | |
1856 This is a separate function so you can redefine it for customization." | |
15269
b6381b3a6c99
(make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents:
15056
diff
changeset
|
1857 (if (and (eq system-type 'ms-dos) |
b6381b3a6c99
(make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents:
15056
diff
changeset
|
1858 (not (msdos-long-file-names))) |
5453
691f7961e32c
[ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents:
5398
diff
changeset
|
1859 (let ((fn (file-name-nondirectory file))) |
691f7961e32c
[ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents:
5398
diff
changeset
|
1860 (concat (file-name-directory file) |
13749
2015901ab992
(make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents:
13743
diff
changeset
|
1861 (or |
2015901ab992
(make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents:
13743
diff
changeset
|
1862 (and (string-match "\\`[^.]+\\'" fn) |
2015901ab992
(make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents:
13743
diff
changeset
|
1863 (concat (match-string 0 fn) ".~")) |
2015901ab992
(make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents:
13743
diff
changeset
|
1864 (and (string-match "\\`[^.]+\\.\\(..?\\)?" fn) |
2015901ab992
(make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents:
13743
diff
changeset
|
1865 (concat (match-string 0 fn) "~"))))) |
5453
691f7961e32c
[ms-dos] (make-backup-file-name, backup-file-name-p):
Richard M. Stallman <rms@gnu.org>
parents:
5398
diff
changeset
|
1866 (concat file "~"))) |
337 | 1867 |
1868 (defun backup-file-name-p (file) | |
1869 "Return non-nil if FILE is a backup file name (numeric or not). | |
1870 This is a separate function so you can redefine it for customization. | |
1871 You may need to redefine `file-name-sans-versions' as well." | |
13749
2015901ab992
(make-backup-file-name, backup-file-name-p): Use ~ even
Karl Heuer <kwzh@gnu.org>
parents:
13743
diff
changeset
|
1872 (string-match "~\\'" file)) |
337 | 1873 |
17734
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1874 (defvar backup-extract-version-start) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1875 |
890
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
1876 ;; This is used in various files. |
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
1877 ;; The usage of bv-length is not very clean, |
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
1878 ;; but I can't see a good alternative, |
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
1879 ;; so as of now I am leaving it alone. |
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
1880 (defun backup-extract-version (fn) |
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
1881 "Given the name of a numeric backup file, return the backup number. |
17734
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1882 Uses the free variable `backup-extract-version-start', whose value should be |
890
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
1883 the index in the name where the version number begins." |
17734
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1884 (if (and (string-match "[0-9]+~$" fn backup-extract-version-start) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1885 (= (match-beginning 0) backup-extract-version-start)) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1886 (string-to-int (substring fn backup-extract-version-start -1)) |
890
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
1887 0)) |
bad1b9af86a1
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
854
diff
changeset
|
1888 |
337 | 1889 ;; I believe there is no need to alter this behavior for VMS; |
1890 ;; since backup files are not made on VMS, it should not get called. | |
1891 (defun find-backup-file-name (fn) | |
1892 "Find a file name for a backup file, and suggestions for deletions. | |
1893 Value is a list whose car is the name for the backup file | |
10408
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1894 and whose cdr is a list of old versions to consider deleting now. |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1895 If the value is nil, don't make a backup." |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1896 (let ((handler (find-file-name-handler fn 'find-backup-file-name))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1897 ;; Run a handler for this function so that ange-ftp can refuse to do it. |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1898 (if handler |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1899 (funcall handler 'find-backup-file-name fn) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1900 (if (eq version-control 'never) |
337 | 1901 (list (make-backup-file-name fn)) |
10408
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1902 (let* ((base-versions (concat (file-name-nondirectory fn) ".~")) |
17734
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1903 (backup-extract-version-start (length base-versions)) |
10408
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1904 possibilities |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1905 (versions nil) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1906 (high-water-mark 0) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1907 (deserve-versions-p nil) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1908 (number-to-delete 0)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1909 (condition-case () |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1910 (setq possibilities (file-name-all-completions |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1911 base-versions |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1912 (file-name-directory fn)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1913 versions (sort (mapcar |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1914 (function backup-extract-version) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1915 possibilities) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1916 '<) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1917 high-water-mark (apply 'max 0 versions) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1918 deserve-versions-p (or version-control |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1919 (> high-water-mark 0)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1920 number-to-delete (- (length versions) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1921 kept-old-versions kept-new-versions -1)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1922 (file-error |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1923 (setq possibilities nil))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1924 (if (not deserve-versions-p) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1925 (list (make-backup-file-name fn)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1926 (cons (concat fn ".~" (int-to-string (1+ high-water-mark)) "~") |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1927 (if (and (> number-to-delete 0) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1928 ;; Delete nothing if there is overflow |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1929 ;; in the number of versions to keep. |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1930 (>= (+ kept-new-versions kept-old-versions -1) 0)) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1931 (mapcar (function (lambda (n) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1932 (concat fn ".~" (int-to-string n) "~"))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1933 (let ((v (nthcdr kept-old-versions versions))) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1934 (rplacd (nthcdr (1- number-to-delete) v) ()) |
c79720be7bd7
(find-backup-file-name): Run a file name handler.
Richard M. Stallman <rms@gnu.org>
parents:
10338
diff
changeset
|
1935 v)))))))))) |
337 | 1936 |
1937 (defun file-nlinks (filename) | |
1938 "Return number of names file FILENAME has." | |
1939 (car (cdr (file-attributes filename)))) | |
1229
d4324e885a41
(file-relative-name): New function.
Roland McGrath <roland@gnu.org>
parents:
1212
diff
changeset
|
1940 |
d4324e885a41
(file-relative-name): New function.
Roland McGrath <roland@gnu.org>
parents:
1212
diff
changeset
|
1941 (defun file-relative-name (filename &optional directory) |
17379
3147024a8918
(file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents:
17256
diff
changeset
|
1942 "Convert FILENAME to be relative to DIRECTORY (default: default-directory). |
3147024a8918
(file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents:
17256
diff
changeset
|
1943 This function returns a relative file name which is equivalent to FILENAME |
3147024a8918
(file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents:
17256
diff
changeset
|
1944 when used with that default directory as the default. |
3147024a8918
(file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents:
17256
diff
changeset
|
1945 If this is impossible (which can happen on MSDOS and Windows |
3147024a8918
(file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents:
17256
diff
changeset
|
1946 when the file name and directory use different drive names) |
3147024a8918
(file-relative-name): Expand both args before
Richard M. Stallman <rms@gnu.org>
parents:
17256
diff
changeset
|
1947 then it returns FILENAME." |
16976
c7683cba14c7
(file-relative-name): Protect the match-data.
Erik Naggum <erik@naggum.no>
parents:
16971
diff
changeset
|
1948 (save-match-data |
17734
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1949 (let ((fname (expand-file-name filename))) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1950 (setq directory (file-name-as-directory |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1951 (expand-file-name (or directory default-directory)))) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1952 ;; On Microsoft OSes, if FILENAME and DIRECTORY have different |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1953 ;; drive names, they can't be relative, so return the absolute name. |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1954 (if (and (or (eq system-type 'ms-dos) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1955 (eq system-type 'windows-nt)) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1956 (not (string-equal (substring fname 0 2) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1957 (substring directory 0 2)))) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1958 filename |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1959 (let ((ancestor "")) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1960 (while (not (string-match (concat "^" (regexp-quote directory)) fname)) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1961 (setq directory (file-name-directory (substring directory 0 -1)) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1962 ancestor (concat "../" ancestor))) |
bd60d4318daf
(backup-extract-version-start): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17731
diff
changeset
|
1963 (concat ancestor (substring fname (match-end 0)))))))) |
337 | 1964 |
1965 (defun save-buffer (&optional args) | |
1966 "Save current buffer in visited file if modified. Versions described below. | |
1967 By default, makes the previous version into a backup file | |
1968 if previously requested or if this is the first save. | |
13823
881e5c4a01cb
(save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
13749
diff
changeset
|
1969 With 1 \\[universal-argument], marks this version |
337 | 1970 to become a backup when the next save is done. |
13823
881e5c4a01cb
(save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
13749
diff
changeset
|
1971 With 2 \\[universal-argument]'s, |
337 | 1972 unconditionally makes the previous version into a backup file. |
13823
881e5c4a01cb
(save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
13749
diff
changeset
|
1973 With 3 \\[universal-argument]'s, marks this version |
881e5c4a01cb
(save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
13749
diff
changeset
|
1974 to become a backup when the next save is done, |
881e5c4a01cb
(save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
13749
diff
changeset
|
1975 and unconditionally makes the previous version into a backup file. |
881e5c4a01cb
(save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
13749
diff
changeset
|
1976 |
337 | 1977 With argument of 0, never makes the previous version into a backup file. |
1978 | |
1979 If a file's name is FOO, the names of its numbered backup versions are | |
1980 FOO.~i~ for various integers i. A non-numbered backup file is called FOO~. | |
1981 Numeric backups (rather than FOO~) will be made if value of | |
1982 `version-control' is not the atom `never' and either there are already | |
1983 numeric versions of the file being backed up, or `version-control' is | |
1984 non-nil. | |
1985 We don't want excessive versions piling up, so there are variables | |
1986 `kept-old-versions', which tells Emacs how many oldest versions to keep, | |
1987 and `kept-new-versions', which tells how many newest versions to keep. | |
1988 Defaults are 2 old versions and 2 new. | |
1989 `dired-kept-versions' controls dired's clean-directory (.) command. | |
8157
14766204c0fe
(delete-old-versions): Var renamed from trim-versions-without-asking.
Richard M. Stallman <rms@gnu.org>
parents:
8151
diff
changeset
|
1990 If `delete-old-versions' is nil, system will query user |
337 | 1991 before trimming versions. Otherwise it does it silently." |
1992 (interactive "p") | |
1993 (let ((modp (buffer-modified-p)) | |
1994 (large (> (buffer-size) 50000)) | |
8462
c281b470d633
(save-buffer): Unconditionally make a backup with 2 or
Richard M. Stallman <rms@gnu.org>
parents:
8374
diff
changeset
|
1995 (make-backup-files (or (and make-backup-files (not (eq args 0))) |
c281b470d633
(save-buffer): Unconditionally make a backup with 2 or
Richard M. Stallman <rms@gnu.org>
parents:
8374
diff
changeset
|
1996 (memq args '(16 64))))) |
337 | 1997 (and modp (memq args '(16 64)) (setq buffer-backed-up nil)) |
1998 (if (and modp large) (message "Saving file %s..." (buffer-file-name))) | |
1999 (basic-save-buffer) | |
2000 (and modp (memq args '(4 64)) (setq buffer-backed-up nil)))) | |
2001 | |
2002 (defun delete-auto-save-file-if-necessary (&optional force) | |
2003 "Delete auto-save file for current buffer if `delete-auto-save-files' is t. | |
2004 Normally delete only if the file was written by this Emacs since | |
2005 the last real save, but optional arg FORCE non-nil means delete anyway." | |
2006 (and buffer-auto-save-file-name delete-auto-save-files | |
2007 (not (string= buffer-file-name buffer-auto-save-file-name)) | |
2008 (or force (recent-auto-save-p)) | |
2009 (progn | |
2010 (condition-case () | |
2011 (delete-file buffer-auto-save-file-name) | |
2012 (file-error nil)) | |
2013 (set-buffer-auto-saved)))) | |
2014 | |
12963
337ba86981f5
(basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12930
diff
changeset
|
2015 (defvar after-save-hook nil |
337ba86981f5
(basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12930
diff
changeset
|
2016 "Normal hook that is run after a buffer is saved to its file.") |
337ba86981f5
(basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12930
diff
changeset
|
2017 |
337 | 2018 (defun basic-save-buffer () |
12963
337ba86981f5
(basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12930
diff
changeset
|
2019 "Save the current buffer in its visited file, if it has been modified. |
337ba86981f5
(basic-save-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
12930
diff
changeset
|
2020 After saving the buffer, run `after-save-hook'." |
337 | 2021 (interactive) |
10298
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2022 (save-excursion |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2023 ;; In an indirect buffer, save its base buffer instead. |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2024 (if (buffer-base-buffer) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2025 (set-buffer (buffer-base-buffer))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2026 (if (buffer-modified-p) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2027 (let ((recent-save (recent-auto-save-p)) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2028 setmodes tempsetmodes) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2029 ;; On VMS, rename file and buffer to get rid of version number. |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2030 (if (and (eq system-type 'vax-vms) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2031 (not (string= buffer-file-name |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2032 (file-name-sans-versions buffer-file-name)))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2033 (let (buffer-new-name) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2034 ;; Strip VMS version number before save. |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2035 (setq buffer-file-name |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2036 (file-name-sans-versions buffer-file-name)) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2037 ;; Construct a (unique) buffer name to correspond. |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2038 (let ((buf (create-file-buffer (downcase buffer-file-name)))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2039 (setq buffer-new-name (buffer-name buf)) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2040 (kill-buffer buf)) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2041 (rename-buffer buffer-new-name))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2042 ;; If buffer has no file name, ask user for one. |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2043 (or buffer-file-name |
12895
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2044 (let ((filename |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2045 (expand-file-name |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2046 (read-file-name "File to save in: ") nil))) |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2047 (and (file-exists-p filename) |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2048 (or (y-or-n-p (format "File `%s' exists; overwrite? " |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2049 filename)) |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2050 (error "Canceled"))) |
4dbac3df0ec7
(basic-save-buffer): Confirm for overwriting old file
Richard M. Stallman <rms@gnu.org>
parents:
12852
diff
changeset
|
2051 (set-visited-file-name filename))) |
10298
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2052 (or (verify-visited-file-modtime (current-buffer)) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2053 (not (file-exists-p buffer-file-name)) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2054 (yes-or-no-p |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2055 (format "%s has changed since visited or saved. Save anyway? " |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2056 (file-name-nondirectory buffer-file-name))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2057 (error "Save not confirmed")) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2058 (save-restriction |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2059 (widen) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2060 (and (> (point-max) 1) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2061 (/= (char-after (1- (point-max))) ?\n) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2062 (not (and (eq selective-display t) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2063 (= (char-after (1- (point-max))) ?\r))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2064 (or (eq require-final-newline t) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2065 (and require-final-newline |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2066 (y-or-n-p |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2067 (format "Buffer %s does not end in newline. Add one? " |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2068 (buffer-name))))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2069 (save-excursion |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2070 (goto-char (point-max)) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2071 (insert ?\n))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2072 (or (run-hook-with-args-until-success 'write-contents-hooks) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2073 (run-hook-with-args-until-success 'local-write-file-hooks) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2074 (run-hook-with-args-until-success 'write-file-hooks) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2075 ;; If a hook returned t, file is already "written". |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2076 ;; Otherwise, write it the usual way now. |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2077 (setq setmodes (basic-save-buffer-1))) |
13326
4e1b078121ad
(set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
13289
diff
changeset
|
2078 (setq buffer-file-number |
4e1b078121ad
(set-visited-file-name, basic-save-buffer):
Richard M. Stallman <rms@gnu.org>
parents:
13289
diff
changeset
|
2079 (nthcdr 10 (file-attributes buffer-file-name))) |
10298
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2080 (if setmodes |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2081 (condition-case () |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2082 (set-file-modes buffer-file-name setmodes) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2083 (error nil)))) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2084 ;; If the auto-save file was recent before this command, |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2085 ;; delete it now. |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2086 (delete-auto-save-file-if-necessary recent-save) |
12930
0fac64b0452e
(basic-save-buffer): Call vc-after-save.
Richard M. Stallman <rms@gnu.org>
parents:
12929
diff
changeset
|
2087 ;; Support VC `implicit' locking. |
0fac64b0452e
(basic-save-buffer): Call vc-after-save.
Richard M. Stallman <rms@gnu.org>
parents:
12929
diff
changeset
|
2088 (vc-after-save) |
10298
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2089 (run-hooks 'after-save-hook)) |
4b66ac3460df
(auto-mode-alist): Add entries for .cls files,
Richard M. Stallman <rms@gnu.org>
parents:
10236
diff
changeset
|
2090 (message "(No changes need to be saved)")))) |
337 | 2091 |
6574
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2092 ;; This does the "real job" of writing a buffer into its visited file |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2093 ;; and making a backup file. This is what is normally done |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2094 ;; but inhibited if one of write-file-hooks returns non-nil. |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2095 ;; It returns a value to store in setmodes. |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2096 (defun basic-save-buffer-1 () |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2097 (let (tempsetmodes setmodes) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2098 (if (not (file-writable-p buffer-file-name)) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2099 (let ((dir (file-name-directory buffer-file-name))) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2100 (if (not (file-directory-p dir)) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2101 (error "%s is not a directory" dir) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2102 (if (not (file-exists-p buffer-file-name)) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2103 (error "Directory %s write-protected" dir) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2104 (if (yes-or-no-p |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2105 (format "File %s is write-protected; try to save anyway? " |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2106 (file-name-nondirectory |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2107 buffer-file-name))) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2108 (setq tempsetmodes t) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2109 (error "Attempt to save to a file which you aren't allowed to write")))))) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2110 (or buffer-backed-up |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2111 (setq setmodes (backup-buffer))) |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2112 (let ((dir (file-name-directory buffer-file-name))) |
8362
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2113 (if (and file-precious-flag |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2114 (file-writable-p dir)) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2115 ;; If file is precious, write temp name, then rename it. |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2116 ;; This requires write access to the containing dir, |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2117 ;; which is why we don't try it if we don't have that access. |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2118 (let ((realname buffer-file-name) |
8937
065d01c10c78
(basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents:
8908
diff
changeset
|
2119 tempname temp nogood i succeed |
065d01c10c78
(basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents:
8908
diff
changeset
|
2120 (old-modtime (visited-file-modtime))) |
8362
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2121 (setq i 0) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2122 (setq nogood t) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2123 ;; Find the temporary name to write under. |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2124 (while nogood |
13903
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
2125 (setq tempname (format |
15269
b6381b3a6c99
(make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents:
15056
diff
changeset
|
2126 (if (and (eq system-type 'ms-dos) |
b6381b3a6c99
(make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents:
15056
diff
changeset
|
2127 (not (msdos-long-file-names))) |
13903
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
2128 "%s#%d.tm#" ; MSDOS limits files to 8+3 |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
2129 "%s#tmp#%d") |
936c8364e15a
(abbrev-file-name): Drive letter can go beyond `Z' under MS-DOS/Novell.
Richard M. Stallman <rms@gnu.org>
parents:
13885
diff
changeset
|
2130 dir i)) |
8362
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2131 (setq nogood (file-exists-p tempname)) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2132 (setq i (1+ i))) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2133 (unwind-protect |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2134 (progn (clear-visited-file-modtime) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2135 (write-region (point-min) (point-max) |
12852
0b04a441c06d
(basic-save-buffer-1): Pass new arg to write-region.
Richard M. Stallman <rms@gnu.org>
parents:
12850
diff
changeset
|
2136 tempname nil realname |
0b04a441c06d
(basic-save-buffer-1): Pass new arg to write-region.
Richard M. Stallman <rms@gnu.org>
parents:
12850
diff
changeset
|
2137 buffer-file-truename) |
8362
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2138 (setq succeed t)) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2139 ;; If writing the temp file fails, |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2140 ;; delete the temp file. |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2141 (or succeed |
8937
065d01c10c78
(basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents:
8908
diff
changeset
|
2142 (progn |
065d01c10c78
(basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents:
8908
diff
changeset
|
2143 (delete-file tempname) |
065d01c10c78
(basic-save-buffer-1): If writing temp file fails
Richard M. Stallman <rms@gnu.org>
parents:
8908
diff
changeset
|
2144 (set-visited-file-modtime old-modtime)))) |
8362
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2145 ;; Since we have created an entirely new file |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2146 ;; and renamed it, make sure it gets the |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2147 ;; right permission bits set. |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2148 (setq setmodes (file-modes buffer-file-name)) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2149 ;; We succeeded in writing the temp file, |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2150 ;; so rename it. |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2151 (rename-file tempname buffer-file-name t)) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2152 ;; If file not writable, see if we can make it writable |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2153 ;; temporarily while we write it. |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2154 ;; But no need to do so if we have just backed it up |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2155 ;; (setmodes is set) because that says we're superseding. |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2156 (cond ((and tempsetmodes (not setmodes)) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2157 ;; Change the mode back, after writing. |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2158 (setq setmodes (file-modes buffer-file-name)) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2159 (set-file-modes buffer-file-name 511))) |
87e1b76bbd6b
(set-auto-mode): Shorten scope of case-fold-search binding.
Richard M. Stallman <rms@gnu.org>
parents:
8251
diff
changeset
|
2160 (write-region (point-min) (point-max) |
12852
0b04a441c06d
(basic-save-buffer-1): Pass new arg to write-region.
Richard M. Stallman <rms@gnu.org>
parents:
12850
diff
changeset
|
2161 buffer-file-name nil t buffer-file-truename))) |
6574
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2162 setmodes)) |
f0e1ed0e82a7
(basic-save-buffer-1): New subroutine, broken out of basic-save-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
6546
diff
changeset
|
2163 |
337 | 2164 (defun save-some-buffers (&optional arg exiting) |
2165 "Save some modified file-visiting buffers. Asks user about each one. | |
423 | 2166 Optional argument (the prefix) non-nil means save all with no questions. |
2167 Optional second argument EXITING means ask about certain non-file buffers | |
2168 as well as about file buffers." | |
337 | 2169 (interactive "P") |
891 | 2170 (save-window-excursion |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2171 (let* ((queried nil) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2172 (files-done |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2173 (map-y-or-n-p |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2174 (function |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2175 (lambda (buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2176 (and (buffer-modified-p buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2177 (not (buffer-base-buffer buffer)) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2178 (or |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2179 (buffer-file-name buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2180 (and exiting |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2181 (progn |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2182 (set-buffer buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2183 (and buffer-offer-save (> (buffer-size) 0))))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2184 (if arg |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2185 t |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2186 (setq queried t) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2187 (if (buffer-file-name buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2188 (format "Save file %s? " |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2189 (buffer-file-name buffer)) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2190 (format "Save buffer %s? " |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2191 (buffer-name buffer))))))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2192 (function |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2193 (lambda (buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2194 (set-buffer buffer) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2195 (save-buffer))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2196 (buffer-list) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2197 '("buffer" "buffers" "save") |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2198 (list (list ?\C-r (lambda (buf) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2199 (view-buffer buf) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2200 (setq view-exit-action |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2201 '(lambda (ignore) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2202 (exit-recursive-edit))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2203 (recursive-edit) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2204 ;; Return nil to ask about BUF again. |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2205 nil) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2206 "display the current buffer")))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2207 (abbrevs-done |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2208 (and save-abbrevs abbrevs-changed |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2209 (progn |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2210 (if (or arg |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2211 (y-or-n-p (format "Save abbrevs in %s? " |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2212 abbrev-file-name))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2213 (write-abbrev-file nil)) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2214 ;; Don't keep bothering user if he says no. |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2215 (setq abbrevs-changed nil) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2216 t)))) |
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2217 (or queried (> files-done 0) abbrevs-done |
5398
499f25507242
(save-some-buffers): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
5389
diff
changeset
|
2218 (message "(No files need saving)"))))) |
337 | 2219 |
2220 (defun not-modified (&optional arg) | |
2221 "Mark current buffer as unmodified, not needing to be saved. | |
10430 | 2222 With prefix arg, mark buffer as modified, so \\[save-buffer] will save. |
2223 | |
2224 It is not a good idea to use this function in Lisp programs, because it | |
2225 prints a message in the minibuffer. Instead, use `set-buffer-modified-p'." | |
337 | 2226 (interactive "P") |
2227 (message (if arg "Modification-flag set" | |
2228 "Modification-flag cleared")) | |
2229 (set-buffer-modified-p arg)) | |
2230 | |
2231 (defun toggle-read-only (&optional arg) | |
2232 "Change whether this buffer is visiting its file read-only. | |
2233 With arg, set read-only iff arg is positive." | |
2234 (interactive "P") | |
2235 (setq buffer-read-only | |
2236 (if (null arg) | |
2237 (not buffer-read-only) | |
2238 (> (prefix-numeric-value arg) 0))) | |
11563
63215d2a1e3f
(toggle-read-only, rename-uniquely): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents:
11553
diff
changeset
|
2239 (force-mode-line-update)) |
337 | 2240 |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2241 (defun insert-file (filename) |
337 | 2242 "Insert contents of file FILENAME into buffer after point. |
2243 Set mark after the inserted text. | |
2244 | |
2245 This function is meant for the user to run interactively. | |
2246 Don't call it from programs! Use `insert-file-contents' instead. | |
2247 \(Its calling sequence is different; see its documentation)." | |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2248 (interactive "*fInsert file: ") |
3835
e3a00a940cf4
(insert-file): Report error if file is directory.
Richard M. Stallman <rms@gnu.org>
parents:
3709
diff
changeset
|
2249 (if (file-directory-p filename) |
e3a00a940cf4
(insert-file): Report error if file is directory.
Richard M. Stallman <rms@gnu.org>
parents:
3709
diff
changeset
|
2250 (signal 'file-error (list "Opening input file" "file is a directory" |
e3a00a940cf4
(insert-file): Report error if file is directory.
Richard M. Stallman <rms@gnu.org>
parents:
3709
diff
changeset
|
2251 filename))) |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2252 (let ((tem (insert-file-contents filename))) |
337 | 2253 (push-mark (+ (point) (car (cdr tem)))))) |
2254 | |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2255 (defun append-to-file (start end filename) |
337 | 2256 "Append the contents of the region to the end of file FILENAME. |
2257 When called from a function, expects three arguments, | |
2258 START, END and FILENAME. START and END are buffer positions | |
17004
cd1d930a2c98
(find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents:
16976
diff
changeset
|
2259 saying what text to write. |
cd1d930a2c98
(find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents:
16976
diff
changeset
|
2260 A prefix argument enables user to specify the coding-system interactively." |
17987
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2261 (interactive "r\nFAppend to file: ") |
2d9818a04c36
(find-file): Delete the facility of handling a prefix
Kenichi Handa <handa@m17n.org>
parents:
17894
diff
changeset
|
2262 (write-region start end filename t)) |
337 | 2263 |
2264 (defun file-newest-backup (filename) | |
2265 "Return most recent backup file for FILENAME or nil if no backups exist." | |
2266 (let* ((filename (expand-file-name filename)) | |
2267 (file (file-name-nondirectory filename)) | |
2268 (dir (file-name-directory filename)) | |
2269 (comp (file-name-all-completions file dir)) | |
14927
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2270 (newest nil) |
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2271 tem) |
337 | 2272 (while comp |
14927
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2273 (setq tem (car comp) |
337 | 2274 comp (cdr comp)) |
14927
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2275 (cond ((and (backup-file-name-p tem) |
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2276 (string= (file-name-sans-versions tem) file)) |
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2277 (setq tem (concat dir tem)) |
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2278 (if (or (null newest) |
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2279 (file-newer-than-file-p tem newest)) |
645493140921
(file-newest-backup): Return the newest backup for the
Richard M. Stallman <rms@gnu.org>
parents:
14883
diff
changeset
|
2280 (setq newest tem))))) |
337 | 2281 newest)) |
2282 | |
2283 (defun rename-uniquely () | |
2284 "Rename current buffer to a similar name not already taken. | |
2285 This function is useful for creating multiple shell process buffers | |
2286 or multiple mail buffers, etc." | |
2287 (interactive) | |
11522
5177611e8e4d
(rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents:
11463
diff
changeset
|
2288 (save-match-data |
11553
03aaf11843d1
(rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents:
11522
diff
changeset
|
2289 (let* ((base-name (if (and (string-match "<[0-9]+>\\'" (buffer-name)) |
03aaf11843d1
(rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents:
11522
diff
changeset
|
2290 (not (and buffer-file-name |
03aaf11843d1
(rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents:
11522
diff
changeset
|
2291 (string= (buffer-name) |
03aaf11843d1
(rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents:
11522
diff
changeset
|
2292 (file-name-nondirectory |
03aaf11843d1
(rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents:
11522
diff
changeset
|
2293 buffer-file-name))))) |
03aaf11843d1
(rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents:
11522
diff
changeset
|
2294 ;; If the existing buffer name has a <NNN>, |
03aaf11843d1
(rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents:
11522
diff
changeset
|
2295 ;; which isn't part of the file name (if any), |
03aaf11843d1
(rename-uniquely): Don't discard <NN> from end
Richard M. Stallman <rms@gnu.org>
parents:
11522
diff
changeset
|
2296 ;; then get rid of that. |
11522
5177611e8e4d
(rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents:
11463
diff
changeset
|
2297 (substring (buffer-name) 0 (match-beginning 0)) |
5177611e8e4d
(rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents:
11463
diff
changeset
|
2298 (buffer-name))) |
5177611e8e4d
(rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents:
11463
diff
changeset
|
2299 (new-buf (generate-new-buffer base-name)) |
5177611e8e4d
(rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents:
11463
diff
changeset
|
2300 (name (buffer-name new-buf))) |
5177611e8e4d
(rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents:
11463
diff
changeset
|
2301 (kill-buffer new-buf) |
5177611e8e4d
(rename-uniquely): Strip suffix before rename.
Richard M. Stallman <rms@gnu.org>
parents:
11463
diff
changeset
|
2302 (rename-buffer name) |
11563
63215d2a1e3f
(toggle-read-only, rename-uniquely): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents:
11553
diff
changeset
|
2303 (force-mode-line-update)))) |
423 | 2304 |
1537
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2305 (defun make-directory (dir &optional parents) |
3672
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2306 "Create the directory DIR and any nonexistent parent dirs. |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2307 Interactively, the default choice of directory to create |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2308 is the current default directory for file names. |
13980 | 2309 That is useful when you have visited a file in a nonexistent directory. |
3672
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2310 |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2311 Noninteractively, the second (optional) argument PARENTS says whether |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2312 to create parent directories if they don't exist." |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2313 (interactive |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2314 (list (read-file-name "Make directory: " default-directory default-directory |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2315 nil nil) |
3eaec128c91e
(make-directory): By default create dir default-dir.
Richard M. Stallman <rms@gnu.org>
parents:
3670
diff
changeset
|
2316 t)) |
7030
9e51b51e8595
Pass operation to find-file-name-handler.
Karl Heuer <kwzh@gnu.org>
parents:
6899
diff
changeset
|
2317 (let ((handler (find-file-name-handler dir 'make-directory))) |
1537
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2318 (if handler |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2319 (funcall handler 'make-directory dir parents) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2320 (if (not parents) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2321 (make-directory-internal dir) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2322 (let ((dir (directory-file-name (expand-file-name dir))) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2323 create-list) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2324 (while (not (file-exists-p dir)) |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2325 (setq create-list (cons dir create-list) |
1537
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2326 dir (directory-file-name (file-name-directory dir)))) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2327 (while create-list |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2328 (make-directory-internal (car create-list)) |
8531c6d96e5c
(make-directory): Renamed from make-directory-path.
Richard M. Stallman <rms@gnu.org>
parents:
1471
diff
changeset
|
2329 (setq create-list (cdr create-list)))))))) |
337 | 2330 |
2331 (put 'revert-buffer-function 'permanent-local t) | |
2332 (defvar revert-buffer-function nil | |
8160
1013d56a1133
(revert-buffer-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8158
diff
changeset
|
2333 "Function to use to revert this buffer, or nil to do the default. |
1013d56a1133
(revert-buffer-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8158
diff
changeset
|
2334 The function receives two arguments IGNORE-AUTO and NOCONFIRM, |
1013d56a1133
(revert-buffer-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8158
diff
changeset
|
2335 which are the arguments that `revert-buffer' received.") |
337 | 2336 |
2337 (put 'revert-buffer-insert-file-contents-function 'permanent-local t) | |
2338 (defvar revert-buffer-insert-file-contents-function nil | |
2339 "Function to use to insert contents when reverting this buffer. | |
2340 Gets two args, first the nominal file name to use, | |
2341 and second, t if reading the auto-save file.") | |
2342 | |
11995
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2343 (defvar before-revert-hook nil |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2344 "Normal hook for `revert-buffer' to run before reverting. |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2345 If `revert-buffer-function' is used to override the normal revert |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2346 mechanism, this hook is not used.") |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2347 |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2348 (defvar after-revert-hook nil |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2349 "Normal hook for `revert-buffer' to run after reverting. |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2350 Note that the hook value that it runs is the value that was in effect |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2351 before reverting; that makes a difference if you have buffer-local |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2352 hook functions. |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2353 |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2354 If `revert-buffer-function' is used to override the normal revert |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2355 mechanism, this hook is not used.") |
ea774a7c610c
(after-revert-hook, before-revert-hook): Add defvars.
Karl Heuer <kwzh@gnu.org>
parents:
11982
diff
changeset
|
2356 |
13857
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
2357 (defun revert-buffer (&optional ignore-auto noconfirm preserve-modes) |
16544
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2358 "Replace current buffer text with the text of the visited file on disk. |
337 | 2359 This undoes all changes since the file was visited or saved. |
605 | 2360 With a prefix argument, offer to revert from latest auto-save file, if |
2361 that is more recent than the visited file. | |
1905
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2362 |
16544
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2363 This command also works for special buffers that contain text which |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2364 doesn't come from a file, but reflects some other data base instead: |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2365 for example, Dired buffers and buffer-list buffers. In these cases, |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2366 it reconstructs the buffer contents from the appropriate data base. |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2367 |
10942
3f77513d0a77
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
10901
diff
changeset
|
2368 When called from Lisp, the first argument is IGNORE-AUTO; only offer |
1905
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2369 to revert from the auto-save file when this is nil. Note that the |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2370 sense of this argument is the reverse of the prefix argument, for the |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2371 sake of backward compatibility. IGNORE-AUTO is optional, defaulting |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2372 to nil. |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2373 |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2374 Optional second argument NOCONFIRM means don't ask for confirmation at |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2375 all. |
337 | 2376 |
15890
c2ef756791fe
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
15753
diff
changeset
|
2377 Optional third argument PRESERVE-MODES non-nil means don't alter |
c2ef756791fe
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
15753
diff
changeset
|
2378 the files modes. Normally we reinitialize them using `normal-mode'. |
c2ef756791fe
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
15753
diff
changeset
|
2379 |
605 | 2380 If the value of `revert-buffer-function' is non-nil, it is called to |
16544
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2381 do all the work for this command. Otherwise, the hooks |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2382 `before-revert-hook' and `after-revert-hook' are run at the beginning |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2383 and the end, and if `revert-buffer-insert-file-contents-function' is |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2384 non-nil, it is called instead of rereading visited file contents." |
5624
76f618230217
(revert-buffer): Run after-revert-hook.
Richard M. Stallman <rms@gnu.org>
parents:
5621
diff
changeset
|
2385 |
1905
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2386 ;; I admit it's odd to reverse the sense of the prefix argument, but |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2387 ;; there is a lot of code out there which assumes that the first |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2388 ;; argument should be t to avoid consulting the auto-save file, and |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2389 ;; there's no straightforward way to encourage authors to notice a |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2390 ;; reversal of the argument sense. So I'm just changing the user |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2391 ;; interface, but leaving the programmatic interface the same. |
10847
c79a2dca8f75
(revert-buffer): Use current-prefix-arg, not prefix-arg.
Karl Heuer <kwzh@gnu.org>
parents:
10735
diff
changeset
|
2392 (interactive (list (not current-prefix-arg))) |
337 | 2393 (if revert-buffer-function |
1905
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2394 (funcall revert-buffer-function ignore-auto noconfirm) |
337 | 2395 (let* ((opoint (point)) |
1905
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2396 (auto-save-p (and (not ignore-auto) |
494dd05d460c
* files.el (revert-buffer): Reverse the sense of the first
Jim Blandy <jimb@redhat.com>
parents:
1892
diff
changeset
|
2397 (recent-auto-save-p) |
337 | 2398 buffer-auto-save-file-name |
2399 (file-readable-p buffer-auto-save-file-name) | |
2400 (y-or-n-p | |
2401 "Buffer has been auto-saved recently. Revert from auto-save file? "))) | |
2402 (file-name (if auto-save-p | |
2403 buffer-auto-save-file-name | |
2404 buffer-file-name))) | |
2405 (cond ((null file-name) | |
2406 (error "Buffer does not seem to be associated with any file")) | |
2407 ((or noconfirm | |
17894
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2408 (and (not (buffer-modified-p)) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2409 (let ((tail revert-without-query) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2410 (found nil)) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2411 (while tail |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2412 (if (string-match (car tail) file-name) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2413 (setq found t)) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2414 (setq tail (cdr tail))) |
488536bc29c2
(path-separator, parse-colon-path): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
17734
diff
changeset
|
2415 found)) |
337 | 2416 (yes-or-no-p (format "Revert buffer from file %s? " |
2417 file-name))) | |
5716
82588f97d478
(revert-buffer): reposition after-revert-hook, and add before-revert-hook.
Karl Heuer <kwzh@gnu.org>
parents:
5624
diff
changeset
|
2418 (run-hooks 'before-revert-hook) |
337 | 2419 ;; If file was backed up but has changed since, |
2420 ;; we shd make another backup. | |
2421 (and (not auto-save-p) | |
423 | 2422 (not (verify-visited-file-modtime (current-buffer))) |
337 | 2423 (setq buffer-backed-up nil)) |
2424 ;; Get rid of all undo records for this buffer. | |
2425 (or (eq buffer-undo-list t) | |
2426 (setq buffer-undo-list nil)) | |
11982
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2427 ;; Effectively copy the after-revert-hook status, |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2428 ;; since after-find-file will clobber it. |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2429 (let ((global-hook (default-value 'after-revert-hook)) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2430 (local-hook-p (local-variable-p 'after-revert-hook)) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2431 (local-hook (and (local-variable-p 'after-revert-hook) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2432 after-revert-hook))) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2433 (let (buffer-read-only |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2434 ;; Don't make undo records for the reversion. |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2435 (buffer-undo-list t)) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2436 (if revert-buffer-insert-file-contents-function |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2437 (funcall revert-buffer-insert-file-contents-function |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2438 file-name auto-save-p) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2439 (if (not (file-exists-p file-name)) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2440 (error "File %s no longer exists!" file-name)) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2441 ;; Bind buffer-file-name to nil |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2442 ;; so that we don't try to lock the file. |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2443 (let ((buffer-file-name nil)) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2444 (or auto-save-p |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2445 (unlock-buffer))) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2446 (widen) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2447 (insert-file-contents file-name (not auto-save-p) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2448 nil nil t))) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2449 (goto-char (min opoint (point-max))) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2450 ;; Recompute the truename in case changes in symlinks |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2451 ;; have changed the truename. |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2452 (setq buffer-file-truename |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2453 (abbreviate-file-name (file-truename buffer-file-name))) |
13857
aa5e493a867d
(revert-buffer): New arg preserve-modes.
Richard M. Stallman <rms@gnu.org>
parents:
13832
diff
changeset
|
2454 (after-find-file nil nil t t preserve-modes) |
11982
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2455 ;; Run after-revert-hook as it was before we reverted. |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2456 (setq-default revert-buffer-internal-hook global-hook) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2457 (if local-hook-p |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2458 (progn |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2459 (make-local-variable 'revert-buffer-internal-hook) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2460 (setq revert-buffer-internal-hook local-hook)) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2461 (kill-local-variable 'revert-buffer-internal-hook)) |
a88f862b3927
(revert-buffer): Save after-revert-hook (both local and
Karl Heuer <kwzh@gnu.org>
parents:
11981
diff
changeset
|
2462 (run-hooks 'revert-buffer-internal-hook)) |
5716
82588f97d478
(revert-buffer): reposition after-revert-hook, and add before-revert-hook.
Karl Heuer <kwzh@gnu.org>
parents:
5624
diff
changeset
|
2463 t))))) |
337 | 2464 |
2465 (defun recover-file (file) | |
2466 "Visit file FILE, but get contents from its last auto-save file." | |
10712
5b86ce0cddb5
(recover-file): Use ordinary `f' to read file name.
Richard M. Stallman <rms@gnu.org>
parents:
10430
diff
changeset
|
2467 ;; Actually putting the file name in the minibuffer should be used |
5b86ce0cddb5
(recover-file): Use ordinary `f' to read file name.
Richard M. Stallman <rms@gnu.org>
parents:
10430
diff
changeset
|
2468 ;; only rarely. |
5b86ce0cddb5
(recover-file): Use ordinary `f' to read file name.
Richard M. Stallman <rms@gnu.org>
parents:
10430
diff
changeset
|
2469 ;; Not just because users often use the default. |
13693
40766c32c127
(recover-file): Also recover new, unsaved files.
Erik Naggum <erik@naggum.no>
parents:
13662
diff
changeset
|
2470 (interactive "FRecover file: ") |
337 | 2471 (setq file (expand-file-name file)) |
5958
64fa4e0f3fce
(recover-file): Call auto-save-file-name-p correctly.
Richard M. Stallman <rms@gnu.org>
parents:
5956
diff
changeset
|
2472 (if (auto-save-file-name-p (file-name-nondirectory file)) |
64fa4e0f3fce
(recover-file): Call auto-save-file-name-p correctly.
Richard M. Stallman <rms@gnu.org>
parents:
5956
diff
changeset
|
2473 (error "%s is an auto-save file" file)) |
337 | 2474 (let ((file-name (let ((buffer-file-name file)) |
2475 (make-auto-save-file-name)))) | |
12846
fc74ffbce5a9
(recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents:
12740
diff
changeset
|
2476 (cond ((if (file-exists-p file) |
fc74ffbce5a9
(recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents:
12740
diff
changeset
|
2477 (not (file-newer-than-file-p file-name file)) |
fc74ffbce5a9
(recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents:
12740
diff
changeset
|
2478 (not (file-exists-p file-name))) |
337 | 2479 (error "Auto-save file %s not current" file-name)) |
2480 ((save-window-excursion | |
2481 (if (not (eq system-type 'vax-vms)) | |
2482 (with-output-to-temp-buffer "*Directory*" | |
2483 (buffer-disable-undo standard-output) | |
2484 (call-process "ls" nil standard-output nil | |
736
18b892513cb7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
735
diff
changeset
|
2485 (if (file-symlink-p file) "-lL" "-l") |
18b892513cb7
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
735
diff
changeset
|
2486 file file-name))) |
337 | 2487 (yes-or-no-p (format "Recover auto save file %s? " file-name))) |
2488 (switch-to-buffer (find-file-noselect file t)) | |
17004
cd1d930a2c98
(find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents:
16976
diff
changeset
|
2489 (let ((buffer-read-only nil) |
cd1d930a2c98
(find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents:
16976
diff
changeset
|
2490 ;; Auto-saved file shoule be read without any code conversion. |
cd1d930a2c98
(find-file, find-file-other-window,
Karl Heuer <kwzh@gnu.org>
parents:
16976
diff
changeset
|
2491 (coding-system-for-read 'no-conversion)) |
337 | 2492 (erase-buffer) |
2493 (insert-file-contents file-name nil)) | |
1212
de70f50101c0
(after-find-file): New arg NOAUTO.
Richard M. Stallman <rms@gnu.org>
parents:
1182
diff
changeset
|
2494 (after-find-file nil nil t)) |
17525
a92a4702711a
(recover-file): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
17421
diff
changeset
|
2495 (t (error "Recover-file cancelled"))))) |
337 | 2496 |
11739
a9614b779859
(recover-session): Renamed from multiple-recover.
Richard M. Stallman <rms@gnu.org>
parents:
11636
diff
changeset
|
2497 (defun recover-session () |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2498 "Recover auto save files from a previous Emacs session. |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2499 This command first displays a Dired buffer showing you the |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2500 previous sessions that you could recover from. |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2501 To choose one, move point to the proper line and then type C-c C-c. |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2502 Then you'll be asked about a number of files to recover." |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2503 (interactive) |
16372
e311d5372d8c
(recover-session): Error if session files turned off.
Richard M. Stallman <rms@gnu.org>
parents:
16334
diff
changeset
|
2504 (if (null auto-save-list-file-prefix) |
e311d5372d8c
(recover-session): Error if session files turned off.
Richard M. Stallman <rms@gnu.org>
parents:
16334
diff
changeset
|
2505 (error "You set `auto-save-list-file-prefix' to disable making session files")) |
13879
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2506 (let ((ls-lisp-support-shell-wildcards t)) |
17208
67515c200d09
(recover-session): Add `t' to switches.
Richard M. Stallman <rms@gnu.org>
parents:
17004
diff
changeset
|
2507 (dired (concat auto-save-list-file-prefix "*") |
67515c200d09
(recover-session): Add `t' to switches.
Richard M. Stallman <rms@gnu.org>
parents:
17004
diff
changeset
|
2508 (concat dired-listing-switches "t"))) |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2509 (goto-char (point-min)) |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2510 (or (looking-at "Move to the session you want to recover,") |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2511 (let ((inhibit-read-only t)) |
12740
8b44b70e655d
(recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents:
12719
diff
changeset
|
2512 (insert "Move to the session you want to recover,\n" |
8b44b70e655d
(recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents:
12719
diff
changeset
|
2513 "then type C-c C-c to select it.\n\n" |
8b44b70e655d
(recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents:
12719
diff
changeset
|
2514 "You can also delete some of these files;\n" |
8b44b70e655d
(recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents:
12719
diff
changeset
|
2515 "type d on a line to mark that file for deletion.\n\n"))) |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2516 (use-local-map (nconc (make-sparse-keymap) (current-local-map))) |
12050
b740095d6a47
(multiple-recover-finish): Renamed to recover-session-finish.
Roland McGrath <roland@gnu.org>
parents:
11995
diff
changeset
|
2517 (define-key (current-local-map) "\C-c\C-c" 'recover-session-finish)) |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2518 |
12050
b740095d6a47
(multiple-recover-finish): Renamed to recover-session-finish.
Roland McGrath <roland@gnu.org>
parents:
11995
diff
changeset
|
2519 (defun recover-session-finish () |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2520 "Choose one saved session to recover auto-save files from. |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2521 This command is used in the special Dired buffer created by |
12050
b740095d6a47
(multiple-recover-finish): Renamed to recover-session-finish.
Roland McGrath <roland@gnu.org>
parents:
11995
diff
changeset
|
2522 \\[recover-session]." |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2523 (interactive) |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2524 ;; Get the name of the session file to recover from. |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2525 (let ((file (dired-get-filename)) |
13115
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2526 files |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2527 (buffer (get-buffer-create " *recover*"))) |
12740
8b44b70e655d
(recover-session): Mention deletion is possible.
Richard M. Stallman <rms@gnu.org>
parents:
12719
diff
changeset
|
2528 (dired-do-flagged-delete t) |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2529 (unwind-protect |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2530 (save-excursion |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2531 ;; Read in the auto-save-list file. |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2532 (set-buffer buffer) |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2533 (erase-buffer) |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2534 (insert-file-contents file) |
13115
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2535 ;; Loop thru the text of that file |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2536 ;; and get out the names of the files to recover. |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2537 (while (not (eobp)) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2538 (let (thisfile autofile) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2539 (if (eolp) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2540 ;; This is a pair of lines for a non-file-visiting buffer. |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2541 ;; Get the auto-save file name and manufacture |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2542 ;; a "visited file name" from that. |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2543 (progn |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2544 (forward-line 1) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2545 (setq autofile |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2546 (buffer-substring-no-properties |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2547 (point) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2548 (save-excursion |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2549 (end-of-line) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2550 (point)))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2551 (setq thisfile |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2552 (expand-file-name |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2553 (substring |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2554 (file-name-nondirectory autofile) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2555 1 -1) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2556 (file-name-directory autofile))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2557 (forward-line 1)) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2558 ;; This pair of lines is a file-visiting |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2559 ;; buffer. Use the visited file name. |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2560 (progn |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2561 (setq thisfile |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2562 (buffer-substring-no-properties |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2563 (point) (progn (end-of-line) (point)))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2564 (forward-line 1) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2565 (setq autofile |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2566 (buffer-substring-no-properties |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2567 (point) (progn (end-of-line) (point)))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2568 (forward-line 1))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2569 ;; Ignore a file if its auto-save file does not exist now. |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2570 (if (file-exists-p autofile) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2571 (setq files (cons thisfile files))))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2572 (setq files (nreverse files)) |
12846
fc74ffbce5a9
(recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents:
12740
diff
changeset
|
2573 ;; The file contains a pair of line for each auto-saved buffer. |
fc74ffbce5a9
(recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents:
12740
diff
changeset
|
2574 ;; The first line of the pair contains the visited file name |
fc74ffbce5a9
(recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents:
12740
diff
changeset
|
2575 ;; or is empty if the buffer was not visiting a file. |
fc74ffbce5a9
(recover-file): It's ok if the visited file doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents:
12740
diff
changeset
|
2576 ;; The second line is the auto-save file name. |
13115
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2577 (if files |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2578 (map-y-or-n-p "Recover %s? " |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2579 (lambda (file) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2580 (condition-case nil |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2581 (save-excursion (recover-file file)) |
13832
44e936e550ae
(save-some-buffers): Don't give message if we queried.
Roland McGrath <roland@gnu.org>
parents:
13823
diff
changeset
|
2582 (error |
13115
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2583 "Failed to recover `%s'" file))) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2584 files |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2585 '("file" "files" "recover")) |
b4601a8c1e5c
(recover-session-finish): Ask only about files that
Richard M. Stallman <rms@gnu.org>
parents:
13095
diff
changeset
|
2586 (message "No files can be recovered from this session now"))) |
11630
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2587 (kill-buffer buffer)))) |
d18ae33bb3b6
(multiple-recover, multiple-recover-finish): New commands.
Richard M. Stallman <rms@gnu.org>
parents:
11563
diff
changeset
|
2588 |
15963
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2589 (defun kill-some-buffers (&optional list) |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2590 "For each buffer in LIST, ask whether to kill it. |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2591 LIST defaults to all existing live buffers." |
337 | 2592 (interactive) |
15963
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2593 (if (null list) |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2594 (setq list (buffer-list))) |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2595 (while list |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2596 (let* ((buffer (car list)) |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2597 (name (buffer-name buffer))) |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2598 (and (not (string-equal name "")) |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2599 (/= (aref name 0) ? ) |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2600 (yes-or-no-p |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2601 (format "Buffer %s %s. Kill? " |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2602 name |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2603 (if (buffer-modified-p buffer) |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2604 "HAS BEEN EDITED" "is unmodified"))) |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2605 (kill-buffer buffer))) |
5b10dc4cd791
(kill-some-buffers): New arg LIST says buffers to maybe kill.
Richard M. Stallman <rms@gnu.org>
parents:
15890
diff
changeset
|
2606 (setq list (cdr list)))) |
337 | 2607 |
2608 (defun auto-save-mode (arg) | |
2609 "Toggle auto-saving of contents of current buffer. | |
1395
f6f838c4a26e
(buffer-file-number): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
1371
diff
changeset
|
2610 With prefix argument ARG, turn auto-saving on if positive, else off." |
337 | 2611 (interactive "P") |
2612 (setq buffer-auto-save-file-name | |
2613 (and (if (null arg) | |
8158
a6fa25ffa764
(auto-save-mode): If autosave is off because buffer has
Richard M. Stallman <rms@gnu.org>
parents:
8157
diff
changeset
|
2614 (or (not buffer-auto-save-file-name) |
a6fa25ffa764
(auto-save-mode): If autosave is off because buffer has
Richard M. Stallman <rms@gnu.org>
parents:
8157
diff
changeset
|
2615 ;; If autosave is off because buffer has shrunk, |
a6fa25ffa764
(auto-save-mode): If autosave is off because buffer has
Richard M. Stallman <rms@gnu.org>
parents:
8157
diff
changeset
|
2616 ;; then toggling should turn it on. |
a6fa25ffa764
(auto-save-mode): If autosave is off because buffer has
Richard M. Stallman <rms@gnu.org>
parents:
8157
diff
changeset
|
2617 (< buffer-saved-size 0)) |
337 | 2618 (or (eq arg t) (listp arg) (and (integerp arg) (> arg 0)))) |
2619 (if (and buffer-file-name auto-save-visited-file-name | |
2620 (not buffer-read-only)) | |
2621 buffer-file-name | |
2622 (make-auto-save-file-name)))) | |
6677
3c7e3d1cc3ad
(auto-save-mode): Don't let buffer-saved-size stay negative.
Richard M. Stallman <rms@gnu.org>
parents:
6664
diff
changeset
|
2623 ;; If -1 was stored here, to temporarily turn off saving, |
3c7e3d1cc3ad
(auto-save-mode): Don't let buffer-saved-size stay negative.
Richard M. Stallman <rms@gnu.org>
parents:
6664
diff
changeset
|
2624 ;; turn it back on. |
3c7e3d1cc3ad
(auto-save-mode): Don't let buffer-saved-size stay negative.
Richard M. Stallman <rms@gnu.org>
parents:
6664
diff
changeset
|
2625 (and (< buffer-saved-size 0) |
3c7e3d1cc3ad
(auto-save-mode): Don't let buffer-saved-size stay negative.
Richard M. Stallman <rms@gnu.org>
parents:
6664
diff
changeset
|
2626 (setq buffer-saved-size 0)) |
337 | 2627 (if (interactive-p) |
2628 (message "Auto-save %s (in this buffer)" | |
2629 (if buffer-auto-save-file-name "on" "off"))) | |
2630 buffer-auto-save-file-name) | |
2631 | |
2632 (defun rename-auto-save-file () | |
2633 "Adjust current buffer's auto save file name for current conditions. | |
2634 Also rename any existing auto save file, if it was made in this session." | |
2635 (let ((osave buffer-auto-save-file-name)) | |
2636 (setq buffer-auto-save-file-name | |
2637 (make-auto-save-file-name)) | |
2638 (if (and osave buffer-auto-save-file-name | |
2639 (not (string= buffer-auto-save-file-name buffer-file-name)) | |
2640 (not (string= buffer-auto-save-file-name osave)) | |
2641 (file-exists-p osave) | |
2642 (recent-auto-save-p)) | |
2643 (rename-file osave buffer-auto-save-file-name t)))) | |
2644 | |
2645 (defun make-auto-save-file-name () | |
2646 "Return file name to use for auto-saves of current buffer. | |
2647 Does not consider `auto-save-visited-file-name' as that variable is checked | |
2648 before calling this function. You can redefine this for customization. | |
2649 See also `auto-save-file-name-p'." | |
2650 (if buffer-file-name | |
15269
b6381b3a6c99
(make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents:
15056
diff
changeset
|
2651 (if (and (eq system-type 'ms-dos) |
b6381b3a6c99
(make-backup-file-name): Check msdos-long-file-names.
Karl Heuer <kwzh@gnu.org>
parents:
15056
diff
changeset
|
2652 (not (msdos-long-file-names))) |
13885
bcb436f256e3
(make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents:
13879
diff
changeset
|
2653 (let ((fn (file-name-nondirectory buffer-file-name))) |
bcb436f256e3
(make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents:
13879
diff
changeset
|
2654 (string-match "\\`\\([^.]+\\)\\(\\.\\(..?\\)?.?\\|\\)\\'" fn) |
bcb436f256e3
(make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents:
13879
diff
changeset
|
2655 (concat (file-name-directory buffer-file-name) |
bcb436f256e3
(make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents:
13879
diff
changeset
|
2656 "#" (match-string 1 fn) |
bcb436f256e3
(make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents:
13879
diff
changeset
|
2657 "." (match-string 3 fn) "#")) |
bcb436f256e3
(make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents:
13879
diff
changeset
|
2658 (concat (file-name-directory buffer-file-name) |
bcb436f256e3
(make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents:
13879
diff
changeset
|
2659 "#" |
bcb436f256e3
(make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents:
13879
diff
changeset
|
2660 (file-name-nondirectory buffer-file-name) |
bcb436f256e3
(make-auto-save-file-name): Make name always end in #,
Richard M. Stallman <rms@gnu.org>
parents:
13879
diff
changeset
|
2661 "#")) |
7944
a114bbe9a63c
(make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents:
7895
diff
changeset
|
2662 |
a114bbe9a63c
(make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents:
7895
diff
changeset
|
2663 ;; Deal with buffers that don't have any associated files. (Mail |
a114bbe9a63c
(make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents:
7895
diff
changeset
|
2664 ;; mode tends to create a good number of these.) |
a114bbe9a63c
(make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents:
7895
diff
changeset
|
2665 |
7895
fac7ff0a7aeb
(make-auto-save-file-name): Don't use slashes in autosave name for a non-file
Karl Heuer <kwzh@gnu.org>
parents:
7730
diff
changeset
|
2666 (let ((buffer-name (buffer-name)) |
7944
a114bbe9a63c
(make-auto-save-file-name): Convert slashes to \! and double the backslashes.
Richard M. Stallman <rms@gnu.org>
parents:
7895
diff
changeset
|
2667 (limit 0)) |
17256
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2668 ;; Eliminate all slashes and backslashes by |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2669 ;; replacing them with sequences that start with %. |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2670 ;; Quote % also, to keep distinct names distinct. |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2671 (while (string-match "[/\\%]" buffer-name limit) |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2672 (let* ((character (aref buffer-name (match-beginning 0))) |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2673 (replacement |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2674 (cond ((eq character ?%) "%%") |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2675 ((eq character ?/) "%+") |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2676 ((eq character ?\\) "%-")))) |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2677 (setq buffer-name (replace-match replacement t t buffer-name)) |
d8e38cfca028
(make-auto-save-file-name): Replace both / and \
Richard M. Stallman <rms@gnu.org>
parents:
17208
diff
changeset
|
2678 (setq limit (1+ (match-end 0))))) |
16015
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
2679 ;; Generate the file name. |
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
2680 (expand-file-name |
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
2681 (format "#%s#%s#" buffer-name (make-temp-name "")) |
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
2682 ;; Try a few alternative directories, to get one we can write it. |
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
2683 (cond |
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
2684 ((file-writable-p default-directory) default-directory) |
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
2685 ((file-writable-p "/var/tmp/") "/var/tmp/") |
f51aa92862ac
(make-auto-save-file-name): Try a few directories
Richard M. Stallman <rms@gnu.org>
parents:
15963
diff
changeset
|
2686 ("~/")))))) |
337 | 2687 |
2688 (defun auto-save-file-name-p (filename) | |
2689 "Return non-nil if FILENAME can be yielded by `make-auto-save-file-name'. | |
2690 FILENAME should lack slashes. You can redefine this for customization." | |
2691 (string-match "^#.*#$" filename)) | |
2692 | |
13879
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2693 (defun wildcard-to-regexp (wildcard) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2694 "Given a shell file name pattern WILDCARD, return an equivalent regexp. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2695 The generated regexp will match a filename iff the filename |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2696 matches that wildcard according to shell rules. Only wildcards known |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2697 by `sh' are supported." |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2698 (let* ((i (string-match "[[.*+\\^$?]" wildcard)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2699 ;; Copy the initial run of non-special characters. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2700 (result (substring wildcard 0 i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2701 (len (length wildcard))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2702 ;; If no special characters, we're almost done. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2703 (if i |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2704 (while (< i len) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2705 (let ((ch (aref wildcard i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2706 j) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2707 (setq |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2708 result |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2709 (concat result |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2710 (cond |
16544
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2711 ((and (eq ch ?\[) |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2712 (< (1+ i) len) |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2713 (eq (aref wildcard (1+ i)) ?\])) |
9fffc9e5fc42
(revert-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16477
diff
changeset
|
2714 "\\[") |
13879
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2715 ((eq ch ?\[) ; [...] maps to regexp char class |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2716 (progn |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2717 (setq i (1+ i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2718 (concat |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2719 (cond |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2720 ((eq (aref wildcard i) ?!) ; [!...] -> [^...] |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2721 (progn |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2722 (setq i (1+ i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2723 (if (eq (aref wildcard i) ?\]) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2724 (progn |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2725 (setq i (1+ i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2726 "[^]") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2727 "[^"))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2728 ((eq (aref wildcard i) ?^) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2729 ;; Found "[^". Insert a `\0' character |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2730 ;; (which cannot happen in a filename) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2731 ;; into the character class, so that `^' |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2732 ;; is not the first character after `[', |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2733 ;; and thus non-special in a regexp. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2734 (progn |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2735 (setq i (1+ i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2736 "[\000^")) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2737 ((eq (aref wildcard i) ?\]) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2738 ;; I don't think `]' can appear in a |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2739 ;; character class in a wildcard, but |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2740 ;; let's be general here. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2741 (progn |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2742 (setq i (1+ i)) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2743 "[]")) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2744 (t "[")) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2745 (prog1 ; copy everything upto next `]'. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2746 (substring wildcard |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2747 i |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2748 (setq j (string-match |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2749 "]" wildcard i))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2750 (setq i (if j (1- j) (1- len))))))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2751 ((eq ch ?.) "\\.") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2752 ((eq ch ?*) "[^\000]*") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2753 ((eq ch ?+) "\\+") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2754 ((eq ch ?^) "\\^") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2755 ((eq ch ?$) "\\$") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2756 ((eq ch ?\\) "\\\\") ; probably cannot happen... |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2757 ((eq ch ??) "[^\000]") |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2758 (t (char-to-string ch))))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2759 (setq i (1+ i))))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2760 ;; Shell wildcards should match the entire filename, |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2761 ;; not its part. Make the regexp say so. |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2762 (concat "\\`" result "\\'"))) |
4888716715e0
(wildcard-to-regexp): New function.
Richard M. Stallman <rms@gnu.org>
parents:
13857
diff
changeset
|
2763 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
2764 (defcustom list-directory-brief-switches |
337 | 2765 (if (eq system-type 'vax-vms) "" "-CF") |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
2766 "*Switches for list-directory to pass to `ls' for brief listing," |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
2767 :type 'string |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
2768 :group 'dired) |
337 | 2769 |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
2770 (defcustom list-directory-verbose-switches |
337 | 2771 (if (eq system-type 'vax-vms) |
2772 "/PROTECTION/SIZE/DATE/OWNER/WIDTH=(OWNER:10)" | |
2773 "-l") | |
17673
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
2774 "*Switches for list-directory to pass to `ls' for verbose listing," |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
2775 :type 'string |
ba2c70d76b5b
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17666
diff
changeset
|
2776 :group 'dired) |
337 | 2777 |
2778 (defun list-directory (dirname &optional verbose) | |
2779 "Display a list of files in or matching DIRNAME, a la `ls'. | |
2780 DIRNAME is globbed by the shell if necessary. | |
2781 Prefix arg (second arg if noninteractive) means supply -l switch to `ls'. | |
2782 Actions controlled by variables `list-directory-brief-switches' | |
2783 and `list-directory-verbose-switches'." | |
2784 (interactive (let ((pfx current-prefix-arg)) | |
2785 (list (read-file-name (if pfx "List directory (verbose): " | |
2786 "List directory (brief): ") | |
2787 nil default-directory nil) | |
2788 pfx))) | |
2789 (let ((switches (if verbose list-directory-verbose-switches | |
2790 list-directory-brief-switches))) | |
2791 (or dirname (setq dirname default-directory)) | |
2792 (setq dirname (expand-file-name dirname)) | |
2793 (with-output-to-temp-buffer "*Directory*" | |
2794 (buffer-disable-undo standard-output) | |
2795 (princ "Directory ") | |
2796 (princ dirname) | |
2797 (terpri) | |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2798 (save-excursion |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2799 (set-buffer "*Directory*") |
14401
83e1b1f5ce8f
(list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents:
14287
diff
changeset
|
2800 (setq default-directory |
83e1b1f5ce8f
(list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents:
14287
diff
changeset
|
2801 (if (file-directory-p dirname) |
83e1b1f5ce8f
(list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents:
14287
diff
changeset
|
2802 (file-name-as-directory dirname) |
83e1b1f5ce8f
(list-directory): Set default-directory better if the
Richard M. Stallman <rms@gnu.org>
parents:
14287
diff
changeset
|
2803 (file-name-directory dirname))) |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2804 (let ((wildcard (not (file-directory-p dirname)))) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2805 (insert-directory dirname switches wildcard (not wildcard))))))) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2806 |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2807 (defvar insert-directory-program "ls" |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2808 "Absolute or relative name of the `ls' program used by `insert-directory'.") |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2809 |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2810 ;; insert-directory |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2811 ;; - must insert _exactly_one_line_ describing FILE if WILDCARD and |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2812 ;; FULL-DIRECTORY-P is nil. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2813 ;; The single line of output must display FILE's name as it was |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2814 ;; given, namely, an absolute path name. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2815 ;; - must insert exactly one line for each file if WILDCARD or |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2816 ;; FULL-DIRECTORY-P is t, plus one optional "total" line |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2817 ;; before the file lines, plus optional text after the file lines. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2818 ;; Lines are delimited by "\n", so filenames containing "\n" are not |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2819 ;; allowed. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2820 ;; File lines should display the basename. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2821 ;; - must be consistent with |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2822 ;; - functions dired-move-to-filename, (these two define what a file line is) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2823 ;; dired-move-to-end-of-filename, |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2824 ;; dired-between-files, (shortcut for (not (dired-move-to-filename))) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2825 ;; dired-insert-headerline |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2826 ;; dired-after-subdir-garbage (defines what a "total" line is) |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2827 ;; - variable dired-subdir-regexp |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2828 (defun insert-directory (file switches &optional wildcard full-directory-p) |
4148
6b065ebb9090
* files.el (insert-directory): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
4032
diff
changeset
|
2829 "Insert directory listing for FILE, formatted according to SWITCHES. |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2830 Leaves point after the inserted text. |
8207
96e6518c209b
(insert-directory): Allow list for SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
8181
diff
changeset
|
2831 SWITCHES may be a string of options, or a list of strings. |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2832 Optional third arg WILDCARD means treat FILE as shell wildcard. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2833 Optional fourth arg FULL-DIRECTORY-P means file is a directory and |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2834 switches do not contain `d', so that a full listing is expected. |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2835 |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2836 This works by running a directory listing program |
1892
c4ff65277bb3
(insert-directory): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
1879
diff
changeset
|
2837 whose name is in the variable `insert-directory-program'. |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2838 If WILDCARD, it also runs the shell specified by `shell-file-name'." |
7730
3846302b9c9c
(insert-directory): Use expanded file name to find handler.
Richard M. Stallman <rms@gnu.org>
parents:
7686
diff
changeset
|
2839 ;; We need the directory in order to find the right handler. |
3846302b9c9c
(insert-directory): Use expanded file name to find handler.
Richard M. Stallman <rms@gnu.org>
parents:
7686
diff
changeset
|
2840 (let ((handler (find-file-name-handler (expand-file-name file) |
3846302b9c9c
(insert-directory): Use expanded file name to find handler.
Richard M. Stallman <rms@gnu.org>
parents:
7686
diff
changeset
|
2841 'insert-directory))) |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2842 (if handler |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2843 (funcall handler 'insert-directory file switches |
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2844 wildcard full-directory-p) |
337 | 2845 (if (eq system-type 'vax-vms) |
1109
c9feb3e64805
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1103
diff
changeset
|
2846 (vms-read-directory file switches (current-buffer)) |
16052
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2847 (or (= 0 |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2848 (if wildcard |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2849 ;; Run ls in the directory of the file pattern we asked for. |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2850 (let ((default-directory |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2851 (if (file-name-absolute-p file) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2852 (file-name-directory file) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2853 (file-name-directory (expand-file-name file)))) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2854 (pattern (file-name-nondirectory file)) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2855 (beg 0)) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2856 ;; Quote some characters that have special meanings in shells; |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2857 ;; but don't quote the wildcards--we want them to be special. |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2858 ;; We also currently don't quote the quoting characters |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2859 ;; in case people want to use them explicitly to quote |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2860 ;; wildcard characters. |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2861 (while (string-match "[ \t\n;<>&|()#$]" pattern beg) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2862 (setq pattern |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2863 (concat (substring pattern 0 (match-beginning 0)) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2864 "\\" |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2865 (substring pattern (match-beginning 0))) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2866 beg (1+ (match-end 0)))) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2867 (call-process shell-file-name nil t nil |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2868 "-c" (concat "\\" ;; Disregard shell aliases! |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2869 insert-directory-program |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2870 " -d " |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2871 (if (stringp switches) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2872 switches |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2873 (mapconcat 'identity switches " ")) |
16792
8ae41d9d350d
(insert-directory): Use -- as arg
Richard M. Stallman <rms@gnu.org>
parents:
16687
diff
changeset
|
2874 " -- " |
16052
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2875 pattern))) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2876 ;; SunOS 4.1.3, SVr4 and others need the "." to list the |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2877 ;; directory if FILE is a symbolic link. |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2878 (apply 'call-process |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2879 insert-directory-program nil t nil |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2880 (let (list) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2881 (if (listp switches) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2882 (setq list switches) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2883 (if (not (equal switches "")) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2884 (progn |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2885 ;; Split the switches at any spaces |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2886 ;; so we can pass separate options as separate args. |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2887 (while (string-match " " switches) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2888 (setq list (cons (substring switches 0 (match-beginning 0)) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2889 list) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2890 switches (substring switches (match-end 0)))) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2891 (setq list (nreverse (cons switches list)))))) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2892 (append list |
16792
8ae41d9d350d
(insert-directory): Use -- as arg
Richard M. Stallman <rms@gnu.org>
parents:
16687
diff
changeset
|
2893 ;; Avoid lossage if FILE starts with `-'. |
8ae41d9d350d
(insert-directory): Use -- as arg
Richard M. Stallman <rms@gnu.org>
parents:
16687
diff
changeset
|
2894 '("--") |
16052
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2895 (list |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2896 (if full-directory-p |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2897 (concat (file-name-as-directory file) ".") |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2898 file))))))) |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2899 ;; We get here if ls failed. |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2900 ;; Access the file to get a suitable error. |
e528e99859e3
(insert-directory): If ls fails, get an error.
Richard M. Stallman <rms@gnu.org>
parents:
16015
diff
changeset
|
2901 (access-file file "Reading directory")))))) |
337 | 2902 |
6050
afc731c614d3
(kill-emacs-query-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5974
diff
changeset
|
2903 (defvar kill-emacs-query-functions nil |
7686
814e18e2d3d4
(kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
7682
diff
changeset
|
2904 "Functions to call with no arguments to query about killing Emacs. |
10901
218400c0a4a7
(kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
10847
diff
changeset
|
2905 If any of these functions returns nil, killing Emacs is cancelled. |
218400c0a4a7
(kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
10847
diff
changeset
|
2906 `save-buffers-kill-emacs' (\\[save-buffers-kill-emacs]) calls these functions, |
218400c0a4a7
(kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
10847
diff
changeset
|
2907 but `kill-emacs', the low level primitive, does not. |
218400c0a4a7
(kill-emacs-query-functions): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
10847
diff
changeset
|
2908 See also `kill-emacs-hook'.") |
6050
afc731c614d3
(kill-emacs-query-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5974
diff
changeset
|
2909 |
337 | 2910 (defun save-buffers-kill-emacs (&optional arg) |
2911 "Offer to save each buffer, then kill this Emacs process. | |
2912 With prefix arg, silently save all file-visiting buffers, then kill." | |
2913 (interactive "P") | |
2914 (save-some-buffers arg t) | |
2915 (and (or (not (memq t (mapcar (function | |
2916 (lambda (buf) (and (buffer-file-name buf) | |
2917 (buffer-modified-p buf)))) | |
2918 (buffer-list)))) | |
2919 (yes-or-no-p "Modified buffers exist; exit anyway? ")) | |
2920 (or (not (fboundp 'process-list)) | |
2921 ;; process-list is not defined on VMS. | |
2922 (let ((processes (process-list)) | |
2923 active) | |
2924 (while processes | |
739
0bb85f26b79c
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
736
diff
changeset
|
2925 (and (memq (process-status (car processes)) '(run stop open)) |
337 | 2926 (let ((val (process-kill-without-query (car processes)))) |
2927 (process-kill-without-query (car processes) val) | |
2928 val) | |
2929 (setq active t)) | |
2930 (setq processes (cdr processes))) | |
2931 (or (not active) | |
2932 (yes-or-no-p "Active processes exist; kill them and exit anyway? ")))) | |
6050
afc731c614d3
(kill-emacs-query-functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5974
diff
changeset
|
2933 ;; Query the user for other things, perhaps. |
10236
013842475608
(save-buffers-kill-emacs): Fix backward test of value of
Richard M. Stallman <rms@gnu.org>
parents:
10169
diff
changeset
|
2934 (run-hook-with-args-until-failure 'kill-emacs-query-functions) |
337 | 2935 (kill-emacs))) |
2936 | |
16387
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2937 ;; We use /: as a prefix to "quote" a file name |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2938 ;; so that magic file name handlers will not apply to it. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2939 |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2940 (setq file-name-handler-alist |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2941 (cons '("\\`/:" . file-name-non-special) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2942 file-name-handler-alist)) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2943 |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2944 ;; We depend on being the last handler on the list, |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2945 ;; so that anything else which does need handling |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2946 ;; has been handled already. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2947 ;; So it is safe for us to inhibit *all* magic file name handlers. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2948 |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2949 (defun file-name-non-special (operation &rest arguments) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2950 (let ((file-name-handler-alist nil) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2951 ;; Get a list of the indices of the args which are file names. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2952 (file-arg-indices |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2953 (cdr (or (assq operation |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2954 ;; The first four are special because they |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2955 ;; return a file name. We want to include the /: |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2956 ;; in the return value. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2957 ;; So just avoid stripping it in the first place. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2958 '((expand-file-name . nil) |
18040
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
2959 ;; `identity' means just return the first arg |
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
2960 ;; as stripped of its quoting. |
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
2961 (substitute-in-file-name . identity) |
16387
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2962 (file-name-directory . nil) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2963 (file-name-as-directory . nil) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2964 (directory-file-name . nil) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2965 (rename-file 0 1) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2966 (copy-file 0 1) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2967 (make-symbolic-link 0 1) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2968 (add-name-to-file 0 1))) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2969 ;; For all other operations, treat the first argument only |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2970 ;; as the file name. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2971 '(nil 0)))) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2972 ;; Copy ARGUMENTS so we can replace elements in it. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2973 (arguments (copy-sequence arguments))) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2974 ;; Strip off the /: from the file names that have this handler. |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2975 (save-match-data |
18040
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
2976 (while (consp file-arg-indices) |
16387
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2977 (and (nth (car file-arg-indices) arguments) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2978 (string-match "\\`/:" (nth (car file-arg-indices) arguments)) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2979 (setcar (nthcdr (car file-arg-indices) arguments) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2980 (substring (nth (car file-arg-indices) arguments) 2))) |
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2981 (setq file-arg-indices (cdr file-arg-indices)))) |
18040
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
2982 (if (eq file-arg-indices 'identity) |
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
2983 (car arguments) |
89969b579beb
(file-name-non-special): Special handling for
Richard M. Stallman <rms@gnu.org>
parents:
17987
diff
changeset
|
2984 (apply operation arguments)))) |
16387
8c72a338e436
(file-name-non-special): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16372
diff
changeset
|
2985 |
337 | 2986 (define-key ctl-x-map "\C-f" 'find-file) |
2987 (define-key ctl-x-map "\C-q" 'toggle-read-only) | |
2988 (define-key ctl-x-map "\C-r" 'find-file-read-only) | |
2989 (define-key ctl-x-map "\C-v" 'find-alternate-file) | |
2990 (define-key ctl-x-map "\C-s" 'save-buffer) | |
2991 (define-key ctl-x-map "s" 'save-some-buffers) | |
2992 (define-key ctl-x-map "\C-w" 'write-file) | |
2993 (define-key ctl-x-map "i" 'insert-file) | |
2994 (define-key esc-map "~" 'not-modified) | |
2995 (define-key ctl-x-map "\C-d" 'list-directory) | |
2996 (define-key ctl-x-map "\C-c" 'save-buffers-kill-emacs) | |
2997 | |
2998 (define-key ctl-x-4-map "f" 'find-file-other-window) | |
2999 (define-key ctl-x-4-map "r" 'find-file-read-only-other-window) | |
3000 (define-key ctl-x-4-map "\C-f" 'find-file-other-window) | |
3001 (define-key ctl-x-4-map "b" 'switch-to-buffer-other-window) | |
854
0b4f3a91f207
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
3002 (define-key ctl-x-4-map "\C-o" 'display-buffer) |
423 | 3003 |
778 | 3004 (define-key ctl-x-5-map "b" 'switch-to-buffer-other-frame) |
3005 (define-key ctl-x-5-map "f" 'find-file-other-frame) | |
3006 (define-key ctl-x-5-map "\C-f" 'find-file-other-frame) | |
3007 (define-key ctl-x-5-map "r" 'find-file-read-only-other-frame) | |
662
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
638
diff
changeset
|
3008 |
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
638
diff
changeset
|
3009 ;;; files.el ends here |