changeset 64122:c9251f75fc62

(CSI-map, SS3-map, GOLD-map, GOLD-CSI-map) (GOLD-SS3-map): Initialize in declaration. (tpu-set-mode-line): Don't throw away other minor mode strings when turning off the mode. (tpu-set-match, tpu-match-beginning, tpu-check-match) (tpu-show-match-markers): Use the insertion-type rather than the +1 offset kludge for tpu-match-beginning-mark. (tpu-edt-mode): Use define-minor-mode. (minibuffer-local-must-match-map, minibuffer-local-map): Try to avoid using the escape sequence and use the real key name instead. (tpu-reset-control-keys): Don't copy a keymap needlessly. (tpu-arrow-history): Simplify. (tpu-edt-on): Set control keys after changing the global map. (tpu-edt-on, tpu-edt-off): Work unconditionally.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 07 Jul 2005 04:59:32 +0000
parents eafca59df649
children 4161411b91d0 f9a65d7ebd29
files lisp/emulation/tpu-edt.el
diffstat 1 files changed, 342 insertions(+), 367 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emulation/tpu-edt.el	Thu Jul 07 04:59:06 2005 +0000
+++ b/lisp/emulation/tpu-edt.el	Thu Jul 07 04:59:32 2005 +0000
@@ -265,8 +265,16 @@
 ;;    than the emulated TPU commands.  Also, it works only in the forward
 ;;    direction, regardless of the current TPU-edt direction.
 
+;;; Todo/Bugs:
+
+;; We shouldn't use vt100 ESC sequences since it is uselessly fighting
+;; against function-key-map.  Better use real key names.
+
 ;;; Code:
 
+;; we use picture-mode functions
+(require 'picture)
+
 (defgroup tpu nil
   "Emacs emulating TPU emulating EDT."
   :prefix "tpu-"
@@ -316,29 +324,270 @@
 ;;;
 ;;;  Global Keymaps
 ;;;
-(defvar CSI-map (make-sparse-keymap)
+(defvar CSI-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "A" 'tpu-previous-line)               ; up
+    (define-key map "B" 'tpu-next-line)                   ; down
+    (define-key map "D" 'tpu-backward-char)               ; left
+    (define-key map "C" 'tpu-forward-char)                ; right
+
+    (define-key map "1~" 'tpu-search)                     ; Find
+    (define-key map "2~" 'tpu-paste)                      ; Insert Here
+    (define-key map "3~" 'tpu-cut)                        ; Remove
+    (define-key map "4~" 'tpu-select)                     ; Select
+    (define-key map "5~" 'tpu-scroll-window-down)         ; Prev Screen
+    (define-key map "6~" 'tpu-scroll-window-up)           ; Next Screen
+
+    (define-key map "11~" 'nil)                           ; F1
+    (define-key map "12~" 'nil)                           ; F2
+    (define-key map "13~" 'nil)                           ; F3
+    (define-key map "14~" 'nil)                           ; F4
+    (define-key map "15~" 'nil)                           ; F5
+    (define-key map "17~" 'nil)                           ; F6
+    (define-key map "18~" 'nil)                           ; F7
+    (define-key map "19~" 'nil)                           ; F8
+    (define-key map "20~" 'nil)                           ; F9
+    (define-key map "21~" 'tpu-exit)                      ; F10
+    (define-key map "23~" 'tpu-insert-escape)             ; F11 (ESC)
+    (define-key map "24~" 'tpu-next-beginning-of-line)    ; F12 (BS)
+    (define-key map "25~" 'tpu-delete-previous-word)      ; F13 (LF)
+    (define-key map "26~" 'tpu-toggle-overwrite-mode)     ; F14
+    (define-key map "28~" 'tpu-help)                      ; HELP
+    (define-key map "29~" 'execute-extended-command)      ; DO
+    (define-key map "31~" 'tpu-goto-breadcrumb)           ; F17
+    (define-key map "32~" 'nil)                           ; F18
+    (define-key map "33~" 'nil)                           ; F19
+    (define-key map "34~" 'nil)                           ; F20
+    map)
   "Maps the CSI function keys on the VT100 keyboard.
 CSI is DEC's name for the sequence <ESC>[.")
 
-(defvar SS3-map (make-sparse-keymap)
-  "Maps the SS3 function keys on the VT100 keyboard.
-SS3 is DEC's name for the sequence <ESC>O.")
+(defvar GOLD-CSI-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "A" 'tpu-move-to-beginning)      ; up-arrow
+    (define-key map "B" 'tpu-move-to-end)            ; down-arrow
+    (define-key map "C" 'end-of-line)                ; right-arrow
+    (define-key map "D" 'beginning-of-line)          ; left-arrow
+
+    (define-key map "1~" 'nil)                       ; Find
+    (define-key map "2~" 'nil)                       ; Insert Here
+    (define-key map "3~" 'tpu-store-text)            ; Remove
+    (define-key map "4~" 'tpu-unselect)              ; Select
+    (define-key map "5~" 'tpu-previous-window)       ; Prev Screen
+    (define-key map "6~" 'tpu-next-window)           ; Next Screen
+
+    (define-key map "11~" 'nil)                      ; F1
+    (define-key map "12~" 'nil)                      ; F2
+    (define-key map "13~" 'nil)                      ; F3
+    (define-key map "14~" 'nil)                      ; F4
+    (define-key map "16~" 'nil)                      ; F5
+    (define-key map "17~" 'nil)                      ; F6
+    (define-key map "18~" 'nil)                      ; F7
+    (define-key map "19~" 'nil)                      ; F8
+    (define-key map "20~" 'nil)                      ; F9
+    (define-key map "21~" 'nil)                      ; F10
+    (define-key map "23~" 'nil)                      ; F11
+    (define-key map "24~" 'nil)                      ; F12
+    (define-key map "25~" 'nil)                      ; F13
+    (define-key map "26~" 'nil)                      ; F14
+    (define-key map "28~" 'describe-bindings)        ; HELP
+    (define-key map "29~" 'nil)                      ; DO
+    (define-key map "31~" 'tpu-drop-breadcrumb)      ; F17
+    (define-key map "32~" 'nil)                      ; F18
+    (define-key map "33~" 'nil)                      ; F19
+    (define-key map "34~" 'nil)                      ; F20
+    map)
+  "Maps the function keys on the VT100 keyboard preceded by GOLD-CSI.")
+
+(defvar GOLD-SS3-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "A" 'tpu-move-to-beginning)      ; up-arrow
+    (define-key map "B" 'tpu-move-to-end)            ; down-arrow
+    (define-key map "C" 'end-of-line)                ; right-arrow
+    (define-key map "D" 'beginning-of-line)          ; left-arrow
+
+    (define-key map "P" 'keyboard-quit)              ; PF1
+    (define-key map "Q" 'help-for-help)              ; PF2
+    (define-key map "R" 'tpu-search)                 ; PF3
+    (define-key map "S" 'tpu-undelete-lines)         ; PF4
+    (define-key map "p" 'open-line)                  ; KP0
+    (define-key map "q" 'tpu-change-case)            ; KP1
+    (define-key map "r" 'tpu-delete-to-eol)          ; KP2
+    (define-key map "s" 'tpu-special-insert)         ; KP3
+    (define-key map "t" 'tpu-move-to-end)            ; KP4
+    (define-key map "u" 'tpu-move-to-beginning)      ; KP5
+    (define-key map "v" 'tpu-paste)                  ; KP6
+    (define-key map "w" 'execute-extended-command)   ; KP7
+    (define-key map "x" 'tpu-fill)                   ; KP8
+    (define-key map "y" 'tpu-replace)                ; KP9
+    (define-key map "m" 'tpu-undelete-words)         ; KP-
+    (define-key map "l" 'tpu-undelete-char)          ; KP,
+    (define-key map "n" 'tpu-unselect)               ; KP.
+    (define-key map "M" 'tpu-substitute)             ; KPenter
+    map)
+  "Maps the function keys on the VT100 keyboard preceded by GOLD-SS3.")
 
-(defvar GOLD-map (make-keymap)
+(defvar GOLD-map
+  (let ((map (make-keymap)))
+    (define-key map "\e[" GOLD-CSI-map)                  ; GOLD-CSI map
+    (define-key map "\eO" GOLD-SS3-map)                  ; GOLD-SS3 map
+    ;; 
+    (define-key map "\C-A" 'tpu-toggle-overwrite-mode)   ; ^A
+    (define-key map "\C-B" 'nil)                         ; ^B
+    (define-key map "\C-C" 'nil)                         ; ^C
+    (define-key map "\C-D" 'nil)                         ; ^D
+    (define-key map "\C-E" 'nil)                         ; ^E
+    (define-key map "\C-F" 'set-visited-file-name)       ; ^F
+    (define-key map "\C-g" 'keyboard-quit)               ; safety first
+    (define-key map "\C-h" 'delete-other-windows)        ; BS
+    (define-key map "\C-i" 'other-window)                ; TAB
+    (define-key map "\C-J" 'nil)                         ; ^J
+    (define-key map "\C-K" 'tpu-define-macro-key)        ; ^K
+    (define-key map "\C-l" 'downcase-region)             ; ^L
+    (define-key map "\C-M" 'nil)                         ; ^M
+    (define-key map "\C-N" 'nil)                         ; ^N
+    (define-key map "\C-O" 'nil)                         ; ^O
+    (define-key map "\C-P" 'nil)                         ; ^P
+    (define-key map "\C-Q" 'nil)                         ; ^Q
+    (define-key map "\C-R" 'nil)                         ; ^R
+    (define-key map "\C-S" 'nil)                         ; ^S
+    (define-key map "\C-T" 'tpu-toggle-control-keys)     ; ^T
+    (define-key map "\C-u" 'upcase-region)               ; ^U
+    (define-key map "\C-V" 'nil)                         ; ^V
+    (define-key map "\C-w" 'tpu-write-current-buffers)   ; ^W
+    (define-key map "\C-X" 'nil)                         ; ^X
+    (define-key map "\C-Y" 'nil)                         ; ^Y
+    (define-key map "\C-Z" 'nil)                         ; ^Z
+    (define-key map " " 'undo)                           ; SPC
+    (define-key map "!" 'nil)                            ; !
+    (define-key map "#" 'nil)                            ; #
+    (define-key map "$" 'tpu-add-at-eol)                 ; $
+    (define-key map "%" 'tpu-goto-percent)               ; %
+    (define-key map "&" 'nil)                            ; &
+    (define-key map "(" 'nil)                            ; (
+    (define-key map ")" 'nil)                            ; )
+    (define-key map "*" 'tpu-toggle-regexp)              ; *
+    (define-key map "+" 'nil)                            ; +
+    (define-key map "," 'tpu-goto-breadcrumb)            ; ,
+    (define-key map "-" 'negative-argument)              ; -
+    (define-key map "." 'tpu-drop-breadcrumb)            ; .
+    (define-key map "/" 'tpu-emacs-replace)              ; /
+    (define-key map "0" 'digit-argument)                 ; 0
+    (define-key map "1" 'digit-argument)                 ; 1
+    (define-key map "2" 'digit-argument)                 ; 2
+    (define-key map "3" 'digit-argument)                 ; 3
+    (define-key map "4" 'digit-argument)                 ; 4
+    (define-key map "5" 'digit-argument)                 ; 5
+    (define-key map "6" 'digit-argument)                 ; 6
+    (define-key map "7" 'digit-argument)                 ; 7
+    (define-key map "8" 'digit-argument)                 ; 8
+    (define-key map "9" 'digit-argument)                 ; 9
+    (define-key map ":" 'nil)                            ; :
+    (define-key map ";" 'tpu-trim-line-ends)             ; ;
+    (define-key map "<" 'nil)                            ; <
+    (define-key map "=" 'nil)                            ; =
+    (define-key map ">" 'nil)                            ; >
+    (define-key map "?" 'tpu-spell-check)                ; ?
+    (define-key map "A" 'tpu-toggle-newline-and-indent)  ; A
+    (define-key map "B" 'tpu-next-buffer)                ; B
+    (define-key map "C" 'repeat-complex-command)         ; C
+    (define-key map "D" 'shell-command)                  ; D
+    (define-key map "E" 'tpu-exit)                       ; E
+    (define-key map "F" 'tpu-set-cursor-free)            ; F
+    (define-key map "G" 'tpu-get)                        ; G
+    (define-key map "H" 'nil)                            ; H
+    (define-key map "I" 'tpu-include)                    ; I
+    (define-key map "K" 'tpu-kill-buffer)                ; K
+    (define-key map "L" 'tpu-what-line)                  ; L
+    (define-key map "M" 'buffer-menu)                    ; M
+    (define-key map "N" 'tpu-next-file-buffer)           ; N
+    (define-key map "O" 'occur)                          ; O
+    (define-key map "P" 'lpr-buffer)                     ; P
+    (define-key map "Q" 'tpu-quit)                       ; Q
+    (define-key map "R" 'tpu-toggle-rectangle)           ; R
+    (define-key map "S" 'replace)                        ; S
+    (define-key map "T" 'tpu-line-to-top-of-window)      ; T
+    (define-key map "U" 'undo)                           ; U
+    (define-key map "V" 'tpu-version)                    ; V
+    (define-key map "W" 'save-buffer)                    ; W
+    (define-key map "X" 'tpu-save-all-buffers-kill-emacs) ; X
+    (define-key map "Y" 'copy-region-as-kill)             ; Y
+    (define-key map "Z" 'suspend-emacs)                   ; Z
+    (define-key map "[" 'blink-matching-open)             ; [
+    (define-key map "\\" 'nil)                            ; \
+    (define-key map "]" 'blink-matching-open)             ; ]
+    (define-key map "^" 'tpu-add-at-bol)                  ; ^
+    (define-key map "_" 'split-window-vertically)         ; -
+    (define-key map "`" 'what-line)                       ; `
+    (define-key map "a" 'tpu-toggle-newline-and-indent)   ; a
+    (define-key map "b" 'tpu-next-buffer)                 ; b
+    (define-key map "c" 'repeat-complex-command)          ; c
+    (define-key map "d" 'shell-command)                   ; d
+    (define-key map "e" 'tpu-exit)                        ; e
+    (define-key map "f" 'tpu-set-cursor-free)             ; f
+    (define-key map "g" 'tpu-get)                         ; g
+    (define-key map "h" 'nil)                             ; h
+    (define-key map "i" 'tpu-include)                     ; i
+    (define-key map "k" 'tpu-kill-buffer)                 ; k
+    (define-key map "l" 'goto-line)                       ; l
+    (define-key map "m" 'buffer-menu)                     ; m
+    (define-key map "n" 'tpu-next-file-buffer)            ; n
+    (define-key map "o" 'occur)                           ; o
+    (define-key map "p" 'lpr-region)                      ; p
+    (define-key map "q" 'tpu-quit)                        ; q
+    (define-key map "r" 'tpu-toggle-rectangle)            ; r
+    (define-key map "s" 'replace)                         ; s
+    (define-key map "t" 'tpu-line-to-top-of-window)       ; t
+    (define-key map "u" 'undo)                            ; u
+    (define-key map "v" 'tpu-version)                     ; v
+    (define-key map "w" 'save-buffer)                     ; w
+    (define-key map "x" 'tpu-save-all-buffers-kill-emacs) ; x
+    (define-key map "y" 'copy-region-as-kill)             ; y
+    (define-key map "z" 'suspend-emacs)                   ; z
+    (define-key map "{" 'nil)                             ; {
+    (define-key map "|" 'split-window-horizontally)       ; |
+    (define-key map "}" 'nil)                             ; }
+    (define-key map "~" 'exchange-point-and-mark)         ; ~
+    (define-key map "\177" 'delete-window)                ; <X]
+    map)
   "Maps the function keys on the VT100 keyboard preceded by PF1.
 GOLD is the ASCII 7-bit escape sequence <ESC>OP.")
 
-(defvar GOLD-CSI-map (make-sparse-keymap)
-  "Maps the function keys on the VT100 keyboard preceded by GOLD-CSI.")
+(defvar SS3-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "P" GOLD-map)                         ; GOLD map
+    ;; 
+    (define-key map "A" 'tpu-previous-line)               ; up
+    (define-key map "B" 'tpu-next-line)                   ; down
+    (define-key map "C" 'tpu-forward-char)                ; right
+    (define-key map "D" 'tpu-backward-char)               ; left
 
-(defvar GOLD-SS3-map (make-sparse-keymap)
-  "Maps the function keys on the VT100 keyboard preceded by GOLD-SS3.")
+    (define-key map "Q" 'tpu-help)                        ; PF2
+    (define-key map "R" 'tpu-search-again)                ; PF3
+    (define-key map "S" 'tpu-delete-current-line)         ; PF4
+    (define-key map "p" 'tpu-line)                        ; KP0
+    (define-key map "q" 'tpu-word)                        ; KP1
+    (define-key map "r" 'tpu-end-of-line)                 ; KP2
+    (define-key map "s" 'tpu-char)                        ; KP3
+    (define-key map "t" 'tpu-advance-direction)           ; KP4
+    (define-key map "u" 'tpu-backup-direction)            ; KP5
+    (define-key map "v" 'tpu-cut)                         ; KP6
+    (define-key map "w" 'tpu-page)                        ; KP7
+    (define-key map "x" 'tpu-scroll-window)               ; KP8
+    (define-key map "y" 'tpu-append-region)               ; KP9
+    (define-key map "m" 'tpu-delete-current-word)         ; KP-
+    (define-key map "l" 'tpu-delete-current-char)         ; KP,
+    (define-key map "n" 'tpu-select)                      ; KP.
+    (define-key map "M" 'newline)                         ; KPenter
+    map)
+  "Maps the SS3 function keys on the VT100 keyboard.
+SS3 is DEC's name for the sequence <ESC>O.")
 
 (defvar tpu-global-map nil "TPU-edt global keymap.")
 (defvar tpu-original-global-map global-map
-  "Original global keymap.")
+  "Original non-TPU global keymap.")
 
-(and tpu-lucid-emacs-p
+(and (not (boundp 'minibuffer-local-ns-map))
      (defvar minibuffer-local-ns-map (make-sparse-keymap)
        "Hack to give Lucid Emacs the same maps as ordinary Emacs."))
 
@@ -346,9 +595,6 @@
 ;;;
 ;;;  Global Variables
 ;;;
-(defvar tpu-edt-mode nil
-  "If non-nil, TPU-edt mode is active.")
-
 (defvar tpu-last-replaced-text ""
   "Last text deleted by a TPU-edt replace command.")
 (defvar tpu-last-deleted-region ""
@@ -433,26 +679,14 @@
 
 (defun tpu-set-mode-line (for-tpu)
   "Set ``minor-mode-alist'' for TPU-edt, or reset it to default Emacs."
-  (cond ((not for-tpu)
-         (setq minor-mode-alist tpu-original-mm-alist))
-	(t
-	 (or (assq 'tpu-newline-and-indent-p minor-mode-alist)
-	     (setq minor-mode-alist
-		   (cons '(tpu-newline-and-indent-p
-			   tpu-newline-and-indent-string)
-			 minor-mode-alist)))
-	 (or (assq 'tpu-rectangular-p minor-mode-alist)
-	     (setq minor-mode-alist
-		   (cons '(tpu-rectangular-p tpu-rectangle-string)
-			 minor-mode-alist)))
-	 (or (assq 'tpu-direction-string minor-mode-alist)
-	     (setq minor-mode-alist
-		   (cons '(tpu-direction-string tpu-direction-string)
-			 minor-mode-alist)))
-	 (or (assq 'tpu-mark-flag minor-mode-alist)
-	     (setq minor-mode-alist
-		   (cons '(tpu-mark-flag tpu-mark-flag)
-			 minor-mode-alist))))))
+  (let ((entries '((tpu-newline-and-indent-p tpu-newline-and-indent-string)
+                   (tpu-rectangular-p tpu-rectangle-string)
+                   (tpu-direction-string tpu-direction-string)
+                   (tpu-mark-flag tpu-mark-flag))))
+    (dolist (entry entries)
+      (if for-tpu
+          (add-to-list 'minor-mode-alist entry)
+        (setq minor-mode-alist (remove entry minor-mode-alist))))))
 
 (defun tpu-update-mode-line nil
   "Make sure mode-line in the current buffer reflects all changes."
@@ -482,7 +716,7 @@
   "Set markers at match beginning and end."
   ;; Add one to beginning mark so it stays with the first character of
   ;;   the string even if characters are added just before the string.
-  (setq tpu-match-beginning-mark (copy-marker (1+ (match-beginning 0))))
+  (setq tpu-match-beginning-mark (copy-marker (match-beginning 0) t))
   (setq tpu-match-end-mark (copy-marker (match-end 0))))
 
 (defun tpu-unset-match nil
@@ -492,7 +726,7 @@
 
 (defun tpu-match-beginning nil
   "Returns the location of the last match beginning."
-  (1- (marker-position tpu-match-beginning-mark)))
+  (marker-position tpu-match-beginning-mark))
 
 (defun tpu-match-end nil
   "Returns the location of the last match end."
@@ -508,10 +742,10 @@
   ;;              beginning, end, and point are equal.
   (cond ((and
 	  (equal (marker-buffer tpu-match-beginning-mark) (current-buffer))
-	  (>= (point) (1- (marker-position tpu-match-beginning-mark)))
+	  (>= (point) (marker-position tpu-match-beginning-mark))
 	  (or
 	   (< (point) (marker-position tpu-match-end-mark))
-	   (and (= (1- (marker-position tpu-match-beginning-mark))
+	   (and (= (marker-position tpu-match-beginning-mark)
 		   (marker-position tpu-match-end-mark))
 		(= (marker-position tpu-match-end-mark) (point))))) t)
 	(t
@@ -521,12 +755,11 @@
   "Show the values of the match markers."
   (interactive)
   (if (markerp tpu-match-beginning-mark)
-      (let ((beg (marker-position tpu-match-beginning-mark)))
-	(message "(%s, %s) in %s -- current %s in %s"
-		 (if beg (1- beg) nil)
-		 (marker-position tpu-match-end-mark)
-		 (marker-buffer tpu-match-end-mark)
-		 (point) (current-buffer)))))
+      (message "(%s, %s) in %s -- current %s in %s"
+               (marker-position tpu-match-beginning-mark)
+               (marker-position tpu-match-end-mark)
+               (marker-buffer tpu-match-end-mark)
+               (point) (current-buffer))))
 
 
 ;;;
@@ -549,7 +782,9 @@
 Sets the mark at POS and activates the region according to the
 current version of Emacs."
   (set-mark pos)
-  (and tpu-lucid-emacs-p pos (zmacs-activate-region)))
+  ;; We use a separate `if' for the fboundp so the byte-compiler notices it
+  ;; and doesn't complain about the subsequent call.
+  (if (fboundp 'zmacs-activate-region) (if pos (zmacs-activate-region))))
 
 (defun tpu-string-prompt (prompt history-symbol)
   "Read a string with PROMPT."
@@ -775,8 +1010,12 @@
 ;;;  Command and Function Aliases
 ;;;
 ;;;###autoload
-(defalias 'tpu-edt-mode 'tpu-edt-on)
-(defalias 'TPU-EDT-MODE 'tpu-edt-on)
+(define-minor-mode tpu-edt-mode
+  "TPU/edt emulation."
+  :global t
+  (if tpu-edt-mode (tpu-edt-on) (tpu-edt-off)))
+
+(defalias 'TPU-EDT-MODE 'tpu-edt-mode)
 
 ;;;###autoload
 (defalias 'tpu-edt 'tpu-edt-on)
@@ -1164,7 +1403,7 @@
 (defun tpu-set-search (&optional arg)
   "Set the search functions and set the search direction to the current
 direction.  If an argument is specified, don't set the search direction."
-  (if (not arg) (setq tpu-searching-forward (if tpu-advance t nil)))
+  (if (not arg) (setq tpu-searching-forward tpu-advance))
   (cond (tpu-searching-forward
 	 (cond (tpu-regexp-p
 		(fset 'tpu-emacs-search 're-search-forward)
@@ -1217,7 +1456,7 @@
 		    "%sSearch failed: \"%s\""
 		    (if tpu-regexp-p "RE " "") tpu-search-last-string)))))))))
 
-(fset 'tpu-search-internal-core (symbol-function 'tpu-search-internal))
+(defalias 'tpu-search-internal-core (symbol-function 'tpu-search-internal))
 
 (defun tpu-check-search-case (string)
   "Returns t if string contains upper case."
@@ -2005,278 +2244,23 @@
 
 
 ;;;
-;;;  Define keymaps
-;;;
-(define-key SS3-map "P" GOLD-map)                             ; GOLD map
-(define-key GOLD-map "\e[" GOLD-CSI-map)                      ; GOLD-CSI map
-(define-key GOLD-map "\eO" GOLD-SS3-map)                      ; GOLD-SS3 map
-
-
-;;;
-;;;  CSI-map key definitions
-;;;
-(define-key CSI-map "A" 'tpu-previous-line)                   ; up
-(define-key CSI-map "B" 'tpu-next-line)                       ; down
-(define-key CSI-map "D" 'tpu-backward-char)                   ; left
-(define-key CSI-map "C" 'tpu-forward-char)                    ; right
-
-(define-key CSI-map "1~" 'tpu-search)                         ; Find
-(define-key CSI-map "2~" 'tpu-paste)                          ; Insert Here
-(define-key CSI-map "3~" 'tpu-cut)                            ; Remove
-(define-key CSI-map "4~" 'tpu-select)                         ; Select
-(define-key CSI-map "5~" 'tpu-scroll-window-down)             ; Prev Screen
-(define-key CSI-map "6~" 'tpu-scroll-window-up)               ; Next Screen
-
-(define-key CSI-map "11~" 'nil)                               ; F1
-(define-key CSI-map "12~" 'nil)                               ; F2
-(define-key CSI-map "13~" 'nil)                               ; F3
-(define-key CSI-map "14~" 'nil)                               ; F4
-(define-key CSI-map "15~" 'nil)                               ; F5
-(define-key CSI-map "17~" 'nil)                               ; F6
-(define-key CSI-map "18~" 'nil)                               ; F7
-(define-key CSI-map "19~" 'nil)                               ; F8
-(define-key CSI-map "20~" 'nil)                               ; F9
-(define-key CSI-map "21~" 'tpu-exit)                          ; F10
-(define-key CSI-map "23~" 'tpu-insert-escape)                 ; F11 (ESC)
-(define-key CSI-map "24~" 'tpu-next-beginning-of-line)        ; F12 (BS)
-(define-key CSI-map "25~" 'tpu-delete-previous-word)          ; F13 (LF)
-(define-key CSI-map "26~" 'tpu-toggle-overwrite-mode)         ; F14
-(define-key CSI-map "28~" 'tpu-help)                          ; HELP
-(define-key CSI-map "29~" 'execute-extended-command)          ; DO
-(define-key CSI-map "31~" 'tpu-goto-breadcrumb)               ; F17
-(define-key CSI-map "32~" 'nil)                               ; F18
-(define-key CSI-map "33~" 'nil)                               ; F19
-(define-key CSI-map "34~" 'nil)                               ; F20
-
-
-;;;
-;;;  SS3-map key definitions
-;;;
-(define-key SS3-map "A" 'tpu-previous-line)                   ; up
-(define-key SS3-map "B" 'tpu-next-line)                       ; down
-(define-key SS3-map "C" 'tpu-forward-char)                    ; right
-(define-key SS3-map "D" 'tpu-backward-char)                   ; left
-
-(define-key SS3-map "Q" 'tpu-help)                            ; PF2
-(define-key SS3-map "R" 'tpu-search-again)                    ; PF3
-(define-key SS3-map "S" 'tpu-delete-current-line)             ; PF4
-(define-key SS3-map "p" 'tpu-line)                            ; KP0
-(define-key SS3-map "q" 'tpu-word)                            ; KP1
-(define-key SS3-map "r" 'tpu-end-of-line)                     ; KP2
-(define-key SS3-map "s" 'tpu-char)                            ; KP3
-(define-key SS3-map "t" 'tpu-advance-direction)               ; KP4
-(define-key SS3-map "u" 'tpu-backup-direction)                ; KP5
-(define-key SS3-map "v" 'tpu-cut)                             ; KP6
-(define-key SS3-map "w" 'tpu-page)                            ; KP7
-(define-key SS3-map "x" 'tpu-scroll-window)                   ; KP8
-(define-key SS3-map "y" 'tpu-append-region)                   ; KP9
-(define-key SS3-map "m" 'tpu-delete-current-word)             ; KP-
-(define-key SS3-map "l" 'tpu-delete-current-char)             ; KP,
-(define-key SS3-map "n" 'tpu-select)                          ; KP.
-(define-key SS3-map "M" 'newline)                             ; KPenter
-
-
-;;;
-;;;  GOLD-map key definitions
-;;;
-(define-key GOLD-map "\C-A" 'tpu-toggle-overwrite-mode)       ; ^A
-(define-key GOLD-map "\C-B" 'nil)                             ; ^B
-(define-key GOLD-map "\C-C" 'nil)                             ; ^C
-(define-key GOLD-map "\C-D" 'nil)                             ; ^D
-(define-key GOLD-map "\C-E" 'nil)                             ; ^E
-(define-key GOLD-map "\C-F" 'set-visited-file-name)           ; ^F
-(define-key GOLD-map "\C-g" 'keyboard-quit)                   ; safety first
-(define-key GOLD-map "\C-h" 'delete-other-windows)            ; BS
-(define-key GOLD-map "\C-i" 'other-window)                    ; TAB
-(define-key GOLD-map "\C-J" 'nil)                             ; ^J
-(define-key GOLD-map "\C-K" 'tpu-define-macro-key)            ; ^K
-(define-key GOLD-map "\C-l" 'downcase-region)                 ; ^L
-(define-key GOLD-map "\C-M" 'nil)                             ; ^M
-(define-key GOLD-map "\C-N" 'nil)                             ; ^N
-(define-key GOLD-map "\C-O" 'nil)                             ; ^O
-(define-key GOLD-map "\C-P" 'nil)                             ; ^P
-(define-key GOLD-map "\C-Q" 'nil)                             ; ^Q
-(define-key GOLD-map "\C-R" 'nil)                             ; ^R
-(define-key GOLD-map "\C-S" 'nil)                             ; ^S
-(define-key GOLD-map "\C-T" 'tpu-toggle-control-keys)         ; ^T
-(define-key GOLD-map "\C-u" 'upcase-region)                   ; ^U
-(define-key GOLD-map "\C-V" 'nil)                             ; ^V
-(define-key GOLD-map "\C-w" 'tpu-write-current-buffers)       ; ^W
-(define-key GOLD-map "\C-X" 'nil)                             ; ^X
-(define-key GOLD-map "\C-Y" 'nil)                             ; ^Y
-(define-key GOLD-map "\C-Z" 'nil)                             ; ^Z
-(define-key GOLD-map " " 'undo)                               ; SPC
-(define-key GOLD-map "!" 'nil)                                ; !
-(define-key GOLD-map "#" 'nil)                                ; #
-(define-key GOLD-map "$" 'tpu-add-at-eol)                     ; $
-(define-key GOLD-map "%" 'tpu-goto-percent)                   ; %
-(define-key GOLD-map "&" 'nil)                                ; &
-(define-key GOLD-map "(" 'nil)                                ; (
-(define-key GOLD-map ")" 'nil)                                ; )
-(define-key GOLD-map "*" 'tpu-toggle-regexp)                  ; *
-(define-key GOLD-map "+" 'nil)                                ; +
-(define-key GOLD-map "," 'tpu-goto-breadcrumb)                ; ,
-(define-key GOLD-map "-" 'negative-argument)                  ; -
-(define-key GOLD-map "." 'tpu-drop-breadcrumb)                ; .
-(define-key GOLD-map "/" 'tpu-emacs-replace)                  ; /
-(define-key GOLD-map "0" 'digit-argument)                     ; 0
-(define-key GOLD-map "1" 'digit-argument)                     ; 1
-(define-key GOLD-map "2" 'digit-argument)                     ; 2
-(define-key GOLD-map "3" 'digit-argument)                     ; 3
-(define-key GOLD-map "4" 'digit-argument)                     ; 4
-(define-key GOLD-map "5" 'digit-argument)                     ; 5
-(define-key GOLD-map "6" 'digit-argument)                     ; 6
-(define-key GOLD-map "7" 'digit-argument)                     ; 7
-(define-key GOLD-map "8" 'digit-argument)                     ; 8
-(define-key GOLD-map "9" 'digit-argument)                     ; 9
-(define-key GOLD-map ":" 'nil)                                ; :
-(define-key GOLD-map ";" 'tpu-trim-line-ends)                 ; ;
-(define-key GOLD-map "<" 'nil)                                ; <
-(define-key GOLD-map "=" 'nil)                                ; =
-(define-key GOLD-map ">" 'nil)                                ; >
-(define-key GOLD-map "?" 'tpu-spell-check)                    ; ?
-(define-key GOLD-map "A" 'tpu-toggle-newline-and-indent)      ; A
-(define-key GOLD-map "B" 'tpu-next-buffer)                    ; B
-(define-key GOLD-map "C" 'repeat-complex-command)             ; C
-(define-key GOLD-map "D" 'shell-command)                      ; D
-(define-key GOLD-map "E" 'tpu-exit)                           ; E
-(define-key GOLD-map "F" 'tpu-set-cursor-free)                ; F
-(define-key GOLD-map "G" 'tpu-get)                            ; G
-(define-key GOLD-map "H" 'nil)                                ; H
-(define-key GOLD-map "I" 'tpu-include)                        ; I
-(define-key GOLD-map "K" 'tpu-kill-buffer)                    ; K
-(define-key GOLD-map "L" 'tpu-what-line)                      ; L
-(define-key GOLD-map "M" 'buffer-menu)                        ; M
-(define-key GOLD-map "N" 'tpu-next-file-buffer)               ; N
-(define-key GOLD-map "O" 'occur)                              ; O
-(define-key GOLD-map "P" 'lpr-buffer)                         ; P
-(define-key GOLD-map "Q" 'tpu-quit)                           ; Q
-(define-key GOLD-map "R" 'tpu-toggle-rectangle)               ; R
-(define-key GOLD-map "S" 'replace)                            ; S
-(define-key GOLD-map "T" 'tpu-line-to-top-of-window)          ; T
-(define-key GOLD-map "U" 'undo)                               ; U
-(define-key GOLD-map "V" 'tpu-version)                        ; V
-(define-key GOLD-map "W" 'save-buffer)                        ; W
-(define-key GOLD-map "X" 'tpu-save-all-buffers-kill-emacs)    ; X
-(define-key GOLD-map "Y" 'copy-region-as-kill)                ; Y
-(define-key GOLD-map "Z" 'suspend-emacs)                      ; Z
-(define-key GOLD-map "[" 'blink-matching-open)                ; [
-(define-key GOLD-map "\\" 'nil)                               ; \
-(define-key GOLD-map "]" 'blink-matching-open)                ; ]
-(define-key GOLD-map "^" 'tpu-add-at-bol)                     ; ^
-(define-key GOLD-map "_" 'split-window-vertically)            ; -
-(define-key GOLD-map "`" 'what-line)                          ; `
-(define-key GOLD-map "a" 'tpu-toggle-newline-and-indent)      ; a
-(define-key GOLD-map "b" 'tpu-next-buffer)                    ; b
-(define-key GOLD-map "c" 'repeat-complex-command)             ; c
-(define-key GOLD-map "d" 'shell-command)                      ; d
-(define-key GOLD-map "e" 'tpu-exit)                           ; e
-(define-key GOLD-map "f" 'tpu-set-cursor-free)                ; f
-(define-key GOLD-map "g" 'tpu-get)                            ; g
-(define-key GOLD-map "h" 'nil)                                ; h
-(define-key GOLD-map "i" 'tpu-include)                        ; i
-(define-key GOLD-map "k" 'tpu-kill-buffer)                    ; k
-(define-key GOLD-map "l" 'goto-line)                          ; l
-(define-key GOLD-map "m" 'buffer-menu)                        ; m
-(define-key GOLD-map "n" 'tpu-next-file-buffer)               ; n
-(define-key GOLD-map "o" 'occur)                              ; o
-(define-key GOLD-map "p" 'lpr-region)                         ; p
-(define-key GOLD-map "q" 'tpu-quit)                           ; q
-(define-key GOLD-map "r" 'tpu-toggle-rectangle)               ; r
-(define-key GOLD-map "s" 'replace)                            ; s
-(define-key GOLD-map "t" 'tpu-line-to-top-of-window)          ; t
-(define-key GOLD-map "u" 'undo)                               ; u
-(define-key GOLD-map "v" 'tpu-version)                        ; v
-(define-key GOLD-map "w" 'save-buffer)                        ; w
-(define-key GOLD-map "x" 'tpu-save-all-buffers-kill-emacs)    ; x
-(define-key GOLD-map "y" 'copy-region-as-kill)                ; y
-(define-key GOLD-map "z" 'suspend-emacs)                      ; z
-(define-key GOLD-map "{" 'nil)                                ; {
-(define-key GOLD-map "|" 'split-window-horizontally)          ; |
-(define-key GOLD-map "}" 'nil)                                ; }
-(define-key GOLD-map "~" 'exchange-point-and-mark)            ; ~
-(define-key GOLD-map "\177" 'delete-window)                   ; <X]
-
-
-;;;
-;;;  GOLD-CSI-map key definitions
-;;;
-(define-key GOLD-CSI-map "A" 'tpu-move-to-beginning)          ; up-arrow
-(define-key GOLD-CSI-map "B" 'tpu-move-to-end)                ; down-arrow
-(define-key GOLD-CSI-map "C" 'end-of-line)                    ; right-arrow
-(define-key GOLD-CSI-map "D" 'beginning-of-line)              ; left-arrow
-
-(define-key GOLD-CSI-map "1~" 'nil)                           ; Find
-(define-key GOLD-CSI-map "2~" 'nil)                           ; Insert Here
-(define-key GOLD-CSI-map "3~" 'tpu-store-text)                ; Remove
-(define-key GOLD-CSI-map "4~" 'tpu-unselect)                  ; Select
-(define-key GOLD-CSI-map "5~" 'tpu-previous-window)           ; Prev Screen
-(define-key GOLD-CSI-map "6~" 'tpu-next-window)               ; Next Screen
-
-(define-key GOLD-CSI-map "11~" 'nil)                          ; F1
-(define-key GOLD-CSI-map "12~" 'nil)                          ; F2
-(define-key GOLD-CSI-map "13~" 'nil)                          ; F3
-(define-key GOLD-CSI-map "14~" 'nil)                          ; F4
-(define-key GOLD-CSI-map "16~" 'nil)                          ; F5
-(define-key GOLD-CSI-map "17~" 'nil)                          ; F6
-(define-key GOLD-CSI-map "18~" 'nil)                          ; F7
-(define-key GOLD-CSI-map "19~" 'nil)                          ; F8
-(define-key GOLD-CSI-map "20~" 'nil)                          ; F9
-(define-key GOLD-CSI-map "21~" 'nil)                          ; F10
-(define-key GOLD-CSI-map "23~" 'nil)                          ; F11
-(define-key GOLD-CSI-map "24~" 'nil)                          ; F12
-(define-key GOLD-CSI-map "25~" 'nil)                          ; F13
-(define-key GOLD-CSI-map "26~" 'nil)                          ; F14
-(define-key GOLD-CSI-map "28~" 'describe-bindings)            ; HELP
-(define-key GOLD-CSI-map "29~" 'nil)                          ; DO
-(define-key GOLD-CSI-map "31~" 'tpu-drop-breadcrumb)          ; F17
-(define-key GOLD-CSI-map "32~" 'nil)                          ; F18
-(define-key GOLD-CSI-map "33~" 'nil)                          ; F19
-(define-key GOLD-CSI-map "34~" 'nil)                          ; F20
-
-
-;;;
-;;;  GOLD-SS3-map key definitions
-;;;
-(define-key GOLD-SS3-map "A" 'tpu-move-to-beginning)          ; up-arrow
-(define-key GOLD-SS3-map "B" 'tpu-move-to-end)                ; down-arrow
-(define-key GOLD-SS3-map "C" 'end-of-line)                    ; right-arrow
-(define-key GOLD-SS3-map "D" 'beginning-of-line)              ; left-arrow
-
-(define-key GOLD-SS3-map "P" 'keyboard-quit)                  ; PF1
-(define-key GOLD-SS3-map "Q" 'help-for-help)                  ; PF2
-(define-key GOLD-SS3-map "R" 'tpu-search)                     ; PF3
-(define-key GOLD-SS3-map "S" 'tpu-undelete-lines)             ; PF4
-(define-key GOLD-SS3-map "p" 'open-line)                      ; KP0
-(define-key GOLD-SS3-map "q" 'tpu-change-case)                ; KP1
-(define-key GOLD-SS3-map "r" 'tpu-delete-to-eol)              ; KP2
-(define-key GOLD-SS3-map "s" 'tpu-special-insert)             ; KP3
-(define-key GOLD-SS3-map "t" 'tpu-move-to-end)                ; KP4
-(define-key GOLD-SS3-map "u" 'tpu-move-to-beginning)          ; KP5
-(define-key GOLD-SS3-map "v" 'tpu-paste)                      ; KP6
-(define-key GOLD-SS3-map "w" 'execute-extended-command)       ; KP7
-(define-key GOLD-SS3-map "x" 'tpu-fill)                       ; KP8
-(define-key GOLD-SS3-map "y" 'tpu-replace)                    ; KP9
-(define-key GOLD-SS3-map "m" 'tpu-undelete-words)             ; KP-
-(define-key GOLD-SS3-map "l" 'tpu-undelete-char)              ; KP,
-(define-key GOLD-SS3-map "n" 'tpu-unselect)                   ; KP.
-(define-key GOLD-SS3-map "M" 'tpu-substitute)                 ; KPenter
-
-
-;;;
 ;;;  Minibuffer map additions to make KP_enter = RET
 ;;;
-(define-key minibuffer-local-map "\eOM" 'exit-minibuffer)
-(define-key minibuffer-local-ns-map "\eOM" 'exit-minibuffer)
-(define-key minibuffer-local-completion-map "\eOM" 'exit-minibuffer)
-(define-key minibuffer-local-must-match-map "\eOM" 'minibuffer-complete-and-exit)
+;; Standard Emacs settings under xterm in function-key-map map
+;; "\eOM" to [kp-enter] and [kp-enter] to RET, but since the output of the map
+;; is not fed back into the map, the key stays as kp-enter :-(.
+(define-key minibuffer-local-map [kp-enter] 'exit-minibuffer)
+;; These are not necessary because they are inherited.
+;; (define-key minibuffer-local-ns-map [kp-enter] 'exit-minibuffer)
+;; (define-key minibuffer-local-completion-map [kp-enter] 'exit-minibuffer)
+(define-key minibuffer-local-must-match-map [kp-enter] 'minibuffer-complete-and-exit)
 
 
 ;;;
 ;;;  Minibuffer map additions to set search direction
 ;;;
-(define-key minibuffer-local-map "\eOt" 'tpu-search-forward-exit)
-(define-key minibuffer-local-map "\eOu" 'tpu-search-backward-exit)
+(define-key minibuffer-local-map "\eOt" 'tpu-search-forward-exit)  ;KP4
+(define-key minibuffer-local-map "\eOu" 'tpu-search-backward-exit) ;KP5
 
 
 ;;;
@@ -2306,9 +2290,7 @@
 	 (doit  (or tpu emacs)))
     (cond (doit
 	   (if emacs (setq tpu-global-map (copy-keymap global-map)))
-	   (let ((map (if tpu
-			  (copy-keymap tpu-global-map)
-			(copy-keymap tpu-original-global-map))))
+	   (let ((map (if tpu tpu-global-map tpu-original-global-map)))
 
  	     (define-key global-map "\C-\\" (lookup-key map "\C-\\"))   ; ^\
  	     (define-key global-map "\C-a" (lookup-key map "\C-a"))     ; ^A
@@ -2352,23 +2334,23 @@
 (defun tpu-arrow-history nil
   "Modify minibuffer maps to use arrows for history recall."
   (interactive)
-  (let ((loc (where-is-internal 'tpu-previous-line)) (cur nil))
-    (while (setq cur (car loc))
-      (define-key read-expression-map cur 'tpu-previous-history-element)
-      (define-key minibuffer-local-map cur 'tpu-previous-history-element)
-      (define-key minibuffer-local-ns-map cur 'tpu-previous-history-element)
-      (define-key minibuffer-local-completion-map cur 'tpu-previous-history-element)
-      (define-key minibuffer-local-must-match-map cur 'tpu-previous-history-element)
-      (setq loc (cdr loc)))
+  (dolist (cur (where-is-internal 'tpu-previous-line))
+    (define-key read-expression-map cur 'tpu-previous-history-element)
+    (define-key minibuffer-local-map cur 'tpu-previous-history-element)
+    ;; These are inherited anyway.  --Stef
+    ;; (define-key minibuffer-local-ns-map cur 'tpu-previous-history-element)
+    ;; (define-key minibuffer-local-completion-map cur 'tpu-previous-history-element)
+    ;; (define-key minibuffer-local-must-match-map cur 'tpu-previous-history-element)
+    )
 
-    (setq loc (where-is-internal 'tpu-next-line))
-    (while (setq cur (car loc))
-      (define-key read-expression-map cur 'tpu-next-history-element)
-      (define-key minibuffer-local-map cur 'tpu-next-history-element)
-      (define-key minibuffer-local-ns-map cur 'tpu-next-history-element)
-      (define-key minibuffer-local-completion-map cur 'tpu-next-history-element)
-      (define-key minibuffer-local-must-match-map cur 'tpu-next-history-element)
-      (setq loc (cdr loc)))))
+  (dolist (cur (where-is-internal 'tpu-next-line))
+    (define-key read-expression-map cur 'tpu-next-history-element)
+    (define-key minibuffer-local-map cur 'tpu-next-history-element)
+    ;; These are inherited anyway.  --Stef
+    ;; (define-key minibuffer-local-ns-map cur 'tpu-next-history-element)
+    ;; (define-key minibuffer-local-completion-map cur 'tpu-next-history-element)
+    ;; (define-key minibuffer-local-must-match-map cur 'tpu-next-history-element)
+    ))
 
 
 ;;;
@@ -2461,46 +2443,39 @@
 ;;;  Start and Stop TPU-edt
 ;;;
 ;;;###autoload
-(defun tpu-edt-on nil
+(defun tpu-edt-on ()
   "Turn on TPU/edt emulation."
   (interactive)
-  (cond
-   ((not tpu-edt-mode)
-    ;; we use picture-mode functions
-    (require 'picture)
-    (tpu-set-control-keys)
-    (and window-system (tpu-load-xkeys nil))
-    (tpu-arrow-history)
-    (transient-mark-mode t)
-    (add-hook 'post-command-hook 'tpu-search-highlight)
-    (tpu-set-mode-line t)
-    (tpu-advance-direction)
-    ;; set page delimiter, display line truncation, and scrolling like TPU
-    (setq-default page-delimiter "\f")
-    (setq-default truncate-lines t)
-    (setq scroll-step 1)
-    (setq tpu-original-global-map global-map)
-    (setq global-map (copy-keymap global-map))
-    (define-key global-map "\e[" CSI-map)
-    (define-key global-map "\eO" SS3-map)
-    (setq tpu-edt-mode t))))
+  (and window-system (tpu-load-xkeys nil))
+  (tpu-arrow-history)
+  (transient-mark-mode t)
+  (add-hook 'post-command-hook 'tpu-search-highlight)
+  (tpu-set-mode-line t)
+  (tpu-advance-direction)
+  ;; set page delimiter, display line truncation, and scrolling like TPU
+  (setq-default page-delimiter "\f")
+  (setq-default truncate-lines t)
+  (setq scroll-step 1)
+  (setq global-map (copy-keymap global-map))
+  (tpu-set-control-keys)
+  (define-key global-map "\e[" CSI-map)
+  (define-key global-map "\eO" SS3-map)
+  (setq tpu-edt-mode t))
 
-(defun tpu-edt-off nil
+(defun tpu-edt-off ()
   "Turn off TPU/edt emulation.  Note that the keypad is left on."
   (interactive)
-  (cond
-   (tpu-edt-mode
-    (tpu-reset-control-keys nil)
-    (remove-hook 'post-command-hook 'tpu-search-highlight)
-    (tpu-set-mode-line nil)
-    (setq-default page-delimiter "^\f")
-    (setq-default truncate-lines nil)
-    (setq scroll-step 0)
-    (setq global-map tpu-original-global-map)
-    (use-global-map global-map)
-    (setq tpu-edt-mode nil))))
+  (tpu-reset-control-keys nil)
+  (remove-hook 'post-command-hook 'tpu-search-highlight)
+  (tpu-set-mode-line nil)
+  (setq-default page-delimiter "^\f")
+  (setq-default truncate-lines nil)
+  (setq scroll-step 0)
+  (setq global-map tpu-original-global-map)
+  (use-global-map global-map)
+  (setq tpu-edt-mode nil))
 
 (provide 'tpu-edt)
 
-;;; arch-tag: f3dfe61c-2cbd-4f73-b9cc-eb215020b857
+;; arch-tag: f3dfe61c-2cbd-4f73-b9cc-eb215020b857
 ;;; tpu-edt.el ends here