1XX_SH(Keymaps)
2The XX_FB(XX_DASHED(keymap)) option
3or the XX_FB(XX_PRODUCT`'.keymap) resource
4allow a custom keymap to be specified.
5If the option XX_FB(XX_DASHED(keymap)) XX_FI(xxx) is given (or the
6XX_FB(XX_PRODUCT`'.keymap) resource has the value XX_FI(xxx)),
7XX_FB(XX_PRODUCT)
8will look for a resource named XX_FB(XX_PRODUCT.keymap.)`'XX_FI(xxx).
9If no resource definition is found, it will look for a file named
10ifelse(XX_PRODUCT,c3270,`XX_FI(xxx)',XX_PRODUCT,wc3270,`XX_FI(xxx)XX_FB(.wc3270km)').
11XX_LP
12Multiple keymaps may be specified be separating their names with commas.
13Definitions in later keymaps supercede those in earlier keymaps.
14XX_LP
15In addition, separate keymaps may be defined that apply only in 3270 mode or
16XX_SM(NVT) mode.
17For example, the resource definition
18XX_FB(XX_PRODUCT.keymap.)`'XX_FI(xxx)`'XX_FB(.nvt)
19or the file
20ifelse(XX_PRODUCT,c3270,`'XX_FI(xxx)`'XX_FB(.nvt),
21XX_PRODUCT,wc3270,`XX_FI(xxx)XX_FB(.nvt.wc3270km)')
22will augment the definition
23of keymap XX_FI(xxx) in XX_SM(NVT) mode.
24Similarly, the resource definition
25XX_FB(XX_PRODUCT.keymap.)`'XX_FI(xxx)`'XX_FB(.3270)
26or the file
27ifelse(XX_PRODUCT,c3270,`'XX_FI(xxx)`'XX_FB(.3270),
28XX_PRODUCT,wc3270,`XX_FI(xxx)XX_FB(.3270.wc3270km)')
29will augment the definition
30of keymap XX_FI(xxx) in 3270 mode.
31XX_LP
32Temporary keymaps can also be added or removed while XX_PRODUCT is running
33with the XX_FB(Keymap) action.
34See XX_LINK(XX_X3270-script.html,XX_FI(XX_X3270-script)(1)) for details.
35XX_LP
36Each line (rule) in a keymap specifies actions to perform when a
37particular key or sequence of keys is pressed.
38Keymap rules have the following syntax:
39XX_LP
40ifelse(XX_PRODUCT,c3270,
41`XX_RS(`[XX_FB(Meta)][XX_FB(Ctrl)]XX_FB(XX_KEY())`'XX_FI(key)...: XX_FI(action)[(XX_FI(param)[,...])] ...')
42',
43`XX_RS(`[XX_FI(modifier)...]XX_FB(XX_KEY())`'XX_FI(key)...: XX_FI(action)[(XX_FI(param)[,...])] ...')
44')dnl
45XX_LP
46Here is a sample keymap definition from a file:
47XX_LP
48XX_RS(`! Lines beginning with ! are ignored and can
49XX_BR()
50! occur anywhere.
51XX_BR()
52ifelse(XX_PRODUCT,wc3270,`! The line below will be displayed
53XX_BR()
54! by the New Session Wizard.
55XX_BR
56!description: An example.
57XX_BR
58')dnl
59! Definition of keymap xxx
60XX_BR()
61! XX_NBSP()When Alt-c is pressed, clear the screen.
62XX_BR()
63XX_KEY(Alt,c): Clear()
64XX_BR()
65! XX_NBSP()When PageUp is pressed, send PF7 to the host.
66XX_BR()
67ifelse(XX_PRODUCT,c3270,`XX_KEY(,PPAGE): PF(7)',
68`XX_KEY(,PRIOR): PF(7)')
69XX_BR()
70! XX_NBSP()When Ctrl-a is pressed, then F1, send PF13
71XX_BR()
72! XX_NBSP()to the host.
73XX_BR()
74XX_KEY(Ctrl,a) XX_KEY(,F1): PF(13)')
75XX_LP
76Here is the same definition as a resource:
77XX_LP
78XX_RS(`! Lines beginning with ! are ignored, but NOT
79XX_BR()
80! within a definition.
81XX_BR()
82! Note that the XX_BACKSLASH() is required at the end of the
83XX_BR()
84! first line, and XX_BACKSLASH(n)`'XX_BACKSLASH() is
85XX_BR()
86! required at the end of every other line except
87XX_BR()
88! the last.
89XX_BR()
90! Definition of keymap xxx
91XX_BR()
92XX_PRODUCT.keymap.xxx: XX_BACKSLASH()
93XX_BR()
94XX_NBSP()XX_KEY(Alt,c): Clear() XX_BACKSLASH(n)`'XX_BACKSLASH()
95XX_BR()
96XX_NBSP()ifelse(XX_PRODUCT,c3270,`XX_KEY(,PPAGE): PF(7) XX_BACKSLASH(n)`'XX_BACKSLASH()',
97`XX_KEY(,PRIOR): PF(7) \n\')
98XX_BR()
99XX_NBSP()XX_KEY(Ctrl,A) XX_KEY(,F1): PF(13)')
100XX_LP
101The optional
102ifelse(XX_PRODUCT,wc3270,`XX_FB(Shift), ')dnl
103XX_FB(Alt) or XX_FB(Ctrl) modifiers specify that
104the
105ifelse(XX_PRODUCT,wc3270,`XX_FB(Shift), ')dnl
106XX_FB(Alt) and XX_FB(Ctrl) keys are pressed along with the
107specified XX_FI(key), respectively.
108ifelse(XX_PRODUCT,wc3270,
109`The XX_FB(LeftCtrl), XX_FB(RightCtrl), XX_FB(LeftAlt), and XX_FB(RightAlt)
110modifiers specifify a particular XX_FB(Ctrl) or XX_FB(Alt) key.
111')dnl
112ifelse(XX_PRODUCT,wc3270,`The XX_FB(Enhanced) modifier is also available;
113XX_FB(Enhanced XX_LT()Key>ENTER) is the keypad XX_FB(Enter) key.
114')dnl
115XX_FI(Key) is either an XX_SM(ISO) 8859-1 symbol name, such as XX_FB(equal)
116for XX_DQUOTED(=) and XX_FB(a) for XX_DQUOTED(a), or a symbolic
117ifelse(XX_PRODUCT,c3270,`XX_FB(ncurses)',XX_PRODUCT,wc3270,`Windows') key name,
118such as XX_FB(UP).
119More than one XX_FI(key) can be specified, indicating that a sequence of
120keys must be pressed in order for the rule to be matched.
121The XX_FI(action) is an action from the XX_LINK(#Actions,XX_SM(ACTIONS)) list
122above.
123More than one XX_FI(action) may be specified; they will be executed in order.
124XX_LP
125Keymap entries are case-sensitive and modifier-specific.
126This means that a keymap for the XX_FB(b) key will match only a
127lowercase XX_FB(b).
128Actions for uppercase XX_FB(B), or for XX_FB(Alt-B),
129must be specified separately.
130ifelse(XX_PRODUCT,wc3270,
131`XX_LP
132Available symbolic key names are:
133XX_FB(ADD),
134XX_FB(ALT),
135XX_FB(APPS),
136XX_FB(BACK) (BackSpace),
137XX_FB(BackSpace) (alias for BACK),
138XX_FB(CLEAR),
139XX_FB(CTRL),
140XX_FB(DECIMAL),
141XX_FB(DELETE),
142XX_FB(DIVIDE),
143XX_FB(DOWN),
144XX_FB(END),
145XX_FB(Enter) (alias for RETURN),
146XX_FB(ESCAPE),
147XX_FB(Esc) (alias for ESCAPE),
148XX_FB(EXECUTE),
149XX_FB(F1),
150XX_FB(F2),
151XX_FB(F3),
152XX_FB(F4),
153XX_FB(F5),
154XX_FB(F6),
155XX_FB(F7),
156XX_FB(F8),
157XX_FB(F9),
158XX_FB(F10),
159XX_FB(F11),
160XX_FB(F12),
161XX_FB(F13),
162XX_FB(F14),
163XX_FB(F15),
164XX_FB(F16),
165XX_FB(F17),
166XX_FB(F18),
167XX_FB(F19),
168XX_FB(F20),
169XX_FB(F21),
170XX_FB(F22),
171XX_FB(F23),
172XX_FB(F24),
173XX_FB(HELP),
174XX_FB(HOME),
175XX_FB(INSERT),
176XX_FB(LEFT),
177XX_FB(LMENU),
178XX_FB(LWIN) (Left Windows key),
179XX_FB(MULTIPLY),
180XX_FB(NEXT) (Page Down),
181XX_FB(NUMLOCK),
182XX_FB(NUMPAD0),
183XX_FB(NUMPAD1),
184XX_FB(NUMPAD2),
185XX_FB(NUMPAD3),
186XX_FB(NUMPAD4),
187XX_FB(NUMPAD5),
188XX_FB(NUMPAD6),
189XX_FB(NUMPAD7),
190XX_FB(NUMPAD8),
191XX_FB(NUMPAD9),
192XX_FB(PageUp) (alias for PRIOR),
193XX_FB(PageDown) (alias for Next),
194XX_FB(PAUSE),
195XX_FB(PRINT),
196XX_FB(PRIOR) (Page Up),
197XX_FB(RETURN) (Enter),
198XX_FB(RIGHT),
199XX_FB(RMENU),
200XX_FB(RWIN) (Right Windows key),
201XX_FB(SCROLL),
202XX_FB(SELECT),
203XX_FB(SEPARATOR),
204XX_FB(SHIFT),
205XX_FB(SLEEP),
206XX_FB(SNAPSHOT),
207XX_FB(SUBTRACT),
208XX_FB(TAB)
209and
210XX_FB(UP).
211In addition, any Windows VKey code can be specified in hexadecimal with the
212syntax XX_FB(VKEY-0x)XX_FI(nn).
213')dnl
214XX_LP
215The base keymap is:
216XX_LP
217XX_TS(2,l l.)
218XX_TR(XX_TD(Key)	XX_TD(Action))
219XX_T_()
220ifelse(XX_PRODUCT,c3270,
221`XX_TR(XX_TD(XX_KEY(Ctrl,`]'))	XX_TD(Escape()))
222XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(Ctrl,a))	XX_TD(`Key(0x01)'))
223XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(Ctrl,`]'))	XX_TD(`Key(0x1d)'))
224XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,Tab))	XX_TD(BackTab()))
225XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,c))	XX_TD(Clear()))
226XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,e))	XX_TD(Escape()))
227XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,r))	XX_TD(Reset()))
228XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,k))	XX_TD(Keypad()))
229XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,l))	XX_TD(Redraw()))
230XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,m))	XX_TD(Compose()))
231XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,n))	XX_TD(Menu()))
232XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,p))	XX_TD(PrintText()))
233XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,^))	XX_TD(Key(notsign)))
234XX_TR(XX_TD(XX_KEY(Ctrl,k))	XX_TD(Keypad()))
235XX_TR(XX_TD(XX_KEY(Ctrl,n))	XX_TD(Menu()))
236XX_TR(XX_TD(XX_KEY(,UP))	XX_TD(Up()))
237XX_TR(XX_TD(XX_KEY(,DOWN))	XX_TD(Down()))
238XX_TR(XX_TD(XX_KEY(,LEFT))	XX_TD(Left()))
239XX_TR(XX_TD(XX_KEY(,RIGHT))	XX_TD(Right()))
240XX_TR(XX_TD(XX_KEY(,`F(XX_FI(n))'))	XX_TD(`PF(XX_FI(n))'))
241XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,`F(XX_FI(n))'))	XX_TD(`PF(XX_FI(n)+12)'))
242XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,1))	XX_TD(`PA(1)'))
243XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,2))	XX_TD(`PA(2)'))
244XX_TR(XX_TD(XX_KEY(Ctrl,a) XX_KEY(,3))	XX_TD(`PA(3)'))
245XX_TR(XX_TD(XX_KEY(,PPAGE))	XX_TD(`Scroll(backward)'))
246XX_TR(XX_TD(XX_KEY(,NPAGE))	XX_TD(`Scroll(forward)'))',
247XX_PRODUCT,wc3270,
248`XX_TR(XX_TD(XX_KEY(Alt,1))	XX_TD(`PA(1)'))
249XX_TR(XX_TD(XX_KEY(Alt,2))	XX_TD(`PA(2)'))
250XX_TR(XX_TD(XX_KEY(Alt,3))	XX_TD(`PA(3)'))
251XX_TR(XX_TD(XX_KEY(Alt Ctrl,`]'))	XX_TD(`Key(0x1d)'))
252XX_TR(XX_TD(XX_KEY(Ctrl,`]'))	XX_TD(Escape()))
253XX_TR(XX_TD(XX_KEY(Alt,^))	XX_TD(Key(notsign)))
254XX_TR(XX_TD(XX_KEY(Ctrl,c))	XX_TD(Copy()))
255XX_TR(XX_TD(XX_KEY(Alt,k))	XX_TD(Keymap()))
256XX_TR(XX_TD(XX_KEY(Alt,l))	XX_TD(Redraw()))
257XX_TR(XX_TD(XX_KEY(Alt,m))	XX_TD(Compose()))
258XX_TR(XX_TD(XX_KEY(Alt,n))	XX_TD(Menu()))
259XX_TR(XX_TD(XX_KEY(Ctrl,p))	XX_TD(Paste()))
260XX_TR(XX_TD(XX_KEY(Alt,p))	XX_TD(PrintText()))
261XX_TR(XX_TD(XX_KEY(Ctrl,x))	XX_TD(Cut()))
262XX_TR(XX_TD(XX_KEY(,PRIOR))	XX_TD(`Scroll(backward)'))
263XX_TR(XX_TD(XX_KEY(,NEXT))	XX_TD(`Scroll(forward)'))
264XX_TR(XX_TD(XX_KEY(Shift,`F`'XX_FI(n)'))	XX_TD(`PF(XX_FI(n)+12)'))')
265XX_TE()
266XX_LP
267The base 3270-mode keymap adds:
268XX_LP
269XX_TS(2,l l.)
270XX_TR(XX_TD(Key)	XX_TD(Action))
271XX_T_()
272ifelse(XX_PRODUCT,c3270,
273`XX_TR(XX_TD(XX_KEY(Ctrl,c))	XX_TD(Clear()))
274XX_TR(XX_TD(XX_KEY(Ctrl,d))	XX_TD(Dup()))
275XX_TR(XX_TD(XX_KEY(Ctrl,f))	XX_TD(FieldMark()))
276XX_TR(XX_TD(XX_KEY(Ctrl,i))	XX_TD(Tab()))
277XX_TR(XX_TD(XX_KEY(Ctrl,l))	XX_TD(Redraw()))
278XX_TR(XX_TD(XX_KEY(Ctrl,r))	XX_TD(Reset()))
279XX_TR(XX_TD(XX_KEY(Ctrl,u))	XX_TD(DeleteField()))
280XX_TR(XX_TD(XX_KEY(,BackSpace))	XX_TD(BackSpace()))
281XX_TR(XX_TD(XX_KEY(,Return))	XX_TD(Enter()))
282XX_TR(XX_TD(XX_KEY(,Tab))	XX_TD(Tab()))
283XX_TR(XX_TD(XX_KEY(,Linefeed))	XX_TD(Newline()))
284XX_TR(XX_TD(XX_KEY(,BACKSPACE))	XX_TD(BackSpace()))
285XX_TR(XX_TD(XX_KEY(,DC))	XX_TD(Delete()))
286XX_TR(XX_TD(XX_KEY(,HOME))	XX_TD(Home()))
287XX_TR(XX_TD(XX_KEY(,IC))	XX_TD(ToggleInsert()))',
288XX_PRODUCT,wc3270,
289`XX_TR(XX_TD(XX_KEY(Ctrl,a))	XX_TD(Attn()))
290XX_TR(XX_TD(XX_KEY(Alt,a))	XX_TD(Attn()))
291XX_TR(XX_TD(XX_KEY(Alt,c))	XX_TD(Clear()))
292XX_TR(XX_TD(XX_KEY(Ctrl,d))	XX_TD(Dup()))
293XX_TR(XX_TD(XX_KEY(Alt,d))	XX_TD(Dup()))
294XX_TR(XX_TD(XX_KEY(Ctrl,f))	XX_TD(FieldMark()))
295XX_TR(XX_TD(XX_KEY(Alt,f))	XX_TD(FieldMark()))
296XX_TR(XX_TD(XX_KEY(Ctrl,h))	XX_TD(Erase()))
297XX_TR(XX_TD(XX_KEY(Alt,i))	XX_TD(Insert()))
298XX_TR(XX_TD(XX_KEY(Shift Ctrl,i))	XX_TD(BackTab()))
299XX_TR(XX_TD(XX_KEY(Ctrl,i))	XX_TD(Tab()))
300XX_TR(XX_TD(XX_KEY(Ctrl,j))	XX_TD(Newline()))
301XX_TR(XX_TD(XX_KEY(Ctrl,l))	XX_TD(Redraw()))
302XX_TR(XX_TD(XX_KEY(Ctrl,m))	XX_TD(Enter()))
303XX_TR(XX_TD(XX_KEY(Ctrl,r))	XX_TD(Reset()))
304XX_TR(XX_TD(XX_KEY(Alt,r))	XX_TD(Reset()))
305XX_TR(XX_TD(XX_KEY(Ctrl,u))	XX_TD(DeleteField()))
306XX_TR(XX_TD(XX_KEY(,INSERT))	XX_TD(ToggleInsert()))
307XX_TR(XX_TD(XX_KEY(Shift,TAB))	XX_TD(BackTab()))
308XX_TR(XX_TD(XX_KEY(,BACK))	XX_TD(Erase()))
309XX_TR(XX_TD(XX_KEY(Shift,END))	XX_TD(EraseEOF()))
310XX_TR(XX_TD(XX_KEY(,END))	XX_TD(FieldEnd()))
311XX_TR(XX_TD(XX_KEY(Ctrl,LEFT))	XX_TD(PreviousWord()))
312XX_TR(XX_TD(XX_KEY(Ctrl,RIGHT))	XX_TD(NextWord()))
313XX_TR(XX_TD(XX_KEY(Shift,LEFT))	XX_TD(SelectLeft()))
314XX_TR(XX_TD(XX_KEY(Shift,RIGHT))	XX_TD(SelectRight()))
315XX_TR(XX_TD(XX_KEY(Shift,UP))	XX_TD(SelectUp()))
316XX_TR(XX_TD(XX_KEY(Shift,DOWN))	XX_TD(SelectDown()))
317XX_TR(XX_TD(XX_KEY(,PRIOR))	XX_TD(`PF(7)'))
318XX_TR(XX_TD(XX_KEY(,NEXT))	XX_TD(`PF(8)'))')
319XX_TE()
320ifelse(XX_PRODUCT,c3270,
321`XX_SH(The Meta or Alt Key)
322Some keyboards do not have a XX_FB(Meta) key.
323Instead, they have an XX_FB(Alt) key.
324Sometimes this key acts as a proper
325XX_FB(Meta) key, that is, it is a modifier key that sets the high-order bit
326(0x80) in the code that is transmitted for each key.
327Other keyboards send a two-character sequence when
328the XX_FB(Alt) key is pressed with another key: the Escape character (0x1b),
329followed by the code for the other key.
330XX_LP
331The resource XX_FB(XX_PRODUCT.metaEscape) and the termcap XX_FB(km) attribute
332control how XX_FB(XX_PRODUCT) will interpret these sequences.
333When XX_FB(XX_PRODUCT.metaEscape) is set to XX_FB(true), or when
334XX_FB(XX_PRODUCT.metaEscape) is set to XX_FB(auto) and the termcap XX_FB(km)
335attribute is set, the keyboard is assumed to have a separate XX_FB(Meta) key.
336The Escape key can be used as an ordinary data key and has no special meaning.
337XX_LP
338When XX_FB(XX_PRODUCT.metaEscape) is set to XX_FB(true), or when
339XX_FB(XX_PRODUCT.metaEscape) is set to XX_FB(auto) and the termcap XX_FB(km)
340attribute is not set, the keyboard is assumed to use the Escape character
341as a prefix to indicate that the following character is supposed to have the
342high-order bit set.
343When XX_FB(XX_PRODUCT) sees an Escape character from the keyboard, it sets a short
344timeout.
345If another character arrives before the timeout expires, then XX_FB(XX_PRODUCT)
346will combine the two characters, setting the high-order bit of the second.
347In an event trace file, the combined character is listed as XX_FI(derived).
348In a keymap, only the combined character or the XX_FB(Meta) prefix may be used.
349The Escape key can still be used by itself, but only if there is a short pause
350before pressing another key.
351XX_LP
352The default value for XX_FB(XX_PRODUCT.metaEscape) is XX_FB(auto).')dnl
353