summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1994-04-05 03:50:46 +0000
committerRichard M. Stallman <rms@gnu.org>1994-04-05 03:50:46 +0000
commit82c2d8392ef24cf0e4bb24546fb0810f0a68901b (patch)
tree075cc7911700afcb01bfc211a70f8fdd7517fc07
parent0b7f1ef2c91ea54611ceb73899ad488b8dddba0b (diff)
downloademacs-82c2d8392ef24cf0e4bb24546fb0810f0a68901b.tar.gz
(Fdo_auto_save): Don't turn off auto save mode.
Instead, store -1 in b->save_length. And don't auto save if there is -1 there. (Vinhibit_file_name_handlers): New var. (syms_of_fileio): Set up Lisp var. (Ffind_file_name_handler): Obey the variable.
-rw-r--r--src/fileio.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/src/fileio.c b/src/fileio.c
index a6232e14e43..487cb1184d3 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -125,6 +125,8 @@ int insert_default_directory;
Zero means use var format. */
int vms_stmlf_recfm;
+static Lisp_Object Vinhibit_file_name_handlers;
+
Lisp_Object Qfile_error, Qfile_already_exists;
Lisp_Object Qfile_name_history;
@@ -196,7 +198,10 @@ DEFUN ("find-file-name-handler", Ffind_file_name_handler, Sfind_file_name_handle
"Return FILENAME's handler function, if its syntax is handled specially.\n\
Otherwise, return nil.\n\
A file name is handled if one of the regular expressions in\n\
-`file-name-handler-alist' matches it.")
+`file-name-handler-alist' matches it.\n\n\
+If FILENAME is a member of `inhibit-file-name-handlers',\n\
+then its handler is not run. This is lets handlers\n\
+use the standard functions without calling themselves recursively.")
(filename)
Lisp_Object filename;
{
@@ -205,6 +210,19 @@ A file name is handled if one of the regular expressions in\n\
CHECK_STRING (filename, 0);
+ if (! NILP (Vinhibit_file_name_handlers))
+ {
+ Lisp_Object tail;
+ for (tail = Vinhibit_file_name_handlers; CONSP (tail);
+ tail = XCONS (tail)->cdr)
+ {
+ Lisp_Object tem;
+ tem = Fstring_equal (tail, filename);
+ if (!NILP (tem))
+ return Qnil;
+ }
+ }
+
for (chain = Vfile_name_handler_alist; XTYPE (chain) == Lisp_Cons;
chain = XCONS (chain)->cdr)
{
@@ -3486,6 +3504,8 @@ Non-nil second argument means save only current buffer.")
if (XTYPE (b->auto_save_file_name) == Lisp_String
&& b->save_modified < BUF_MODIFF (b)
&& b->auto_save_modified < BUF_MODIFF (b)
+ /* -1 means we've turned off autosaving for a while--see below. */
+ && XINT (b->save_length) >= 0
&& (do_handled_files
|| NILP (Ffind_file_name_handler (b->auto_save_file_name))))
{
@@ -3510,10 +3530,9 @@ Non-nil second argument means save only current buffer.")
/* It has shrunk too much; turn off auto-saving here. */
message ("Buffer %s has shrunk a lot; auto save turned off there",
XSTRING (b->name)->data);
- /* User can reenable saving with M-x auto-save. */
- b->auto_save_file_name = Qnil;
- /* Prevent warning from repeating if user does so. */
- XFASTINT (b->save_length) = 0;
+ /* Turn off auto-saving until there's a real save,
+ and prevent any more warnings. */
+ XSET (b->save_length, Lisp_Int, -1);
Fsleep_for (make_number (1), Qnil);
continue;
}
@@ -3966,6 +3985,10 @@ increasing order. If there are several functions in the list, the several\n\
lists are merged destructively.");
Vwrite_region_annotate_functions = Qnil;
+ DEFVAR_LISP ("inhibit-file-name-handlers", &Vinhibit_file_name_handlers,
+ "A list of file names for which handlers should not be used.");
+ Vinhibit_file_name_handlers = Qnil;
+
defsubr (&Sfind_file_name_handler);
defsubr (&Sfile_name_directory);
defsubr (&Sfile_name_nondirectory);