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,
#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;
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;
+
\f
DEFUN ("forward-char", Fforward_char, Sforward_char, 0, 1, "p",
"Move point right ARG characters (left if ARG negative).\n\
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
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\