diff options
author | Richard M. Stallman <rms@gnu.org> | 1996-01-29 23:27:09 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1996-01-29 23:27:09 +0000 |
commit | bf0caebd61a07e43754907c8ee0e1399e20f315a (patch) | |
tree | 0bf9438169631a381329dd3701296ceb9ba24a7f /src | |
parent | 4514fc6d52386d31e9905fc01ce3a31f8902ed8a (diff) | |
download | emacs-bf0caebd61a07e43754907c8ee0e1399e20f315a.tar.gz |
(Fdelete_backward_char): In overwrite mode,
insert spaces, unless we deleted a tab.
Diffstat (limited to 'src')
-rw-r--r-- | src/cmds.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/cmds.c b/src/cmds.c index 687ba76cb93..3bebb798dd5 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -1,5 +1,5 @@ /* Simple built-in editing commands. - Copyright (C) 1985, 1993, 1994, 1995 Free Software Foundation, Inc. + Copyright (C) 1985, 93, 94, 95, 1996 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -207,8 +207,38 @@ N was explicitly specified.") (n, killflag) Lisp_Object n, killflag; { + Lisp_Object value; + int deleted_tab = 0; + int i; + CHECK_NUMBER (n, 0); - return Fdelete_char (make_number (-XINT (n)), killflag); + + /* See if we are about to delete a tab backwards. */ + for (i = 0; i < XINT (n); i++) + { + if (point - i < BEGV) + break; + if (FETCH_CHAR (point - i) == '\t') + { + deleted_tab = 1; + break; + } + } + + value = Fdelete_char (make_number (-XINT (n)), killflag); + + /* In overwrite mode, back over columns while clearing them out, + unless at end of line. */ + if (XINT (n) > 0 + && ! NILP (current_buffer->overwrite_mode) + && ! deleted_tab + && ! (point == ZV || FETCH_CHAR (point) == '\n')) + { + Finsert_char (make_number (' '), XINT (n)); + SET_PT (point - XINT (n)); + } + + return value; } DEFUN ("self-insert-command", Fself_insert_command, Sself_insert_command, 1, 1, "p", |