]> code.delx.au - gnu-emacs/blobdiff - src/editfns.c
*** empty log message ***
[gnu-emacs] / src / editfns.c
index 3f74b3a8753208535bf7b5ff4046f4747982b7e4..d4f8b5fd8c46c21b8c02763eebfb266e251f3836 100644 (file)
@@ -315,7 +315,7 @@ text_property_stickiness (prop, pos)
 
       if (EQ (rear_non_sticky, Qnil)
          || (CONSP (rear_non_sticky)
-             && !Fmemq (prop, rear_non_sticky)))
+             && NILP (Fmemq (prop, rear_non_sticky))))
        /* PROP is not rear-non-sticky, and since this takes precedence over
           any front-stickiness, PROP is inherited from before.  */
        return -1;
@@ -326,7 +326,7 @@ text_property_stickiness (prop, pos)
 
   if (EQ (front_sticky, Qt)
       || (CONSP (front_sticky)
-         && Fmemq (prop, front_sticky)))
+         && !NILP (Fmemq (prop, front_sticky))))
     /* PROP is inherited from after.  */
     return 1;
 
@@ -518,7 +518,9 @@ If the optional argument ONLY-IN-LINE is non-nil and constraining\n\
 NEW-POS would move it to a different line, NEW-POS is returned\n\
 unconstrained.  This useful for commands that move by line, like\n\
 \\[next-line] or \\[beginning-of-line], which should generally respect field boundaries\n\
-only in the case where they can still move to the right line.")
+only in the case where they can still move to the right line.\n\
+\n\
+Field boundaries are not noticed if `inhibit-field-text-motion' is non-nil.")
   (new_pos, old_pos, escape_from_edge, only_in_line)
      Lisp_Object new_pos, old_pos, escape_from_edge, only_in_line;
 {
@@ -532,7 +534,9 @@ only in the case where they can still move to the right line.")
       XSETFASTINT (new_pos, PT);
     }
 
-  if (!EQ (new_pos, old_pos) && !text_property_eq (Qfield, new_pos, old_pos))
+  if (NILP (Vinhibit_field_text_motion)
+      && !EQ (new_pos, old_pos)
+      && !text_property_eq (Qfield, new_pos, old_pos))
     /* NEW_POS is not within the same field as OLD_POS; try to
        move NEW_POS so that it is.  */
     {
@@ -580,8 +584,10 @@ DEFUN ("line-beginning-position", Fline_beginning_position, Sline_beginning_posi
 With argument N not nil or 1, move forward N - 1 lines first.\n\
 If scan reaches end of buffer, return that position.\n\
 The scan does not cross a field boundary unless it would move\n\
-beyond there to a different line.  And if N is nil or 1,\n\
-and scan starts at a field boundary, the scan stops as soon as it starts.\n\n\
+beyond there to a different line.  Field boundaries are not noticed if\n\
+`inhibit-field-text-motion' is non-nil. .And if N is nil or 1,\n\
+and scan starts at a field boundary, the scan stops as soon as it starts.\n\
+\n\
 This function does not move point.")
   (n)
      Lisp_Object n;
@@ -601,11 +607,9 @@ This function does not move point.")
   SET_PT_BOTH (orig, orig_byte);
 
   /* Return END constrained to the current input field.  */
-  if (NILP (Vinhibit_field_text_motion))
-    end = Fconstrain_to_field (make_number (end), make_number (orig),
-                               XINT (n) != 1 ? Qt : Qnil,
-                               Qt);
-  return end;
+  return Fconstrain_to_field (make_number (end), make_number (orig),
+                             XINT (n) != 1 ? Qt : Qnil,
+                             Qt);
 }
 
 DEFUN ("line-end-position", Fline_end_position, Sline_end_position,
@@ -628,10 +632,8 @@ This function does not move point.")
   end_pos = find_before_next_newline (orig, 0, XINT (n) - (XINT (n) <= 0));
 
   /* Return END_POS constrained to the current input field.  */
-  if (NILP (Vinhibit_field_text_motion))
-    end_pos = Fconstrain_to_field (make_number (end_pos), make_number (orig),
-                                  Qnil, Qt);
-  return end_pos;
+  return Fconstrain_to_field (make_number (end_pos), make_number (orig),
+                             Qnil, Qt);
 }
 \f
 Lisp_Object
@@ -841,10 +843,7 @@ If BYTEPOS is out of range, the value is nil.")
 \f
 DEFUN ("following-char", Ffollowing_char, Sfollowing_char, 0, 0, 0,
   "Return the character following point, as a number.\n\
-At the end of the buffer or accessible region, return 0.\n\
-If `enable-multibyte-characters' is nil or point is not\n\
- at character boundary,  multibyte form is ignored,\n\
- and only one byte following point is returned as a character.")
+At the end of the buffer or accessible region, return 0.")
   ()
 {
   Lisp_Object temp;
@@ -857,10 +856,7 @@ If `enable-multibyte-characters' is nil or point is not\n\
 
 DEFUN ("preceding-char", Fprevious_char, Sprevious_char, 0, 0, 0,
   "Return the character preceding point, as a number.\n\
-At the beginning of the buffer or accessible region, return 0.\n\
-If `enable-multibyte-characters' is nil or point is not\n\
- at character boundary, multi-byte form is ignored,\n\
- and only one byte preceding point is returned as a character.")
+At the beginning of the buffer or accessible region, return 0.")
   ()
 {
   Lisp_Object temp;
@@ -918,7 +914,7 @@ DEFUN ("eolp", Feolp, Seolp, 0, 0, 0,
 
 DEFUN ("char-after", Fchar_after, Schar_after, 0, 1, 0,
   "Return character in current buffer at position POS.\n\
-POS is an integer or a buffer pointer.\n\
+POS is an integer or a marker.\n\
 If POS is out of range, the value is nil.")
   (pos)
      Lisp_Object pos;
@@ -951,7 +947,7 @@ If POS is out of range, the value is nil.")
 
 DEFUN ("char-before", Fchar_before, Schar_before, 0, 1, 0,
   "Return character in current buffer preceding position POS.\n\
-POS is an integer or a buffer pointer.\n\
+POS is an integer or a marker.\n\
 If POS is out of range, the value is nil.")
   (pos)
      Lisp_Object pos;
@@ -2278,12 +2274,13 @@ Both characters must have the same length of multi-byte form.")
 #define COMBINING_BOTH (COMBINING_BEFORE | COMBINING_AFTER)
   int maybe_byte_combining = COMBINING_NO;
   int last_changed;
+  int multibyte_p = !NILP (current_buffer->enable_multibyte_characters);
 
   validate_region (&start, &end);
   CHECK_NUMBER (fromchar, 2);
   CHECK_NUMBER (tochar, 3);
 
-  if (! NILP (current_buffer->enable_multibyte_characters))
+  if (multibyte_p)
     {
       len = CHAR_STRING (XFASTINT (fromchar), fromstr);
       if (CHAR_STRING (XFASTINT (tochar), tostr) != len)
@@ -2339,7 +2336,10 @@ Both characters must have the same length of multi-byte form.")
          stop = end_byte;
        }
       p = BYTE_POS_ADDR (pos_byte);
-      INC_POS (pos_byte_next);
+      if (multibyte_p)
+       INC_POS (pos_byte_next);
+      else
+       ++pos_byte_next;
       if (pos_byte_next - pos_byte == len
          && p[0] == fromstr[0]
          && (len == 1
@@ -2775,7 +2775,7 @@ minibuffer contents show.")
 {
 #ifdef HAVE_MENUS
   if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
-      && NILP (use_dialog_box))
+      && use_dialog_box)
     return Fmessage_box (nargs, args);
 #endif
   return Fmessage (nargs, args);
@@ -2792,7 +2792,7 @@ DEFUN ("current-message", Fcurrent_message, Scurrent_message, 0, 0, 0,
 DEFUN ("propertize", Fpropertize, Spropertize, 3, MANY, 0,
        "Return a copy of STRING with text properties added.\n\
 First argument is the string to copy.\n\
-Remaining arguments are sequences of PROPERTY VALUE pairs for text\n\
+Remaining arguments form a sequence of PROPERTY VALUE pairs for text\n\
 properties to add to the result ")
   (nargs, args)
      int nargs;
@@ -2943,7 +2943,10 @@ Use %% to put a single % into the output.")
          }
        else if (SYMBOLP (args[n]))
          {
-           XSETSTRING (args[n], XSYMBOL (args[n])->name);
+           /* Use a temp var to avoid problems when ENABLE_CHECKING
+              is turned on.  */
+           struct Lisp_String *t = XSYMBOL (args[n])->name;
+           XSETSTRING (args[n], t);
            if (STRING_MULTIBYTE (args[n]) && ! multibyte)
              {
                multibyte = 1;
@@ -2961,7 +2964,6 @@ Use %% to put a single % into the output.")
        /* Would get MPV otherwise, since Lisp_Int's `point' to low memory.  */
        else if (INTEGERP (args[n]) && *format != 's')
          {
-#ifdef LISP_FLOAT_TYPE
            /* The following loop assumes the Lisp type indicates
               the proper way to pass the argument.
               So make sure we have a flonum if the argument should
@@ -2969,7 +2971,6 @@ Use %% to put a single % into the output.")
            if (*format == 'e' || *format == 'f' || *format == 'g')
              args[n] = Ffloat (args[n]);
            else
-#endif
              if (*format != 'd' && *format != 'o' && *format != 'x'
                  && *format != 'i' && *format != 'X' && *format != 'c')
                error ("Invalid format operation %%%c", *format);
@@ -2988,14 +2989,12 @@ Use %% to put a single % into the output.")
                thissize = STRING_BYTES (XSTRING (args[n]));
              }
          }
-#ifdef LISP_FLOAT_TYPE
        else if (FLOATP (args[n]) && *format != 's')
          {
            if (! (*format == 'e' || *format == 'f' || *format == 'g'))
              args[n] = Ftruncate (args[n], Qnil);
            thissize = 200;
          }
-#endif
        else
          {
            /* Anything but a string, convert to a string using princ.  */