changeset 85547:aa63a97d09ff

(wyse50-terminal-map): New var. (terminal-init-wyse50): Use it and input-decode-map. (enable-arrow-keys): Emasculate.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 22 Oct 2007 15:20:15 +0000
parents d3c6c7427cef
children a91afd109e55
files lisp/term/wyse50.el
diffstat 1 files changed, 92 insertions(+), 84 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/term/wyse50.el	Mon Oct 22 15:17:36 2007 +0000
+++ b/lisp/term/wyse50.el	Mon Oct 22 15:20:15 2007 +0000
@@ -38,76 +38,84 @@
 
 ;;; Code:
 
+(defvar wyse50-terminal-map
+  (let ((map (make-sparse-keymap)))
+    (dolist (key-definition
+             '( ;; These might be set up by termcap and terminfo
+               ("\C-k"	[up])
+               ("\C-j"	[down])
+               ("\C-l"	[right])
+               ("\C-h"	[left])
+               ("\^a@\^m"	[f1])
+               ("\^aA\^m"	[f2])
+               ("\^aB\^m"	[f3])
+               ("\^aC\^m"	[f4])
+               ("\^aD\^m"	[f5])
+               ("\^aE\^m"	[f6])
+               ("\^aF\^m"	[f7])
+               ("\^aG\^m"	[f8])
+               ("\^aH\^m"	[f9])
+
+               ;; These might be set up by terminfo
+               ("\eK"	[next])
+               ("\eT"	[clearline])
+               ("\^^"	[home])
+               ("\e\^^"	[end])
+               ("\eQ"	[insert])
+               ("\eE"	[insertline])
+               ("\eR"	[deleteline])
+               ("\eP"	[print])
+               ("\er"	[replace])
+               ("\^aI\^m"	[f10])
+               ("\^aJ\^m"	[f11])
+               ("\^aK\^m"	[f12])
+               ("\^aL\^m"	[f13])
+               ("\^aM\^m"	[f14])
+               ("\^aN\^m"	[f15])
+               ("\^aO\^m"	[f16])
+               ("\^a`\^m"	[f17])
+               ("\^aa\^m"	[f18])
+               ("\^ab\^m"	[f19])
+               ("\^ac\^m"	[f20])
+               ("\^ad\^m"	[f21])
+               ("\^ae\^m"	[f22])
+               ("\^af\^m"	[f23])
+               ("\^ag\^m"	[f24])
+               ("\^ah\^m"	[f25])
+               ("\^ai\^m"	[f26])
+               ("\^aj\^m"	[f27])
+               ("\^ak\^m"	[f28])
+               ("\^al\^m"	[f29])
+               ("\^am\^m"	[f30])
+               ("\^an\^m"	[f31])
+               ("\^ao\^m"	[f32])
+
+               ;; Terminfo may know about these, but X won't
+               ("\eI"	[key-stab])  ;; Not an X keysym
+               ("\eJ"	[key-snext]) ;; Not an X keysym
+               ("\eY"	[key-clear]) ;; Not an X keysym
+
+               ;; These are totally strange :-)
+               ("\eW"	[?\C-?])		;; Not an X keysym
+               ("\^a\^k\^m"	[funct-up])	;; Not an X keysym
+               ("\^a\^j\^m"	[funct-down])	;; Not an X keysym
+               ("\^a\^l\^m"	[funct-right])	;; Not an X keysym
+               ("\^a\^h\^m"	[funct-left])	;; Not an X keysym
+               ("\^a\^m\^m"	[funct-return])	;; Not an X keysym
+               ("\^a\^i\^m"	[funct-tab])	;; Not an X keysym
+               ))
+      (define-key map
+        (car key-definition) (nth 1 key-definition)))
+    map))
+
 (defun terminal-init-wyse50 ()
   "Terminal initialization function for wyse50."
-  (define-key local-function-key-map "\C-a" (make-keymap))
-  (mapcar (function (lambda (key-definition)
-		      (define-key local-function-key-map
-			(car key-definition) (nth 1 key-definition))))
-	  '(
-	    ;; These might be set up by termcap and terminfo
-	    ("\C-k"	[up])
-	    ("\C-j"	[down])
-	    ("\C-l"	[right])
-	    ("\C-h"	[left])
-	    ("\^a@\^m"	[f1])
-	    ("\^aA\^m"	[f2])
-	    ("\^aB\^m"	[f3])
-	    ("\^aC\^m"	[f4])
-	    ("\^aD\^m"	[f5])
-	    ("\^aE\^m"	[f6])
-	    ("\^aF\^m"	[f7])
-	    ("\^aG\^m"	[f8])
-	    ("\^aH\^m"	[f9])
-
-	    ;; These might be set up by terminfo
-	    ("\eK"	[next])
-	    ("\eT"	[clearline])
-	    ("\^^"	[home])
-	    ("\e\^^"	[end])
-	    ("\eQ"	[insert])
-	    ("\eE"	[insertline])
-	    ("\eR"	[deleteline])
-	    ("\eP"	[print])
-	    ("\er"	[replace])
-	    ("\^aI\^m"	[f10])
-	    ("\^aJ\^m"	[f11])
-	    ("\^aK\^m"	[f12])
-	    ("\^aL\^m"	[f13])
-	    ("\^aM\^m"	[f14])
-	    ("\^aN\^m"	[f15])
-	    ("\^aO\^m"	[f16])
-	    ("\^a`\^m"	[f17])
-	    ("\^aa\^m"	[f18])
-	    ("\^ab\^m"	[f19])
-	    ("\^ac\^m"	[f20])
-	    ("\^ad\^m"	[f21])
-	    ("\^ae\^m"	[f22])
-	    ("\^af\^m"	[f23])
-	    ("\^ag\^m"	[f24])
-	    ("\^ah\^m"	[f25])
-	    ("\^ai\^m"	[f26])
-	    ("\^aj\^m"	[f27])
-	    ("\^ak\^m"	[f28])
-	    ("\^al\^m"	[f29])
-	    ("\^am\^m"	[f30])
-	    ("\^an\^m"	[f31])
-	    ("\^ao\^m"	[f32])
-
-	    ;; Terminfo may know about these, but X won't
-	    ("\eI"	[key-stab])		;; Not an X keysym
-	    ("\eJ"	[key-snext])		;; Not an X keysym
-	    ("\eY"	[key-clear])		;; Not an X keysym
-
-	    ;; These are totally strange :-)
-	    ("\eW"	[?\C-?])		;; Not an X keysym
-	    ("\^a\^k\^m"	[funct-up])	;; Not an X keysym
-	    ("\^a\^j\^m"	[funct-down])	;; Not an X keysym
-	    ("\^a\^l\^m"	[funct-right])	;; Not an X keysym
-	    ("\^a\^h\^m"	[funct-left])	;; Not an X keysym
-	    ("\^a\^m\^m"	[funct-return])	;; Not an X keysym
-	    ("\^a\^i\^m"	[funct-tab])	;; Not an X keysym
-	    ))
+  ;; Use inheritance to let the main keymap override these defaults.
+  ;; This way we don't override terminfo-derived settings or settings
+  ;; made in the .emacs file.
+  (let ((m (copy-keymap wyse50-terminal-map)))
+    (set-keymap-parent m (keymap-parent input-decode-map))
+    (set-keymap-parent input-decode-map m))
 
   ;; Miscellaneous hacks
 
@@ -126,29 +134,29 @@
 			 (concat "\ea23R" (1+ (frame-width)) "C\eG0"))))))
 
 (defun enable-arrow-keys ()
-  "To be called by term-setup-hook. Overrides 6 Emacs standard keys
+  "To be called by `term-setup-hook'. Overrides 6 Emacs standard keys
 whose functions are then typed as follows:
 C-a	Funct Left-arrow
 C-h	M-?
 LFD	Funct Return, some modes override down-arrow via LFD
 C-k	CLR Line
 C-l	Scrn CLR
-M-r	M-x move-to-window-line, Funct up-arrow or down-arrow are similar
-"
+M-r	M-x move-to-window-line, Funct up-arrow or down-arrow are similar"
   (interactive)
-  (mapcar (function (lambda (key-definition)
-		      (global-set-key (car key-definition)
-				      (nth 1 key-definition))))
-	  ;; By unsetting C-a and then binding it to a prefix, we
-	  ;; allow the rest of the function keys which start with C-a
-	  ;; to be recognized.
-	  '(("\C-a"	nil)
-	    ("\C-k"	nil)
-	    ("\C-j"	nil)
-	    ("\C-l"	nil)
-	    ("\C-h"	nil)
-	    ("\er"	nil)))
+  ;; Not needed any more now that we use input-decode-map.
+  ;; (dolist (key-definition 
+  ;;         ;; By unsetting C-a and then binding it to a prefix, we
+  ;;         ;; allow the rest of the function keys which start with C-a
+  ;;         ;; to be recognized.
+  ;;         '(("\C-a"	nil)
+  ;;           ("\C-k"	nil)
+  ;;           ("\C-j"	nil)
+  ;;           ("\C-l"	nil)
+  ;;           ("\C-h"	nil)
+  ;;           ("\er"	nil)))
+  ;;   (global-set-key (car key-definition)
+  ;;                   (nth 1 key-definition)))
   (fset 'enable-arrow-keys nil))
 
-;;; arch-tag: b6a05d37-eead-4cf6-b997-0f956c68881c
+;; arch-tag: b6a05d37-eead-4cf6-b997-0f956c68881c
 ;;; wyse50.el ends here