1;;; wyse50.el --- terminal support code for Wyse 50 -*- no-byte-compile: t -*-
2
3;; Copyright (C) 1989, 1993, 1994, 2001, 2002, 2003, 2004,
4;;   2005, 2006, 2007 Free Software Foundation, Inc.
5
6;; Author: Daniel Pfeiffer <occitan@esperanto.org>,
7;;	Jim Blandy <jimb@occs.cs.oberlin.edu>
8;; Keywords: terminals
9
10;; This file is part of GNU Emacs.
11
12;; GNU Emacs is free software; you can redistribute it and/or modify
13;; it under the terms of the GNU General Public License as published by
14;; the Free Software Foundation; either version 2, or (at your option)
15;; any later version.
16
17;; GNU Emacs is distributed in the hope that it will be useful,
18;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20;; GNU General Public License for more details.
21
22;; You should have received a copy of the GNU General Public License
23;; along with GNU Emacs; see the file COPYING.  If not, write to the
24;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
25;; Boston, MA 02110-1301, USA.
26
27;;; Commentary:
28
29;; Uses the Emacs 19 terminal initialization features --- won't work with 18.
30;; Rewritten for Emacs 19 by jimb,  January 1992
31;; Cleaned up for new terminal package conventions by esr, March 1993
32;; Should work well for Televideo TVI 925 although it's overkill.
33;;
34;; The Wyse50 is ergonomically wonderful, but its escape-sequence design sucks
35;; rocks.  The left-arrow key emits a backspace (!) and the down-arrow a line
36;; feed (!!).  Thus, you have to unbind some commonly-used Emacs keys to
37;; enable the arrows.
38
39;;; Code:
40
41(defun terminal-init-wyse50 ()
42  "Terminal initialization function for wyse50."
43  (define-key function-key-map "\C-a" (make-keymap))
44  (mapcar (function (lambda (key-definition)
45		      (define-key function-key-map
46			(car key-definition) (nth 1 key-definition))))
47	  '(
48	    ;; These might be set up by termcap and terminfo
49	    ("\C-k"	[up])
50	    ("\C-j"	[down])
51	    ("\C-l"	[right])
52	    ("\C-h"	[left])
53	    ("\^a@\^m"	[f1])
54	    ("\^aA\^m"	[f2])
55	    ("\^aB\^m"	[f3])
56	    ("\^aC\^m"	[f4])
57	    ("\^aD\^m"	[f5])
58	    ("\^aE\^m"	[f6])
59	    ("\^aF\^m"	[f7])
60	    ("\^aG\^m"	[f8])
61	    ("\^aH\^m"	[f9])
62
63	    ;; These might be set up by terminfo
64	    ("\eK"	[next])
65	    ("\eT"	[clearline])
66	    ("\^^"	[home])
67	    ("\e\^^"	[end])
68	    ("\eQ"	[insert])
69	    ("\eE"	[insertline])
70	    ("\eR"	[deleteline])
71	    ("\eP"	[print])
72	    ("\er"	[replace])
73	    ("\^aI\^m"	[f10])
74	    ("\^aJ\^m"	[f11])
75	    ("\^aK\^m"	[f12])
76	    ("\^aL\^m"	[f13])
77	    ("\^aM\^m"	[f14])
78	    ("\^aN\^m"	[f15])
79	    ("\^aO\^m"	[f16])
80	    ("\^a`\^m"	[f17])
81	    ("\^aa\^m"	[f18])
82	    ("\^ab\^m"	[f19])
83	    ("\^ac\^m"	[f20])
84	    ("\^ad\^m"	[f21])
85	    ("\^ae\^m"	[f22])
86	    ("\^af\^m"	[f23])
87	    ("\^ag\^m"	[f24])
88	    ("\^ah\^m"	[f25])
89	    ("\^ai\^m"	[f26])
90	    ("\^aj\^m"	[f27])
91	    ("\^ak\^m"	[f28])
92	    ("\^al\^m"	[f29])
93	    ("\^am\^m"	[f30])
94	    ("\^an\^m"	[f31])
95	    ("\^ao\^m"	[f32])
96
97	    ;; Terminfo may know about these, but X won't
98	    ("\eI"	[key-stab])		;; Not an X keysym
99	    ("\eJ"	[key-snext])		;; Not an X keysym
100	    ("\eY"	[key-clear])		;; Not an X keysym
101
102	    ;; These are totally strange :-)
103	    ("\eW"	[?\C-?])	    ;; Not an X keysym
104	    ("\^a\^k\^m"	[funct-up]) ;; Not an X keysym
105	    ("\^a\^j\^m"	[funct-down])  ;; Not an X keysym
106	    ("\^a\^l\^m"	[funct-right]) ;; Not an X keysym
107	    ("\^a\^h\^m"	[funct-left])  ;; Not an X keysym
108	    ("\^a\^m\^m"	[funct-return])	;; Not an X keysym
109	    ("\^a\^i\^m"	[funct-tab])	;; Not an X keysym
110	    ))
111
112  ;; Miscellaneous hacks
113
114  ;; This is an ugly hack for a nasty problem:
115  ;; Wyse 50 takes one character cell to store video attributes (which seems to
116  ;; explain width 79 rather than 80, column 1 is not used!!!).
117  ;; On killing (C-x C-c) the end inverse code (on column 1 of line 24)
118  ;; of the mode line is overwritten AFTER all the y-or-n questions.
119  ;; This causes the attribute to remain in effect until the mode line has
120  ;; scrolled of the screen.  Suspending (C-z) does not cause this problem.
121  ;; On such terminals, Emacs should sacrifice the first and last character of
122  ;; each mode line, rather than a whole screen column!
123  (add-hook 'kill-emacs-hook
124	    (function (lambda () (interactive)
125			(send-string-to-terminal
126			 (concat "\ea23R" (1+ (frame-width)) "C\eG0"))))))
127
128(defun enable-arrow-keys ()
129  "To be called by term-setup-hook. Overrides 6 Emacs standard keys
130whose functions are then typed as follows:
131C-a	Funct Left-arrow
132C-h	M-?
133LFD	Funct Return, some modes override down-arrow via LFD
134C-k	CLR Line
135C-l	Scrn CLR
136M-r	M-x move-to-window-line, Funct up-arrow or down-arrow are similar
137"
138  (interactive)
139  (mapcar (function (lambda (key-definition)
140		      (global-set-key (car key-definition)
141				      (nth 1 key-definition))))
142	  ;; By unsetting C-a and then binding it to a prefix, we
143	  ;; allow the rest of the function keys which start with C-a
144	  ;; to be recognized.
145	  '(("\C-a"	nil)
146	    ("\C-k"	nil)
147	    ("\C-j"	nil)
148	    ("\C-l"	nil)
149	    ("\C-h"	nil)
150	    ("\er"	nil)))
151  (fset 'enable-arrow-keys nil))
152
153;;; arch-tag: b6a05d37-eead-4cf6-b997-0f956c68881c
154;;; wyse50.el ends here
155