Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 (Tek) 9/26/83; site orca.UUCP
Path: utzoo!watmath!clyde!burl!mgnetp!ihnp4!houxm!hogpc!houti!ariel!vax135!cornell!uw-beaver!tektronix!orca!andrew
From: andrew@orca.UUCP
Newsgroups: net.emacs
Subject: Re: Novice to Novice Questions
Message-ID: <1005@orca.UUCP>
Date: Sun, 19-Aug-84 02:03:52 EDT
Article-I.D.: orca.1005
Posted: Sun Aug 19 02:03:52 1984
Date-Received: Wed, 15-Aug-84 00:34:46 EDT
References: <239@isrnix.UUCP>
Organization: Tektronix, Wilsonville OR
Lines: 99

[Nuke Bill's clone!]

	"I am looking for some mlisp to do a "replace" rather than the
	quite cumbersome delete-insert sequence that I have to go
	through on our version."

Here's a function which implements "overwrite mode", in which a
non-control character replaces the one at the cursor, rather than being
inserted there.  Of course, it is for Gosling/Unipress emacs.

  -- Andrew Klossner   (decvax!tektronix!orca!andrew)      [UUCP]
                       (orca!andrew.tektronix@rand-relay)  [ARPA]

; overwrite-mode.ml: Wordstar-like insert/overwrite mode

; To switch between modes, bind "insert-toggle" to a key and hit that key.
; (WordStar users might choose to bind this function to ^V.)
; Alternatively, bind "overwrite-mode" to one key and "insert-mode" to
; another, then use those two keys to switch between modes.
; The current mode is part of the highlighted mode line at the bottom
; of the window; "Normal" for insert mode, "Overwrite" for overwrite
; mode.

(setq-default insert-mode-flag 1)
(declare-buffer-specific insert-mode-flag)
(defun (self-overwrite
	(if (! (| (eobp) (eolp)))
		(if (| (!= 9 (following-char)) (= 0 (% (current-column) 8)))
			(delete-next-character)
			)
		)
	(insert-character (last-key-struck))
	))
(defun (tab-overwrite
	(if (| (eobp) (eolp))
		(insert-character 9)
		(progn
			(forward-character)
			(while (&
					(! (| (eobp) (eolp)))
					(!= 1 (% (current-column) 8))
					)
				(forward-character)
				)
			(if (!= 1 (% (current-column) 8))
				(insert-character 9)
				)
			)
		)
	))
(defun (argument-prefix-overwrite c i f1 f2
	(setq i 4)		; i is number being assembled
	(setq f1 1)		; f1 is "continue looping" flag
	(setq f2 0)		; f2 is "digit seen" flag
	(while f1
		(setq c (get-tty-character))
		(if (= c 21)
			(setq i (* i 4))
			(if (& (<= '0' c) (<= c '9'))
				(if f2
					(setq i (+ (* i 10) (- c '0')))
					(progn
						(setq i (- c '0'))
						(setq f2 1)
						)
					)
				(setq f1 0)
				)
			)
		)
	(push-back-character c)
	(return-prefix-argument i)
	))
(defun (overwrite-mode i
	(local-bind-to-key "tab-overwrite" "\^I")
	(local-bind-to-key "argument-prefix-overwrite" "\^U")
	(setq i 32)
	(while (< i 127)
		(local-bind-to-key "self-overwrite" i)
		(setq i (+ i 1))
		)
	(setq insert-mode-flag 0)
	(setq mode-string "Overwrite")
	(novalue)
	))
(defun (insert-mode
	(remove-all-local-bindings)
	(setq insert-mode-flag 1)
	(setq mode-string "Normal")
	(novalue)
	))
(defun (insert-toggle
	(if (= insert-mode-flag 0)
		(insert-mode)
		(overwrite-mode)
		)
	(novalue)
	))
(novalue)