diff options
| author | Richard M. Stallman <rms@gnu.org> | 1995-09-03 18:53:58 +0000 | 
|---|---|---|
| committer | Richard M. Stallman <rms@gnu.org> | 1995-09-03 18:53:58 +0000 | 
| commit | fc299663f433667c891ffee902c80340919fb6fd (patch) | |
| tree | bcf119bc61328c08beb666b2b0a078944d73f168 /src/marker.c | |
| parent | 26d84681fa5828afaf408282eae08caa4e61cc8b (diff) | |
| download | emacs-fc299663f433667c891ffee902c80340919fb6fd.tar.gz | |
(Fcopy_marker): New arg TYPE.
(Fmarker_insertion_type, Fset_marker_insertion_type): New functions.
(syms_of_marker): defsubr them.
Diffstat (limited to 'src/marker.c')
| -rw-r--r-- | src/marker.c | 60 | 
1 files changed, 44 insertions, 16 deletions
diff --git a/src/marker.c b/src/marker.c index ccb770ea65a..3bbccb0b735 100644 --- a/src/marker.c +++ b/src/marker.c @@ -70,7 +70,7 @@ DEFUN ("marker-position", Fmarker_position, Smarker_position, 1, 1, 0,      }    return Qnil;  } - +  DEFUN ("set-marker", Fset_marker, Sset_marker, 2, 3, 0,    "Position MARKER before character number NUMBER in BUFFER.\n\  BUFFER defaults to the current buffer.\n\ @@ -263,28 +263,54 @@ marker_position (marker)    return i;  } - -DEFUN ("copy-marker", Fcopy_marker, Scopy_marker, 1, 1, 0, + +DEFUN ("copy-marker", Fcopy_marker, Scopy_marker, 1, 2, 0,    "Return a new marker pointing at the same place as MARKER.\n\  If argument is a number, makes a new marker pointing\n\ -at that position in the current buffer.") -  (marker) -     register Lisp_Object marker; +at that position in the current buffer.\n\ +The optional argument TYPE specifies the insertion type of the new marker;\n\ +see `marker-insertion-type'.") +  (marker, type) +     register Lisp_Object marker, type;  {    register Lisp_Object new; -  while (1) +  if (INTEGERP (marker) || MARKERP (marker))      { -      if (INTEGERP (marker) || MARKERP (marker)) -	{ -	  new = Fmake_marker (); -	  Fset_marker (new, marker, -		       (MARKERP (marker) ? Fmarker_buffer (marker) : Qnil)); -	  return new; -	} -      else -	marker = wrong_type_argument (Qinteger_or_marker_p, marker); +      new = Fmake_marker (); +      Fset_marker (new, marker, +		   (MARKERP (marker) ? Fmarker_buffer (marker) : Qnil)); +      XMARKER (new)->insertion_type = !NILP (type); +      return new;      } +  else +    marker = wrong_type_argument (Qinteger_or_marker_p, marker); +} + +DEFUN ("marker-insertion-type", Fmarker_insertion_type, +       Smarker_insertion_type, 1, 1, 0, +  "Return insertion type of MARKER: t if it stays after inserted text.\n\ +nil means the marker stays before text inserted there.") +  (marker) +     register Lisp_Object marker; +{ +  register Lisp_Object buf; +  CHECK_MARKER (marker, 0); +  return XMARKER (marker)->insertion_type ? Qt : Qnil; +} + +DEFUN ("set-marker-insertion-type", Fset_marker_insertion_type, +       Sset_marker_insertion_type, 2, 2, 0, +  "Set the insertion-type of MARKER to TYPE.\n\ +If TYPE is t, it means the marker advances when you insert text at it.\n\ +If TYPE is t, it means the marker stays behind when you insert text at it.") +  (marker, type) +     Lisp_Object marker, type; +{ +  CHECK_MARKER (marker, 0); + +  XMARKER (marker)->insertion_type = ! NILP (type); +  return type;  }  syms_of_marker () @@ -293,4 +319,6 @@ syms_of_marker ()    defsubr (&Smarker_buffer);    defsubr (&Sset_marker);    defsubr (&Scopy_marker); +  defsubr (&Smarker_insertion_type); +  defsubr (&Sset_marker_insertion_type);  }  | 
