int opoint = PT, opoint_byte = PT_BYTE;
int pos, pos_byte;
int count, shortage;
- int temp;
if (NILP (n))
count = 1;
0, 1, "p",
"Move point to beginning of current line.\n\
With argument N not nil or 1, move forward N - 1 lines first.\n\
-If scan reaches end of buffer, stop there without error.")
+If point reaches the beginning or end of buffer, it stops there.\n\
+This command does not move point across a field boundary\n\
+unless it would move beyond there to a different line.\n\
+If N is nil or 1, and point starts at a field boundary, point does not move.")
(n)
Lisp_Object n;
{
CHECK_NUMBER (n, 0);
SET_PT (XINT (Fline_beginning_position (n)));
+
return Qnil;
}
0, 1, "p",
"Move point to end of current line.\n\
With argument N not nil or 1, move forward N - 1 lines first.\n\
-If scan reaches end of buffer, stop there without error.")
+If point reaches the beginning or end of buffer, it stops there.\n\
+This command does not move point across a field boundary\n\
+unless it would move beyond there to a different line.\n\
+If N is nil or 1, and point starts at a field boundary, point does not move.")
(n)
Lisp_Object n;
{
- register int pos;
- register int stop;
-
if (NILP (n))
XSETFASTINT (n, 1);
else
/* Length of multi-byte form of C. */
int len;
/* Working buffer and pointer for multi-byte form of C. */
- unsigned char workbuf[4], *str;
+ unsigned char str[MAX_MULTIBYTE_LENGTH];
int chars_to_delete = 0;
int spaces_to_insert = 0;
overwrite = current_buffer->overwrite_mode;
- if (!NILP (Vbefore_change_function) || !NILP (Vafter_change_function)
- || !NILP (Vbefore_change_functions) || !NILP (Vafter_change_functions))
+ if (!NILP (Vbefore_change_functions) || !NILP (Vafter_change_functions))
hairy = 1;
/* At first, get multi-byte form of C in STR. */
if (!NILP (current_buffer->enable_multibyte_characters))
{
c = unibyte_char_to_multibyte (c);
- len = CHAR_STRING (c, workbuf, str);
+ len = CHAR_STRING (c, str);
+ if (len == 1)
+ /* If C has modifier bits, this makes C an appropriate
+ one-byte char. */
+ c = *str;
}
else
- workbuf[0] = c, str = workbuf, len = 1;
-
+ {
+ str[0] = (SINGLE_BYTE_CHAR_P (c)
+ ? c
+ : multibyte_char_to_unibyte (c, Qnil));
+ len = 1;
+ }
if (!NILP (overwrite)
&& PT < ZV)
{
&& XINT (current_buffer->tab_width) > 0
&& XFASTINT (current_buffer->tab_width) < 20
&& (target_clm = (current_column ()
- + XINT (Fchar_width (make_number (c2)))),
+ + XINT (Fchar_width (make_number (c)))),
target_clm % XFASTINT (current_buffer->tab_width)))))
{
int pos = PT;
sym = Fexpand_abbrev ();
- /* If we expanded an abbrev which has only a hook,
+ /* If we expanded an abbrev which has a hook,
and the hook has a non-nil `no-self-insert' property,
return right away--don't really self-insert. */
if (! NILP (sym) && ! NILP (XSYMBOL (sym)->function)
string = concat2 (tem, string);
}
- replace_range (PT, PT + chars_to_delete, string, 1, 1, 0);
+ replace_range (PT, PT + chars_to_delete, string, 1, 1, 1);
Fforward_char (make_number (1 + spaces_to_insert));
}
else
insert_and_inherit (str, len);
- if ((c == ' ' || c == '\n')
+ if ((CHAR_TABLE_P (Vauto_fill_chars)
+ ? !NILP (CHAR_TABLE_REF (Vauto_fill_chars, c))
+ : (c == ' ' || c == '\n'))
&& !noautofill
&& !NILP (current_buffer->auto_fill_function))
{
hairy = 2;
}
-#ifdef HAVE_FACES
/* If previous command specified a face to use, use it. */
if (!NILP (Vself_insert_face)
&& EQ (current_kboard->Vlast_command, Vself_insert_face_command))
Qface, Vself_insert_face, Qnil);
Vself_insert_face = Qnil;
}
-#endif
synt = SYNTAX (c);
if ((synt == Sclose || synt == Smath)