[net.sources] reposting emacs vt100 keypad bindings

mckeeman@wanginst.UUCP (William McKeeman) (05/16/85)

(reposting because cursor bindings were wrong -- sorry)
This is a keypad binding for emacs on a vt100 or lookalike.
It requires Unipress (Gosling) emacs version 2.
It takes some "finger training"  to use it effectively.
It is designed for my main emacs activity: document preparation.
Programmers might want to modify it somewhat. 
Permission to modify and further distribute is unconditionally given.
/s/ Bill McKeeman, Wang Institute, Tyngsboro, MA 01879
========================cut here=================================
#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	vt100.ml
# This archive created: Thu May 16 16:20:45 1985
export PATH; PATH=/bin:$PATH
echo shar: extracting "'vt100.ml'" '(9381 characters)'
if test -f 'vt100.ml'
then
	echo shar: over-writing existing file "'vt100.ml'"
fi
sed 's/^X//' << \SHAR_EOF > 'vt100.ml'
X;-----------------------------------------------------------------------------
X;NAME
X;   vt100.ml -- vt100 terminal support package
X;
X;SYNOPSIS
X;   No externally useable functions provided; this package is self contained.
X;
X;REQUIREMENTS
X;   VT100 or lookalike terminal
X;   Emacs version 2.00 or later
X;   You should set default value of vt100-ml-path below (near line 121)
X;
X;KEY BINDINGS (^v to page through this documentation, esc v to page back)
X;	 ------ ------ ------ ------
X;	| left | right| para | page |
X;	|margin|margin|  up  |  up  |
X;	 ------ ------ ------ ------
X;	| word | word | para | page |
X;	| left | right| down | down |
X;	 ------ ------ ------ ------
X;	| bof/ | wrap/| line |window|
X;	| eof  |scroll|?/goto|nxt/dl|
X;	 ------ ------ ------ ------
X;	| mark | paste| macro| w f  |
X;	| &cut | /undo|xeq/ed| r i  |
X;	 ------------- ------| i l  |
X;	|    visit    | gold | t e  |
X;	|  file/shell | /help| e(s) |
X;	 ------------- ------ ------
X;   See below for more detail.
X;
X;DESCRIPTION
X;   This package, when loaded, sets up global bindings for the special
X;   keys on a VT100 terminal or Wang PC using VT100 emulation.
X;   Care has been taken to:
X;     (1) maximize functionality
X;     (2) minimize keystrokes
X;     (3) minimize danger from missed keystrokes
X; 
X;EXPLANATION
X;	gold		enables secondary choice for other keys
X;  gold gold (help)     visit definition file for this package
X; 
X;	mark&cut	if mark is not set, mark one end of text(^@)
X;                       if mark is set, cut the text between	(^w)
X;			  mark and present cursor position
X;	paste		insert the last cut text		(^y)
X;			  after the cursor position
X;  gold undo		undo last command
X; 
X;	visit(file)	make file visible (read if necessary)	(^x ^v)
X;  gold visit(shell)	make shell visible (start if necessary)	(esc s)
X;
X;	write file	write current buffer to its file	(^x ^s)
X;  gold write files	write all modified buffers to files	(^x ^m)
X; 
X;       nxt window	cursor to next window			(^x n)
X;  gold dl window	split the current window		(^x 2)
X;
X;	macro xeq	playout last defined keyboard macro	(^x e)
X;  gold macro ed	examine or edit current keyboard macro
X;
X;	line ?		display current line number
X;  gold line goto	goto specified line
X;
X;	word left	move cursor to first letter of next word to the left
X;	word right	move cursor to character following word to the right
X; 
X;	left margin	move cursor to left end of current line	(^a)
X;	right margin	move cursor to right end of current line(^e)
X; 
X;	bof		move cursor to beginning of file	(esc <)
X;  gold eof		move cursor to end of file		(esc >)
X; 
X;	page up		move display to previous page		(esc v)
X;	page down	move display to next page		(^v)
X; 
X;	para up		move to previous paragraph
X;	para down	move to next paragraph
X; 
X;	wrap		toggle wrap/no-wrap modes
X;  gold scroll		horizontal scrolling:
X;			  set distance from begin-of-line to begin-of-screen
X;
X;	backspace	delete previous character
X;	delete		delete character over cursor
X;	^c		pause emacs and return to unix
X;
X;VT100 TERMCAP
X;
X;d1|vt100|vt-100|pt100|pt-100|dec vt100:\
X;	:co#80:li#24:am:cl=50\E[;H\E[2J:bs:cm=5\E[%i%2;%2H:nd=2\E[C:up=2\E[A:\
X;	:ce=3\E[K:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\
X;	:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:ks=\E[?1h\E=:ke=\E[?1l\E>:\
X;	:if=/usr/lib/tabset/vt100:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:\
X;	:kh=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:pt:sr=5\EM:xn:
X;
X;HISTORY
X;  {4}	30-Apr-85  Bill McKeeman at WangInst
X;	Elaborated keypad definitions.
X;  {3}	22-Nov-84  Mike Gallaher at unipress
X;	Added standard keypad and labeled key definitions.
X;  {2}	07-Aug-84  Eric S. Raymond
X;	Fixed a documentation bug.
X;  {1}	12-Jul-84  Eric S. Raymond and Dave Langdon at Rabbit Software
X;	Created.
X;-----------------------------------------------------------------------------
X(declare-global vt100-mark-is-set) (setq vt100-mark-is-set 0)
X(declare-global vt100-gold-key-pressed) (setq vt100-gold-key-pressed 0)
X(declare-global vt100-ml-path)
X
X; Preliminaries -- let's get the environment right
X(progn ver  ; check for "Emacs V2.00 (12-Feb-85) Unix version"
X  (setq ver (emacs-version))
X  (if (| (< (substr ver 8 1) "2") (!= (substr ver 9 1) "."))
X    (error-message "Need later version of emacs for vt100.ml package")
X  )
X  (send-string-to-terminal			"\e=")	; set keypad alt mode
X  (if (error-occurred (setq vt100-ml-path (getenv "EPATH")))
X    (progn						; path to help file
X      (setq vt100-ml-path "/usr/local/lib/emacs/maclib/"); reasonable default
X      (message "Unix environment variable EPATH not set; default used")
X      (sit-for 2)
X  ) )
X)
X; Special editing keys and settings
X(bind-to-key "delete-previous-character"	"\^h")	; backspace
X(bind-to-key "delete-next-character"		"\177")	; delete
X(bind-to-key "pause-emacs"			"\^c")	; control c
X(bind-to-key "vt100-careful-macro"		"\^xe")	; control x e
X(setq right-margin 78)					; avoid edge effects
X(setq scroll-step 1)					; auto scroll amount
X(setq track-eol-on-^N-^P 0)				; vertical curse ctrl
X
X; Cursor controls
X(bind-to-key "backward-character"		"\e[D")	; cursor <
X(bind-to-key "previous-line"			"\e[A")	; cursor ^
X(bind-to-key "next-line"			"\e[B")	; cursor v
X(bind-to-key "forward-character"		"\e[C")	; cursor >
X(bind-to-key "backward-character"		"\eOD")	; cursor <
X(bind-to-key "previous-line"			"\eOA")	; cursor ^
X(bind-to-key "next-line"			"\eOB")	; cursor v
X(bind-to-key "forward-character"		"\eOC")	; cursor >
X
X; Keypad definitions
X(bind-to-key "beginning-of-line"		"\eOP") ; keypad pf1 +
X(bind-to-key "end-of-line"			"\eOQ") ; keypad pf2 -
X(bind-to-key "backward-paragraph"		"\eOR") ; keypad pf3 *
X(bind-to-key "previous-page"			"\eOS") ; keypad pf4 /
X(bind-to-key "forward-paragraph"		"\eOy") ; keypad 9
X(bind-to-key "forward-word"			"\eOx") ; keypad 8
X(bind-to-key "backward-word"			"\eOw") ; keypad 7
X(bind-to-key "vt100-line-number"		"\eOv") ; keypad 6
X(bind-to-key "vt100-wrap-or-scroll"		"\eOu") ; keypad 5
X(bind-to-key "vt100-file-begin-or-end"		"\eOt") ; keypad 4
X(bind-to-key "vt100-macros"			"\eOs") ; keypad 3
X(bind-to-key "vt100-paste-or-undo"		"\eOr") ; keypad 2
X(bind-to-key "vt100-set-mark-or-cut"		"\eOq") ; keypad 1
X(bind-to-key "vt100-visit-file-or-shell"	"\eOp") ; keypad 0
X(bind-to-key "next-page"			"\eOm") ; keypad - print
X(bind-to-key "vt100-next-or-delete-window"	"\eOl") ; keypad , erase
X(bind-to-key "vt100-gold-key"			"\eOn") ; keypad .
X(bind-to-key "vt100-write-file-or-files"	"\eOM") ; keypad enter
X
X(defun 
X  (vt100-gold-key
X    (if (= vt100-gold-key-pressed 0)
X      (setq vt100-gold-key-pressed 1)
X      (vt100-help)
X    )
X  )
X
X  (vt100-paste-or-undo
X    (if (= vt100-gold-key-pressed 0)
X      (yank-from-killbuffer)
X      (error-occurred (new-undo))
X    )
X    (setq vt100-gold-key-pressed 0)
X  )
X
X  (vt100-set-mark-or-cut
X    (if (error-occurred (mark)) (setq vt100-mark-is-set 0))
X    (if (= vt100-mark-is-set 0)
X      (progn (set-mark) (setq vt100-mark-is-set 1))
X      (progn (delete-to-killbuffer) (setq vt100-mark-is-set 0))
X    )
X    (setq vt100-gold-key-pressed 0)
X  )
X
X  (vt100-write-file-or-files
X    (if (= vt100-gold-key-pressed 0)
X      (progn (write-current-file)(message(concat "Wrote "(current-file-name))))
X      (progn (write-modified-files) (message "Wrote all modified files."))
X    )
X    (setq vt100-gold-key-pressed 0)
X  )
X
X  (vt100-macros
X    (if (= vt100-gold-key-pressed 0)
X      (vt100-careful-macro)
X      (progn
X        (error-occurred (define-keyboard-macro "vt100-current-macro"))
X        (if (error-occurred (edit-macro "vt100-current-macro"))
X          (message "No macro defined.  ^x( macro-body ^x) to define macro.")
X          (message "Current macro: edit and (define-buffer-macro) or delete window.")
X        )
X      )
X    )
X    (setq vt100-gold-key-pressed 0)
X  )
X
X  (vt100-careful-macro
X    (if (error-occurred (execute-keyboard-macro))
X      (if (error-occurred (vt100-current-macro))
X        (message "No macro defined. ^x( macro-body ^x) to define macro.")
X        (message "Executed macro.")
X      )
X      (message "Executed macro.")
X    )
X  )
X
X  (vt100-next-or-delete-window
X    (if (= vt100-gold-key-pressed 0)
X      (next-window)
X      (delete-window)
X    )
X    (setq vt100-gold-key-pressed 0)
X  )
X
X  (vt100-line-number
X    (if (= vt100-gold-key-pressed 0)
X      (message (concat "line number = " (line-number)))
X      (goto-line (get-tty-string "go to line number: "))
X    )
X    (setq vt100-gold-key-pressed 0)
X  )
X
X  (vt100-file-begin-or-end
X    (if (= vt100-gold-key-pressed 0)
X      (beginning-of-file)
X      (end-of-file)
X    )
X    (setq vt100-gold-key-pressed 0)
X  )
X
X  (vt100-visit-file-or-shell
X    (if (= vt100-gold-key-pressed 0)
X      (visit-file (get-tty-file "Enter file name:"))
X      (shell)
X    )
X    (setq vt100-gold-key-pressed 0)
X  )
X
X  (vt100-wrap-or-scroll
X    (if (= vt100-gold-key-pressed 0)
X      (setq wrap-long-lines (! wrap-long-lines))
X      (setq left-offset (get-tty-string "Move left screen edge to:"))
X    )
X    (setq vt100-gold-key-pressed 0)
X  )
X
X  (vt100-help
X    (setq vt100-gold-key-pressed 0)
X    (switch-to-buffer "vt100-help")
X    (if (error-occurred (read-file (concat vt100-ml-path "vt100.ml")))
X      (progn
X        (delete-buffer "vt100-help")
X        (error-message
X          "Unix environment variable EPATH does not point to vt100.ml"
X    ) ) )
X    (setq read-only 1)
X    (beginning-of-file)
X  )
X)
X; vt100.ml ends here -----------------------------------------------------
SHAR_EOF
if test 9381 -ne "`wc -c < 'vt100.ml'`"
then
	echo shar: error transmitting "'vt100.ml'" '(should have been 9381 characters)'
fi
#	End of shell archive
exit 0