aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>1996-01-29 23:27:09 +0000
committerRichard M. Stallman <[email protected]>1996-01-29 23:27:09 +0000
commitaa970069e0e4caa2d93687c8456b922911ec70c6 (patch)
tree910857a8b5bbf00a9085c5d7c0b6f7086213dd34 /src
parent68313ed8befeec78901828ba690858f7db2a15b4 (diff)
(Fdelete_backward_char): In overwrite mode,
insert spaces, unless we deleted a tab.
Diffstat (limited to 'src')
-rw-r--r--src/cmds.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/cmds.c b/src/cmds.c
index 687ba76cb9..3bebb798dd 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",