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