Mercurial > emacs
comparison lisp/term/wyse50.el @ 166:4c0d89aec359
Initial revision
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Fri, 25 Jan 1991 22:24:59 +0000 |
parents | |
children | 63d9c60bad2d |
comparison
equal
deleted
inserted
replaced
165:ee44492a4419 | 166:4c0d89aec359 |
---|---|
1 ; Terminal mode for Wyse 50 | |
2 ; should work well for Televideo Tvi 925 though it's an overkill | |
3 ; Author Daniel Pfeiffer <pfeiffer@cix.cict.fr> january 1991 | |
4 | |
5 (require 'keypad) | |
6 | |
7 ; at least some of these should be transferred to keypad.el | |
8 (keypad-default "A" '(lambda () (interactive) | |
9 ; actually insert an empty line | |
10 (beginning-of-line) | |
11 (open-line 1))) | |
12 (keypad-default "E" 'kill-line) | |
13 ; (keypad-default "h" 'execute-extended-command) | |
14 (define-key function-keymap "h" 'execute-extended-command) ; bad, bad !! | |
15 (keypad-default "H" 'shell-command) | |
16 (keypad-default "I" '(lambda () (interactive) | |
17 (insert ? ))) ; works even in overwrite-mode | |
18 (keypad-default "L" '(lambda () (interactive) | |
19 ; delete the whole line | |
20 (beginning-of-line) | |
21 (kill-line 1))) | |
22 (keypad-default "M" 'overwrite-mode) | |
23 (keypad-default "\^e" 'shell) ; F5 | |
24 (keypad-default "\^f" 'dired) ; F6 | |
25 (keypad-default "\^g" 'rnews) ; F7 | |
26 (keypad-default "\^h" 'rmail) ; F8 | |
27 | |
28 (keypad-default "\^i" 'delete-other-windows) ; F9 | |
29 (keypad-default "\^j" 'other-window) ; F10 | |
30 (keypad-default "\^k" 'split-window-vertically) ; F11 | |
31 | |
32 (keypad-default "\^m" 'help-for-help) ; F13 | |
33 (keypad-default "\^n" 'toggle-screen-width) ; F14 | |
34 (keypad-default "\^o" 'set-function-key) ; F15 | |
35 | |
36 | |
37 ; Keys that don't conflict with Emacs defaults | |
38 ; I write \M-x and \C-x for what the user types, \ex and \^x for key sequences | |
39 (setup-terminal-keymap global-map | |
40 '(("\M-?" . ?\?) ; Esc ? | |
41 ("\eI" . ?T) ; Shift Tab | |
42 ("\eJ" . ?P) ; Shift Prev PAGE | |
43 ("\eK" . ?N) ; PAGE Next | |
44 ("\eY" . ?C) ; Shift Scrn CLR | |
45 ("\eT" . ?E) ; CLR Line | |
46 ("\^^" . ?h) ; Home | |
47 ("\M-\^^" . ?H) ; Esc Home | |
48 ("\eQ" . ?I) ; INS Char | |
49 ("\eE" . ?A) ; Shift Line INS | |
50 ("\eW" . ?D) ; DEL Char | |
51 ("\eR" . ?L))) ; Shift Line DEL | |
52 | |
53 ; Print -- put in some extra security | |
54 (global-set-key "\eP" '(lambda () (interactive) | |
55 (if (y-or-n-p | |
56 (concat "Print buffer " | |
57 (buffer-name) "? ")) | |
58 (print-buffer)))) | |
59 | |
60 | |
61 ; this is an ugly hack for a nasty problem: | |
62 ; Wyse 50 takes one character cell to store video attributes (which seems to | |
63 ; explain width 79 rather than 80, column 1 is not used!!!). | |
64 ; On killing (C-x C-c) the end inverse code (on column 1 of line 24) | |
65 ; of the mode line is overwritten AFTER all the y-or-n questions. | |
66 ; This causes the attribute to remain in effect until the mode line has | |
67 ; scrolled of the screen. Suspending (C-z) does not cause this problem. | |
68 ; On such terminals, Emacs should sacrifice the first and last character of | |
69 ; each mode line, rather than a whole screen column! | |
70 (setq kill-emacs-hook '(lambda () (interactive) | |
71 (send-string-to-terminal | |
72 (concat "\ea23R" (1+ (screen-width)) "C\eG0")))) | |
73 | |
74 | |
75 ; This function does more than its name which was copied from term/vt100.el | |
76 ; Some more neutral name should be used thru-out term/*.el to simplify | |
77 ; programming term-setup-hook | |
78 (defun enable-arrow-keys () | |
79 "To be called by term-setup-hook. Overrides 6 Emacs standard keys | |
80 whose functions are then typed as follows: | |
81 C-a Funct Left-arrow | |
82 C-h M-? | |
83 LFD Funct Return, some modes override down-arrow via LFD | |
84 C-k CLR Line | |
85 C-l Scrn CLR | |
86 M-r M-x move-to-window-line, Funct up-arrow or down-arrow are similar | |
87 All special keys except Send, Shift Ins, Shift Home and shifted functions keys | |
88 are assigned some hopefully useful meaning." | |
89 (interactive) | |
90 | |
91 ; Function keys | |
92 (define-prefix-command 'Funct-prefix) | |
93 (define-key global-map "\^a" 'Funct-prefix) | |
94 | |
95 ; Arrow keys | |
96 (setup-terminal-keymap global-map | |
97 '(("\C-a\C-a" . beginning-of-line) ; for auld lang syne | |
98 ("\^a\^m\^m" . newline-and-indent) | |
99 | |
100 ("\^k" . ?u) ; up-arrow | |
101 ("\^j" . ?d) ; down-arrow | |
102 ("\^l" . ?r) ; right-arrow | |
103 ("\^h" . ?l) ; left-arrow | |
104 | |
105 ; Terminal needs both Ins and Repl but Emacs knows how to toggle | |
106 ; with just one key. No need to override Ins which is "\eq". | |
107 ("\er" . ?M) ; Repl | |
108 | |
109 ("\^a\^i\^m" . ?t) ; Funct Tab | |
110 | |
111 ; Function keys F1 thru F16 (we don't define shifted function keys, | |
112 ; they send the same code with the middle character in lowercase. | |
113 ; eg. "Shift F2" is the same as "Funct a" which is more mnemonic but | |
114 ; keypad.el doesn't provide enough codes to accomodate all these) | |
115 ("\^a@\^m" . 1) ("\^aH\^m" . 9) | |
116 ("\^aA\^m" . 2) ("\^aI\^m" . 10) | |
117 ("\^aB\^m" . 3) ("\^aJ\^m" . 11) | |
118 ("\^aC\^m" . 4) ("\^aK\^m" . 12) | |
119 ("\^aD\^m" . 5) ("\^aL\^m" . 13) | |
120 ("\^aE\^m" . 6) ("\^aM\^m" . 14) | |
121 ("\^aF\^m" . 7) ("\^aN\^m" . 15) | |
122 ("\^aG\^m" . 8) ("\^aO\^m" . 16) | |
123 | |
124 ; Funct Arrow keys | |
125 ("\^a\^k\^m" . (lambda (n) (interactive "p") | |
126 (move-to-window-line (1- n)))) | |
127 ("\^a\^j\^m" . (lambda (n) (interactive "p") | |
128 (move-to-window-line (- n)))) | |
129 ("\^a\^h\^m" . beginning-of-line) | |
130 ("\^a\^l\^m" . end-of-line))) | |
131 | |
132 ; forget self to put memory to some serious use | |
133 (fset 'enable-arrow-keys nil)) | |
134 | |
135 | |
136 (defun toggle-screen-width () | |
137 "Alternate between 80 and 132 columns." | |
138 (interactive) | |
139 (if (<= (screen-width) 80) | |
140 (progn | |
141 (send-string-to-terminal "\e`;") | |
142 (set-screen-width 131)) | |
143 (send-string-to-terminal "\e`:") | |
144 (set-screen-width 79))) | |
145 | |
146 ;----------------------------------------------------------------------------- | |
147 ; this function is completely independent of wyse, it should be auto-loadable | |
148 ; (presumably from keypad.el) for use in ~/emacs. It should be the only thing | |
149 ; users need to know about all this unintelligible "forwarding" gibberish. | |
150 ; This paves the way for a save-function-keys (some day or sleepless night) | |
151 ; that will edit calls like (set-function-key ?x 'do-whatever) in ~/.emacs. | |
152 (defun set-function-key (key &optional def) | |
153 "Prompt for a function or other special key and assign it a meaning. | |
154 The key must have been \"forwarded\" to a character in term/*.el. | |
155 | |
156 As a function takes two args CHAR and DEF, with DEF as in define-key. | |
157 If your terminals term/*.el forwards a physical key to CHAR (before or after | |
158 calling this function), then that key will mean DEF, else it is ignored. | |
159 CHAR is one of the following: | |
160 For numbered function keys | |
161 0, 1, ..., 24 (or ?\\^@, ?\\^a, ..., ?\\^x which is the same) | |
162 For keypad keys in application mode | |
163 ?0, ?1, ..., ?9 -- keypad key labelled with that digit, | |
164 but only if that key is not an arrow key (see ?u, ?d, ?r, ?l). | |
165 ?- -- keypad key labelled `-'. | |
166 ?. -- keypad key labelled `.'. | |
167 ?, -- keypad key labelled `,'. | |
168 ?e -- key labelled enter. | |
169 For keys labelled with some words or a symbol | |
170 ?a -- clear all tabs key. | |
171 ?A -- insert line key. | |
172 ?C -- clear screen key. | |
173 ?c -- erase key. | |
174 ?D -- delete character key. | |
175 ?d -- down-arrow. | |
176 ?E -- clear to end of line key. | |
177 ?e -- key labelled enter. | |
178 ?f -- find key or search key. | |
179 ?F -- scroll forward key. | |
180 ?H -- home-down. | |
181 ?h -- home-position key. | |
182 ?I -- insert character key | |
183 If there is just an \"insert\" key, it should be this. | |
184 ?k -- delete key or remove key. | |
185 ?L -- delete line key. | |
186 ?l -- left-arrow. | |
187 ?M -- exit insert mode key. | |
188 ?N -- next page key. | |
189 ?p -- portrait mode. | |
190 ?P -- previous page key. | |
191 ?q -- landscape mode. | |
192 ?r -- right-arrow. | |
193 ?R -- scroll reverse key. | |
194 ?S -- clear to end of screen key. | |
195 ?s -- select key. | |
196 ?t -- clear tab this column key. | |
197 ?T -- set tab this column key. | |
198 ?u -- up-arrow. | |
199 ?x -- do key. | |
200 ?\\? -- help." | |
201 (interactive "kKey to redefine: ") | |
202 (let ((map function-keymap)) | |
203 (if (integerp key) | |
204 () | |
205 ; reinvent lookup-key to get (map . char) instead of def of char in map | |
206 (setq map (or (lookup-key global-map | |
207 (substring key 0 (1- (length key)))) | |
208 global-map) | |
209 key (string-to-char (substring key (1- (length key))))) | |
210 (while (symbolp map) | |
211 (setq map (symbol-function map))) | |
212 (setq map (if (listp map) | |
213 (cdr (assq key (cdr map))) | |
214 (aref map key))) | |
215 (if (and (consp map) | |
216 (integerp (cdr map))) | |
217 (setq key (cdr map) | |
218 map (car map)) | |
219 (error "Key is not a \"forwarded\" definition."))) | |
220 (if def | |
221 () | |
222 (setq def (read-command "command (default last keyboard macro): ")) | |
223 (if (string-equal (symbol-name def) "") | |
224 (setq def last-kbd-macro)) | |
225 (setq command-history ; nonsense really, since you don't see | |
226 (cons ; key as in a function call (?char) | |
227 (list 'set-function-key key | |
228 (if (stringp def) def (list 'quote def))) | |
229 command-history))) | |
230 ; all we do when called as a function | |
231 (define-key map (char-to-string key) def))) | |
232 | |
233 |