Emacs key bindings for Interactive at386 console

Dan Rich drich at dialogic.UUCP
Thu Nov 30 06:47:42 AEST 1989


Below you will find a copy of my term/at386.el file.  This binds the
keypad on an at386 terminal to the obvious definitions, F1 to help,
and also C-? to help (due to a conflict with F1 and another mode I am
working on).  The only "feature" of this that might be surprising is
the working of the home/end keys.  I have written these to be
compatable with a version of BRIEF that we use, and they act as follows:
Pressing home/end once: beginning/end of line
		  twice: beginning/end of screen
		  three times: beginning/end of file
This file will also remove C-h from help (backspace conflict), and
remap this to C-? (formerly undo).  I chose this because undo also can
be found on C-x u, and C-? is almost intuitive...

Dan Rich                    | ARPA: drich%dialogic at uunet.uu.net 
UNIX Systems Administrator  | UUCP: uunet!dialogic!drich
Dialogic Corporation        | - Time is an illusion.  Lunchtime, doubly so. -
(201) 334-8450 x213         |                           Douglas Adams

8<------------------------------ Cut Here ------------------------------>8
;;; $Id: at386.el,v 1.2 89/09/14 11:44:32 drich Exp $
;;;
;;; at386 keyboard definitions
;;; Dan Rich (drich at dialogic.UUCP)
;;; 21 August 1989
;;; $Log:	at386.el,v $
; Revision 1.2  89/09/14  11:44:32  drich
; Modified to tread DEL/BS correctly, also modified to use C-? for help.
; 
;;; Revision 1.1  89/09/14  11:06:16  drich
;;; Initial revision
;;; 
;;;
;;; Tested on: GNU Emacs 18.54.1 of Mon Jul 24 1989 on dialogic (usg-unix-v)
;;;
;;; Note: The shift key will affect the value of a function key, but
;;; the control and alt keys do not.
;;;
;;; Most of the information needed to create this file was taken from
;;; documentation found in lisp/keypad.el
;;;

(require 'keypad)

(defvar AT386-map-1 nil
  "The map for the function keys on the at386")
(defvar AT386-map-2 nil
  "The keypad map for the at386")
(defvar last2 nil
  "Last key home/end, used in at386-home and at386-end")

(defun enable-at386-keys ()
  "Enable the use of the at386 function keys."
  (interactive)
  (global-set-key "\eO" AT386-map-1)
  (global-set-key "\e[" AT386-map-2))

(defun at386-home ()
  "Move cursor to top of screen."
  (interactive)
  (setq last last-command)
  (if (equal last 'at386-home)
      (if (equal last2 t)
	  (beginning-of-buffer)
	(progn
	  (move-to-window-line 0)
	  (setq last2 t)))
    (progn
      (beginning-of-line)
      (setq last2 nil))))

(defun at386-end ()
  "Move cursor to bottom of screen."
  (interactive)
  (setq last last-command)
  (if (equal last 'at386-end)
      (if (equal last2 t)
	  (end-of-buffer)
	(progn
	  (move-to-window-line -1)
	  (end-of-line)
	  (setq last2 t)))
    (progn
      (end-of-line)
      (setq last2 nil))))

(defun line-to-top ()
  (interactive)
  (recenter 0))

(defun line-to-bottom ()
  (interactive)
  (recenter (- (window-height) 2)))

;;; Create a few new keypad defaults.  Here's what I think I'm doing here:
;;; I look through "keypad.el" to find any unused entries in function-keymap
;;; and then create my own bindings for them here.  Then I use the newly
;;; created ?x string in the setup-terminal-keymap.

(define-key function-keymap "1" 'at386-end)
(define-key function-keymap "3" 'scroll-down)
(define-key function-keymap "5" 'recenter)
(define-key function-keymap "7" 'at386-home)
(define-key function-keymap "9" 'scroll-up)
(define-key function-keymap "-" 'line-to-top)
(define-key function-keymap "+" 'line-to-bottom)

(if AT386-map-1
    nil
  (setq AT386-map-1 (make-keymap))   ; <ESC>O commands
  (setup-terminal-keymap AT386-map-1
			 '(("P" . ??)   ; F1 (help-map)
			   )))

(if AT386-map-2
    nil
  (setq AT386-map-2 (make-keymap))   ; <ESC>[ commands
  (setup-terminal-keymap AT386-map-2
			 '(("A" . ?u)	; Up Arrow (previous-line)
			   ("B" . ?d)	; Down Arrow (next-line)
			   ("C" . ?r)	; Right Arrow (forward-char)
			   ("D" . ?l)	; Left Arrow (backward-char)
			   ("H" . ?7)	; Home (move-to-window-line 0)
			   ("Y" . ?1)   ; End (move-to-window-line -1)
			   ("G" . ?5)	; Clear (recenter)
			   ("U" . ?9)	; Page up (scroll-down)
			   ("V" . ?3)   ; Page down (scroll-up)
			   ("S" . ?-)   ; - key (line-to-top)
			   ("T" . ?+)   ; + key (line-to-bottom)
			   ("@" . ?I)   ; Insert (insert-character)
			   )))

(enable-at386-keys)

;; Change the keyboard translation to interpret:
;; C-h as DEL
;; C-? as C-h (actually C-? generates C-_)
(setq keyboard-translate-table
      "\000\^a\^b\^c\^d\^e\^f\^g\^?\^i\^j\^k\^l\^m\^n\^o\^p\^q\^r\^s\^t\^u\^v\^w\^x\^y\^z\^[\034\^]\035\^h")
-- 
Dan Rich                    | ARPA: drich%dialogic at uunet.uu.net 
UNIX Systems Administrator  | UUCP: uunet!dialogic!drich
Dialogic Corporation        | - Time is an illusion.  Lunchtime, doubly so. -
(201) 334-8450 x213         |                           Douglas Adams



More information about the Comp.unix.i386 mailing list