# HG changeset patch # User Jim Blandy # Date 732305885 0 # Node ID e5928bec8d5df3ae92ba73a4214daa9d14526210 # Parent 9ff513b5d2962e6a8863b73930a1cfeb952f6f5f * cmds.c (overwrite_binary_mode): Deleted; this implements the wrong feature. (Qoverwrite_mode_binary): New variable. (internal_self_insert): If current_buffer->overwrite_mode is `overwrite-mode-binary', do as overwrite_binary_mode used to. (syms_of_cmds): Remove defvar of overwrite_binary_mode; initialize Qoverwrite_mode_binary. * buffer.c (syms_of_buffer): Doc fix for overwrite_mode. * buffer.h (struct buffer): Doc fix. diff -r 9ff513b5d296 -r e5928bec8d5d src/buffer.c --- a/src/buffer.c Tue Mar 16 15:47:45 1993 +0000 +++ b/src/buffer.c Tue Mar 16 18:18:05 1993 +0000 @@ -1610,6 +1610,10 @@ DEFVAR_PER_BUFFER ("overwrite-mode", ¤t_buffer->overwrite_mode, Qnil, "Non-nil if self-insertion should replace existing text.\n\ +If non-nil and not `overwrite-mode-binary', self-insertion still\n\ +inserts at the end of a line, and inserts when point is before a tab,\n\ +unless that tab is displaying as only one space.\n\ +If `overwrite-mode-binary', self-insertion replaces newlines and tabs too.\n\ Automatically becomes buffer-local when set in any fashion."); DEFVAR_PER_BUFFER ("buffer-display-table", ¤t_buffer->display_table, diff -r 9ff513b5d296 -r e5928bec8d5d src/buffer.h --- a/src/buffer.h Tue Mar 16 15:47:45 1993 +0000 +++ b/src/buffer.h Tue Mar 16 18:18:05 1993 +0000 @@ -256,7 +256,8 @@ #endif /* Alist of (FUNCTION . STRING) for each minor mode enabled in buffer. */ Lisp_Object minor_modes; - /* t if "self-insertion" should overwrite */ + /* t if "self-insertion" should overwrite; `binary' if it should also + overwrite newlines and tabs - for editing executables and the like. */ Lisp_Object overwrite_mode; /* non-nil means abbrev mode is on. Expand abbrevs automatically. */ Lisp_Object abbrev_mode; diff -r 9ff513b5d296 -r e5928bec8d5d src/cmds.c --- a/src/cmds.c Tue Mar 16 15:47:45 1993 +0000 +++ b/src/cmds.c Tue Mar 16 18:18:05 1993 +0000 @@ -26,7 +26,9 @@ Lisp_Object Qkill_forward_chars, Qkill_backward_chars, Vblink_paren_function; -int overwrite_binary_mode; +/* A possible value for a buffer's overwrite-mode variable. */ +Lisp_Object Qoverwrite_mode_binary; + DEFUN ("forward-char", Fforward_char, Sforward_char, 0, 1, "p", "Move point right ARG characters (left if ARG negative).\n\ @@ -273,14 +275,16 @@ Lisp_Object tem; register enum syntaxcode synt; register int c = c1; + Lisp_Object overwrite = current_buffer->overwrite_mode; if (!NILP (Vbefore_change_function) || !NILP (Vafter_change_function)) hairy = 1; - if (!NILP (current_buffer->overwrite_mode) + if (!NILP (overwrite) && point < ZV - && (overwrite_binary_mode || (c != '\n' && FETCH_CHAR (point) != '\n')) - && (overwrite_binary_mode + && (EQ (overwrite, Qoverwrite_mode_binary) + || (c != '\n' && FETCH_CHAR (point) != '\n')) + && (EQ (overwrite, Qoverwrite_mode_binary) || FETCH_CHAR (point) != '\t' || XINT (current_buffer->tab_width) <= 0 || XFASTINT (current_buffer->tab_width) > 20 @@ -336,11 +340,8 @@ Qkill_forward_chars = intern ("kill-forward-chars"); staticpro (&Qkill_forward_chars); - DEFVAR_BOOL ("overwrite-binary-mode", &overwrite_binary_mode, - "*Non-nil means overwrite mode treats tab and newline normally.\n\ -Ordinarily, overwriting preserves a tab until its whole width is overwritten\n\ -and never replaces a newline."); - overwrite_binary_mode = 1; + Qoverwrite_mode_binary = intern ("overwrite-mode-binary"); + staticpro (&Qoverwrite_mode_binary); DEFVAR_LISP ("blink-paren-function", &Vblink_paren_function, "Function called, if non-nil, whenever a close parenthesis is inserted.\n\