Mercurial > emacs
diff src/editfns.c @ 4714:350231e38e68
(Finsert_and_inherit): New function.
(Finsert_and_inherit_before_markers): New function.
(Finsert, Finsert_before_markers): Pass new arg to insert_from_string*.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 14 Sep 1993 12:08:49 +0000 |
parents | 1fc792473491 |
children | 7a6aea972b7e |
line wrap: on
line diff
--- a/src/editfns.c Tue Sep 14 12:08:30 1993 +0000 +++ b/src/editfns.c Tue Sep 14 12:08:49 1993 +0000 @@ -719,7 +719,43 @@ } else if (XTYPE (tem) == Lisp_String) { - insert_from_string (tem, 0, XSTRING (tem)->size); + insert_from_string (tem, 0, XSTRING (tem)->size, 0); + } + else + { + tem = wrong_type_argument (Qchar_or_string_p, tem); + goto retry; + } + } + + return Qnil; +} + +DEFUN ("insert-and-inherit", Finsert_and_inherit, Sinsert_and_inherit, + 0, MANY, 0, + "Insert the arguments at point, inheriting properties from adjoining text.\n\ +Point moves forward so that it ends up after the inserted text.\n\ +Any other markers at the point of insertion remain before the text.") + (nargs, args) + int nargs; + register Lisp_Object *args; +{ + register int argnum; + register Lisp_Object tem; + char str[1]; + + for (argnum = 0; argnum < nargs; argnum++) + { + tem = args[argnum]; + retry: + if (XTYPE (tem) == Lisp_Int) + { + str[0] = XINT (tem); + insert (str, 1); + } + else if (XTYPE (tem) == Lisp_String) + { + insert_from_string (tem, 0, XSTRING (tem)->size, 1); } else { @@ -754,7 +790,44 @@ } else if (XTYPE (tem) == Lisp_String) { - insert_from_string_before_markers (tem, 0, XSTRING (tem)->size); + insert_from_string_before_markers (tem, 0, XSTRING (tem)->size, 0); + } + else + { + tem = wrong_type_argument (Qchar_or_string_p, tem); + goto retry; + } + } + + return Qnil; +} + +DEFUN ("insert-before-markers-and-inherit", + Finsert_and_inherit_before_markers, Sinsert_and_inherit_before_markers, + 0, MANY, 0, + "Insert text at point, relocating markers and inheriting properties.\n\ +Point moves forward so that it ends up after the inserted text.\n\ +Any other markers at the point of insertion also end up after the text.") + (nargs, args) + int nargs; + register Lisp_Object *args; +{ + register int argnum; + register Lisp_Object tem; + char str[1]; + + for (argnum = 0; argnum < nargs; argnum++) + { + tem = args[argnum]; + retry: + if (XTYPE (tem) == Lisp_Int) + { + str[0] = XINT (tem); + insert_before_markers (str, 1); + } + else if (XTYPE (tem) == Lisp_String) + { + insert_from_string_before_markers (tem, 0, XSTRING (tem)->size, 1); } else { @@ -918,7 +991,7 @@ /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */ graft_intervals_into_buffer (copy_intervals (bp->intervals, start, len), - opoint, bp); + opoint, bp, 0); return Qnil; } @@ -1533,6 +1606,8 @@ defsubr (&Schar_after); defsubr (&Sinsert); defsubr (&Sinsert_before_markers); + defsubr (&Sinsert_and_inherit); + defsubr (&Sinsert_and_inherit_before_markers); defsubr (&Sinsert_char); defsubr (&Suser_login_name);