X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/f10fe38f772c29031a23ef7aa92d2de1b3675461..11dde529083c0b3df2e8e91913426ed4975b77c3:/src/cmds.c diff --git a/src/cmds.c b/src/cmds.c index 90d3cd6dce..aeedb152f6 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -1,6 +1,6 @@ /* Simple built-in editing commands. -Copyright (C) 1985, 1993-1998, 2001-2012 Free Software Foundation, Inc. +Copyright (C) 1985, 1993-1998, 2001-2013 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -19,7 +19,7 @@ along with GNU Emacs. If not, see . */ #include -#include + #include "lisp.h" #include "commands.h" #include "character.h" @@ -85,6 +85,8 @@ move_point (Lisp_Object n, bool forward) DEFUN ("forward-char", Fforward_char, Sforward_char, 0, 1, "^p", doc: /* Move point N characters forward (backward if N is negative). On reaching end or beginning of buffer, stop and signal error. +Interactively, N is the numeric prefix argument. +If N is omitted or nil, move point 1 character forward. Depending on the bidirectional context, the movement may be to the right or to the left on the screen. This is in contrast with @@ -97,6 +99,8 @@ right or to the left on the screen. This is in contrast with DEFUN ("backward-char", Fbackward_char, Sbackward_char, 0, 1, "^p", doc: /* Move point N characters backward (forward if N is negative). On attempt to pass beginning or end of buffer, stop and signal error. +Interactively, N is the numeric prefix argument. +If N is omitted or nil, move point 1 character backward. Depending on the bidirectional context, the movement may be to the right or to the left on the screen. This is in contrast with @@ -117,9 +121,7 @@ With positive N, a non-empty line at the end counts as one line successfully moved (for the return value). */) (Lisp_Object n) { - ptrdiff_t opoint = PT, opoint_byte = PT_BYTE; - ptrdiff_t pos, pos_byte; - EMACS_INT count, shortage; + ptrdiff_t opoint = PT, pos, pos_byte, shortage, count; if (NILP (n)) count = 1; @@ -130,16 +132,12 @@ successfully moved (for the return value). */) } if (count <= 0) - shortage = scan_newline (PT, PT_BYTE, BEGV, BEGV_BYTE, count - 1, 1); + pos = find_newline (PT, PT_BYTE, BEGV, BEGV_BYTE, count - 1, + &shortage, &pos_byte, 1); else - shortage = scan_newline (PT, PT_BYTE, ZV, ZV_BYTE, count, 1); - - /* Since scan_newline does TEMP_SET_PT_BOTH, - and we want to set PT "for real", - go back to the old point and then come back here. */ - pos = PT; - pos_byte = PT_BYTE; - TEMP_SET_PT_BOTH (opoint, opoint_byte); + pos = find_newline (PT, PT_BYTE, ZV, ZV_BYTE, count, + &shortage, &pos_byte, 1); + SET_PT_BOTH (pos, pos_byte); if (shortage > 0 @@ -306,7 +304,7 @@ At the end, it runs `post-self-insert-hook'. */) /* Barf if the key that invoked this was not a character. */ if (!CHARACTERP (last_command_event)) bitch_at_user (); - { + else { int character = translate_char (Vtranslation_table_for_input, XINT (last_command_event)); int val = internal_self_insert (character, XFASTINT (n));