Mercurial > emacs
changeset 48527:ba7cb9f8dfc3
(Fcall_interactively): If a command fails because
`*' detects a read-only buffer, but RECORD_FLAG is set,
record it anyway if the args don't actually do tty input.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 24 Nov 2002 19:04:25 +0000 |
parents | cd3075e04573 |
children | 467b0e57d985 |
files | src/callint.c |
diffstat | 1 files changed, 22 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/callint.c Sun Nov 24 19:02:14 2002 +0000 +++ b/src/callint.c Sun Nov 24 19:04:25 2002 +0000 @@ -221,6 +221,7 @@ int arg_from_tty = 0; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; int key_count; + int record_then_fail = 0; if (NILP (keys)) keys = this_command_keys, key_count = this_command_key_count; @@ -289,7 +290,7 @@ else goto lose; - /* If either specs or string is set to a string, use it. */ + /* If either SPECS or STRING is set to a string, use it. */ if (STRINGP (specs)) { /* Make a copy of string so that if a GC relocates specs, @@ -373,7 +374,7 @@ for (next_event = 0; next_event < key_count; next_event++) if (EVENT_HAS_PARAMETERS (XVECTOR (keys)->contents[next_event])) break; - + /* Handle special starting chars `*' and `@'. Also `-'. */ /* Note that `+' is reserved for user extensions. */ while (1) @@ -384,7 +385,22 @@ { string++; if (!NILP (current_buffer->read_only)) - Fbarf_if_buffer_read_only (); + { + if (!NILP (record_flag)) + { + unsigned char *p = string; + while (*p) + { + if (! (*p == 'r' || *p == 'p' || *p == 'P' + || *p == '\n')) + Fbarf_if_buffer_read_only (); + p++; + } + record_then_fail = 1; + } + else + Fbarf_if_buffer_read_only (); + } } /* Ignore this for semi-compatibility with Lucid. */ else if (*string == '-') @@ -789,6 +805,9 @@ if (varies[i] >= 1 && varies[i] <= 4) XSETINT (args[i], marker_position (args[i])); + if (record_then_fail) + Fbarf_if_buffer_read_only (); + single_kboard_state (); {