]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/cmds.c (Fself_insert_command): Get last-command-event via (new) arg.
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 17 Nov 2018 15:47:48 +0000 (10:47 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 17 Nov 2018 15:47:48 +0000 (10:47 -0500)
doc/lispref/text.texi
etc/NEWS
src/cmds.c

index 6c38d8eed096e1fbfab6dfe9359d69c36283df48..51d2753f404ca89778ecfa83dcd45a2f254bfaf7 100644 (file)
@@ -500,14 +500,14 @@ after point.  It leaves the mark after the inserted text.  The value
 is @code{nil}.
 @end deffn
 
-@deffn Command self-insert-command count
+@deffn Command self-insert-command count &optional char
 @cindex character insertion
 @cindex self-insertion
-This command inserts the last character typed; it does so @var{count}
-times, before point, and returns @code{nil}.  Most printing characters
-are bound to this command.  In routine use, @code{self-insert-command}
-is the most frequently called function in Emacs, but programs rarely use
-it except to install it on a keymap.
+This command inserts the character @var{char} (the last character typed);
+it does so @var{count} times, before point, and returns @code{nil}.
+Most printing characters are bound to this command.  In routine use,
+@code{self-insert-command} is the most frequently called function in Emacs,
+but programs rarely use it except to install it on a keymap.
 
 In an interactive call, @var{count} is the numeric prefix argument.
 
index 92b20c700a421bdb48a83a138dcf61094fc46cb7..1382b4d81e54cacb5a382eb0a2d88bc71f4da1f8 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1065,6 +1065,9 @@ removed.
 \f
 * Lisp Changes in Emacs 27.1
 
++++
+** self-insert-command takes the char to insert as (optional) argument
+
 ** 'lookup-key' can take a list of keymaps as argument.
 
 +++
index 1616efbb446b551a063626da6f593d6cd9923025..f6803f460a8e115aff09e82d05c75e0103ad08c6 100644 (file)
@@ -260,11 +260,10 @@ because it respects values of `delete-active-region' and `overwrite-mode'.  */)
   return Qnil;
 }
 
-/* Note that there's code in command_loop_1 which typically avoids
-   calling this.  */
-DEFUN ("self-insert-command", Fself_insert_command, Sself_insert_command, 1, 1, "p",
+DEFUN ("self-insert-command", Fself_insert_command, Sself_insert_command, 1, 2,
+       "(list (prefix-numeric-value current-prefix-arg) last-command-event)",
        doc: /* Insert the character you type.
-Whichever character you type to run this command is inserted.
+Whichever character you type to run this command is inserted.
 The numeric prefix argument N says how many times to repeat the insertion.
 Before insertion, `expand-abbrev' is executed if the inserted character does
 not have word syntax and the previous character in the buffer does.
@@ -272,10 +271,14 @@ After insertion, `internal-auto-fill' is called if
 `auto-fill-function' is non-nil and if the `auto-fill-chars' table has
 a non-nil value for the inserted character.  At the end, it runs
 `post-self-insert-hook'.  */)
-  (Lisp_Object n)
+  (Lisp_Object n, Lisp_Object c)
 {
   CHECK_FIXNUM (n);
 
+  /* Backward compatibility.  */
+  if (NILP (c))
+    c = last_command_event;
+
   if (XFIXNUM (n) < 0)
     error ("Negative repetition argument %"pI"d", XFIXNUM (n));
 
@@ -283,11 +286,11 @@ a non-nil value for the inserted character.  At the end, it runs
     call0 (Qundo_auto_amalgamate);
 
   /* Barf if the key that invoked this was not a character.  */
-  if (!CHARACTERP (last_command_event))
+  if (!CHARACTERP (c))
     bitch_at_user ();
   else {
     int character = translate_char (Vtranslation_table_for_input,
-                                   XFIXNUM (last_command_event));
+                                   XFIXNUM (c));
     int val = internal_self_insert (character, XFIXNAT (n));
     if (val == 2)
       Fset (Qundo_auto__this_command_amalgamating, Qnil);