Mercurial > hg > early-roguelike
comparison srogue/mdport.c @ 86:8757a0593e6e
srogue: add arrow-key support.
This is a first attempt which may not be completely portable.
| author | John "Elwin" Edwards |
|---|---|
| date | Sat, 10 Aug 2013 17:43:58 -0700 |
| parents | |
| children | ea71ef31d9be |
comparison
equal
deleted
inserted
replaced
| 85:d852b8f088c5 | 86:8757a0593e6e |
|---|---|
| 1 /* | |
| 2 mdport.c - Machine Dependent Code | |
| 3 | |
| 4 Copyright (C) 2005-2008 Nicholas J. Kisseberth | |
| 5 All rights reserved. | |
| 6 | |
| 7 Redistribution and use in source and binary forms, with or without | |
| 8 modification, are permitted provided that the following conditions | |
| 9 are met: | |
| 10 1. Redistributions of source code must retain the above copyright | |
| 11 notice, this list of conditions and the following disclaimer. | |
| 12 2. Redistributions in binary form must reproduce the above copyright | |
| 13 notice, this list of conditions and the following disclaimer in the | |
| 14 documentation and/or other materials provided with the distribution. | |
| 15 3. Neither the name(s) of the author(s) nor the names of other contributors | |
| 16 may be used to endorse or promote products derived from this software | |
| 17 without specific prior written permission. | |
| 18 | |
| 19 THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTORS ``AS IS'' AND | |
| 20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 22 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTORS BE LIABLE | |
| 23 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 24 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
| 25 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
| 26 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
| 27 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
| 28 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
| 29 SUCH DAMAGE. | |
| 30 */ | |
| 31 | |
| 32 /* This is a temporary stub version of rogue5's mdport.c. It is only to make | |
| 33 * md_readchar() available until srogue is ported to autoconf. Then the | |
| 34 * whole file should work. | |
| 35 */ | |
| 36 | |
| 37 #include <stdlib.h> | |
| 38 #include <string.h> | |
| 39 | |
| 40 #if defined(_WIN32) | |
| 41 #include <Windows.h> | |
| 42 #include <Lmcons.h> | |
| 43 #include <io.h> | |
| 44 #include <conio.h> | |
| 45 #pragma warning( disable: 4201 ) | |
| 46 #include <shlobj.h> | |
| 47 #pragma warning( default: 4201 ) | |
| 48 #include <Shlwapi.h> | |
| 49 #undef MOUSE_MOVED | |
| 50 #endif | |
| 51 | |
| 52 #include <sys/types.h> | |
| 53 | |
| 54 #include <curses.h> /* AIX requires curses.h be included before term.h */ | |
| 55 | |
| 56 #include <ctype.h> | |
| 57 #include "rogue.h" | |
| 58 | |
| 59 /* | |
| 60 Cursor/Keypad Support | |
| 61 | |
| 62 Sadly Cursor/Keypad support is less straightforward than it should be. | |
| 63 | |
| 64 The various terminal emulators/consoles choose to differentiate the | |
| 65 cursor and keypad keys (with modifiers) in different ways (if at all!). | |
| 66 Furthermore they use different code set sequences for each key only | |
| 67 a subset of which the various curses libraries recognize. Partly due | |
| 68 to incomplete termcap/terminfo entries and partly due to inherent | |
| 69 limitations of those terminal capability databases. | |
| 70 | |
| 71 I give curses first crack at decoding the sequences. If it fails to decode | |
| 72 it we check for common ESC-prefixed sequences. | |
| 73 | |
| 74 All cursor/keypad results are translated into standard rogue movement | |
| 75 commands. | |
| 76 | |
| 77 Unmodified keys are translated to walk commands: hjklyubn | |
| 78 Modified (shift,control,alt) are translated to run commands: HJKLYUBN | |
| 79 | |
| 80 Console and supported (differentiated) keys | |
| 81 Interix: Cursor Keys, Keypad, Ctl-Keypad | |
| 82 Cygwin: Cursor Keys, Keypad, Alt-Cursor Keys | |
| 83 MSYS: Cursor Keys, Keypad, Ctl-Cursor Keys, Ctl-Keypad | |
| 84 Win32: Cursor Keys, Keypad, Ctl/Shift/Alt-Cursor Keys, Ctl/Alt-Keypad | |
| 85 DJGPP: Cursor Keys, Keypad, Ctl/Shift/Alt-Cursor Keys, Ctl/Alt-Keypad | |
| 86 | |
| 87 Interix Console (raw, ncurses) | |
| 88 ============================== | |
| 89 normal shift ctrl alt | |
| 90 ESC [D, ESC F^, ESC [D, ESC [D /# Left #/ | |
| 91 ESC [C, ESC F$, ESC [C, ESC [C /# Right #/ | |
| 92 ESC [A, ESC F-, local win, ESC [A /# Up #/ | |
| 93 ESC [B, ESC F+, local win, ESC [B /# Down #/ | |
| 94 ESC [H, ESC [H, ESC [H, ESC [H /# Home #/ | |
| 95 ESC [S, local win, ESC [S, ESC [S /# Page Up #/ | |
| 96 ESC [T, local win, ESC [T, ESC [T /# Page Down #/ | |
| 97 ESC [U, ESC [U, ESC [U, ESC [U /# End #/ | |
| 98 ESC [D, ESC F^, ESC [D, O /# Keypad Left #/ | |
| 99 ESC [C, ESC F$, ESC [C, O /# Keypad Right #/ | |
| 100 ESC [A, ESC [A, ESC [-1, O /# Keypad Up #/ | |
| 101 ESC [B, ESC [B, ESC [-2, O /# Keypad Down #/ | |
| 102 ESC [H, ESC [H, ESC [-263, O /# Keypad Home #/ | |
| 103 ESC [S, ESC [S, ESC [-19, O /# Keypad PgUp #/ | |
| 104 ESC [T, ESC [T, ESC [-20, O /# Keypad PgDn #/ | |
| 105 ESC [U, ESC [U, ESC [-21, O /# Keypad End #/ | |
| 106 nothing, nothing, nothing, O /# Kaypad 5 #/ | |
| 107 | |
| 108 Interix Console (term=interix, ncurses) | |
| 109 ============================== | |
| 110 KEY_LEFT, ESC F^, KEY_LEFT, KEY_LEFT /# Left #/ | |
| 111 KEY_RIGHT, ESC F$, KEY_RIGHT, KEY_RIGHT /# Right #/ | |
| 112 KEY_UP, 0x146, local win, KEY_UP /# Up #/ | |
| 113 KEY_DOWN, 0x145, local win, KEY_DOWN /# Down #/ | |
| 114 ESC [H, ESC [H, ESC [H, ESC [H /# Home #/ | |
| 115 KEY_PPAGE, local win, KEY_PPAGE, KEY_PPAGE /# Page Up #/ | |
| 116 KEY_NPAGE, local win, KEY_NPAGE, KEY_NPAGE /# Page Down #/ | |
| 117 KEY_LL, KEY_LL, KEY_LL, KEY_LL /# End #/ | |
| 118 KEY_LEFT, ESC F^, ESC [-4, O /# Keypad Left #/ | |
| 119 KEY_RIGHT, ESC F$, ESC [-3, O /# Keypad Right #/ | |
| 120 KEY_UP, KEY_UP, ESC [-1, O /# Keypad Up #/ | |
| 121 KEY_DOWN, KEY_DOWN, ESC [-2, O /# Keypad Down #/ | |
| 122 ESC [H, ESC [H, ESC [-263, O /# Keypad Home #/ | |
| 123 KEY_PPAGE, KEY_PPAGE, ESC [-19, O /# Keypad PgUp #/ | |
| 124 KEY_NPAGE, KEY_NPAGE, ESC [-20, O /# Keypad PgDn #/ | |
| 125 KEY_LL, KEY_LL, ESC [-21, O /# Keypad End #/ | |
| 126 nothing, nothing, nothing, O /# Keypad 5 #/ | |
| 127 | |
| 128 Cygwin Console (raw, ncurses) | |
| 129 ============================== | |
| 130 normal shift ctrl alt | |
| 131 ESC [D, ESC [D, ESC [D, ESC ESC [D /# Left #/ | |
| 132 ESC [C, ESC [C, ESC [C, ESC ESC [C /# Rght #/ | |
| 133 ESC [A, ESC [A, ESC [A, ESC ESC [A /# Up #/ | |
| 134 ESC [B, ESC [B, ESC [B, ESC ESC [B /# Down #/ | |
| 135 ESC [1~, ESC [1~, ESC [1~, ESC ESC [1~ /# Home #/ | |
| 136 ESC [5~, ESC [5~, ESC [5~, ESC ESC [5~ /# Page Up #/ | |
| 137 ESC [6~, ESC [6~, ESC [6~, ESC ESC [6~ /# Page Down #/ | |
| 138 ESC [4~, ESC [4~, ESC [4~, ESC ESC [4~ /# End #/ | |
| 139 ESC [D, ESC [D, ESC [D, ESC ESC [D,O /# Keypad Left #/ | |
| 140 ESC [C, ESC [C, ESC [C, ESC ESC [C,O /# Keypad Right #/ | |
| 141 ESC [A, ESC [A, ESC [A, ESC ESC [A,O /# Keypad Up #/ | |
| 142 ESC [B, ESC [B, ESC [B, ESC ESC [B,O /# Keypad Down #/ | |
| 143 ESC [1~, ESC [1~, ESC [1~, ESC ESC [1~,O /# Keypad Home #/ | |
| 144 ESC [5~, ESC [5~, ESC [5~, ESC ESC [5~,O /# Keypad PgUp #/ | |
| 145 ESC [6~, ESC [6~, ESC [6~, ESC ESC [6~,O /# Keypad PgDn #/ | |
| 146 ESC [4~, ESC [4~, ESC [4~, ESC ESC [4~,O /# Keypad End #/ | |
| 147 ESC [-71, nothing, nothing, O /# Keypad 5 #/ | |
| 148 | |
| 149 Cygwin Console (term=cygwin, ncurses) | |
| 150 ============================== | |
| 151 KEY_LEFT, KEY_LEFT, KEY_LEFT, ESC-260 /# Left #/ | |
| 152 KEY_RIGHT, KEY_RIGHT, KEY_RIGHT, ESC-261 /# Rght #/ | |
| 153 KEY_UP, KEY_UP, KEY_UP, ESC-259 /# Up #/ | |
| 154 KEY_DOWN, KEY_DOWN, KEY_DOWN, ESC-258 /# Down #/ | |
| 155 KEY_HOME, KEY_HOME, KEY_HOME, ESC-262 /# Home #/ | |
| 156 KEY_PPAGE, KEY_PPAGE, KEY_PPAGE, ESC-339 /# Page Up #/ | |
| 157 KEY_NPAGE, KEY_NPAGE, KEY_NPAGE, ESC-338 /# Page Down #/ | |
| 158 KEY_END, KEY_END, KEY_END, ESC-360 /# End #/ | |
| 159 KEY_LEFT, KEY_LEFT, KEY_LEFT, ESC-260,O /# Keypad Left #/ | |
| 160 KEY_RIGHT, KEY_RIGHT, KEY_RIGHT, ESC-261,O /# Keypad Right #/ | |
| 161 KEY_UP, KEY_UP, KEY_UP, ESC-259,O /# Keypad Up #/ | |
| 162 KEY_DOWN, KEY_DOWN, KEY_DOWN, ESC-258,O /# Keypad Down #/ | |
| 163 KEY_HOME, KEY_HOME, KEY_HOME, ESC-262,O /# Keypad Home #/ | |
| 164 KEY_PPAGE, KEY_PPAGE, KEY_PPAGE, ESC-339,O /# Keypad PgUp #/ | |
| 165 KEY_NPAGE, KEY_NPAGE, KEY_NPAGE, ESC-338,O /# Keypad PgDn #/ | |
| 166 KEY_END, KEY_END, KEY_END, ESC-360,O /# Keypad End #/ | |
| 167 ESC [G, nothing, nothing, O /# Keypad 5 #/ | |
| 168 | |
| 169 MSYS Console (raw, ncurses) | |
| 170 ============================== | |
| 171 normal shift ctrl alt | |
| 172 ESC OD, ESC [d, ESC Od nothing /# Left #/ | |
| 173 ESC OE, ESC [e, ESC Oe, nothing /# Right #/ | |
| 174 ESC OA, ESC [a, ESC Oa, nothing /# Up #/ | |
| 175 ESC OB, ESC [b, ESC Ob, nothing /# Down #/ | |
| 176 ESC [7~, ESC [7$, ESC [7^, nothing /# Home #/ | |
| 177 ESC [5~, local window, ESC [5^, nothing /# Page Up #/ | |
| 178 ESC [6~, local window, ESC [6^, nothing /# Page Down #/ | |
| 179 ESC [8~, ESC [8$, ESC [8^, nothing /# End #/ | |
| 180 ESC OD, ESC [d, ESC Od O /# Keypad Left #/ | |
| 181 ESC OE, ESC [c, ESC Oc, O /# Keypad Right #/ | |
| 182 ESC OA, ESC [a, ESC Oa, O /# Keypad Up #/ | |
| 183 ESC OB, ESC [b, ESC Ob, O /# Keypad Down #/ | |
| 184 ESC [7~, ESC [7$, ESC [7^, O /# Keypad Home #/ | |
| 185 ESC [5~, local window, ESC [5^, O /# Keypad PgUp #/ | |
| 186 ESC [6~, local window, ESC [6^, O /# Keypad PgDn #/ | |
| 187 ESC [8~, ESC [8$, ESC [8^, O /# Keypad End #/ | |
| 188 11, 11, 11, O /# Keypad 5 #/ | |
| 189 | |
| 190 MSYS Console (term=rxvt, ncurses) | |
| 191 ============================== | |
| 192 normal shift ctrl alt | |
| 193 KEY_LEFT, KEY_SLEFT, 514 nothing /# Left #/ | |
| 194 KEY_RIGHT, KEY_SRIGHT, 516, nothing /# Right #/ | |
| 195 KEY_UP, 518, 519, nothing /# Up #/ | |
| 196 KEY_DOWN, 511, 512, nothing /# Down #/ | |
| 197 KEY_HOME, KEY_SHOME, ESC [7^, nothing /# Home #/ | |
| 198 KEY_PPAGE, local window, ESC [5^, nothing /# Page Up #/ | |
| 199 KEY_NPAGE, local window, ESC [6^, nothing /# Page Down #/ | |
| 200 KEY_END, KEY_SEND, KEY_EOL, nothing /# End #/ | |
| 201 KEY_LEFT, KEY_SLEFT, 514 O /# Keypad Left #/ | |
| 202 KEY_RIGHT, KEY_SRIGHT, 516, O /# Keypad Right #/ | |
| 203 KEY_UP, 518, 519, O /# Keypad Up #/ | |
| 204 KEY_DOWN, 511, 512, O /# Keypad Down #/ | |
| 205 KEY_HOME, KEY_SHOME, ESC [7^, O /# Keypad Home #/ | |
| 206 KEY_PPAGE, local window, ESC [5^, O /# Keypad PgUp #/ | |
| 207 KEY_NPAGE, local window, ESC [6^, O /# Keypad PgDn #/ | |
| 208 KEY_END, KEY_SEND, KEY_EOL, O /# Keypad End #/ | |
| 209 11, 11, 11, O /# Keypad 5 #/ | |
| 210 | |
| 211 Win32 Console (raw, pdcurses) | |
| 212 DJGPP Console (raw, pdcurses) | |
| 213 ============================== | |
| 214 normal shift ctrl alt | |
| 215 260, 391, 443, 493 /# Left #/ | |
| 216 261, 400, 444, 492 /# Right #/ | |
| 217 259, 547, 480, 490 /# Up #/ | |
| 218 258, 548, 481, 491 /# Down #/ | |
| 219 262, 388, 447, 524 /# Home #/ | |
| 220 339, 396, 445, 526 /# Page Up #/ | |
| 221 338, 394, 446, 520 /# Page Down #/ | |
| 222 358, 384, 448, 518 /# End #/ | |
| 223 452, 52('4'), 511, 521 /# Keypad Left #/ | |
| 224 454, 54('6'), 513, 523 /# Keypad Right #/ | |
| 225 450, 56('8'), 515, 525 /# Keypad Up #/ | |
| 226 456, 50('2'), 509, 519 /# Keypad Down #/ | |
| 227 449, 55('7'), 514, 524 /# Keypad Home #/ | |
| 228 451, 57('9'), 516, 526 /# Keypad PgUp #/ | |
| 229 457, 51('3'), 510, 520 /# Keypad PgDn #/ | |
| 230 455, 49('1'), 508, 518 /# Keypad End #/ | |
| 231 453, 53('5'), 512, 522 /# Keypad 5 #/ | |
| 232 | |
| 233 Win32 Console (pdcurses, MSVC/MingW32) | |
| 234 DJGPP Console (pdcurses) | |
| 235 ============================== | |
| 236 normal shift ctrl alt | |
| 237 KEY_LEFT, KEY_SLEFT, CTL_LEFT, ALT_LEFT /# Left #/ | |
| 238 KEY_RIGHT, KEY_SRIGHT, CTL_RIGHT, ALT_RIGHT /# Right #/ | |
| 239 KEY_UP, KEY_SUP, CTL_UP, ALT_UP /# Up #/ | |
| 240 KEY_DOWN, KEY_SDOWN, CTL_DOWN, ALT_DOWN /# Down #/ | |
| 241 KEY_HOME, KEY_SHOME, CTL_HOME, ALT_HOME /# Home #/ | |
| 242 KEY_PPAGE, KEY_SPREVIOUS, CTL_PGUP, ALT_PGUP /# Page Up #/ | |
| 243 KEY_NPAGE, KEY_SNEXTE, CTL_PGDN, ALT_PGDN /# Page Down #/ | |
| 244 KEY_END, KEY_SEND, CTL_END, ALT_END /# End #/ | |
| 245 KEY_B1, 52('4'), CTL_PAD4, ALT_PAD4 /# Keypad Left #/ | |
| 246 KEY_B3, 54('6'), CTL_PAD6, ALT_PAD6 /# Keypad Right #/ | |
| 247 KEY_A2, 56('8'), CTL_PAD8, ALT_PAD8 /# Keypad Up #/ | |
| 248 KEY_C2, 50('2'), CTL_PAD2, ALT_PAD2 /# Keypad Down #/ | |
| 249 KEY_A1, 55('7'), CTL_PAD7, ALT_PAD7 /# Keypad Home #/ | |
| 250 KEY_A3, 57('9'), CTL_PAD9, ALT_PAD9 /# Keypad PgUp #/ | |
| 251 KEY_C3, 51('3'), CTL_PAD3, ALT_PAD3 /# Keypad PgDn #/ | |
| 252 KEY_C1, 49('1'), CTL_PAD1, ALT_PAD1 /# Keypad End #/ | |
| 253 KEY_B2, 53('5'), CTL_PAD5, ALT_PAD5 /# Keypad 5 #/ | |
| 254 | |
| 255 Windows Telnet (raw) | |
| 256 ============================== | |
| 257 normal shift ctrl alt | |
| 258 ESC [D, ESC [D, ESC [D, ESC [D /# Left #/ | |
| 259 ESC [C, ESC [C, ESC [C, ESC [C /# Right #/ | |
| 260 ESC [A, ESC [A, ESC [A, ESC [A /# Up #/ | |
| 261 ESC [B, ESC [B, ESC [B, ESC [B /# Down #/ | |
| 262 ESC [1~, ESC [1~, ESC [1~, ESC [1~ /# Home #/ | |
| 263 ESC [5~, ESC [5~, ESC [5~, ESC [5~ /# Page Up #/ | |
| 264 ESC [6~, ESC [6~, ESC [6~, ESC [6~ /# Page Down #/ | |
| 265 ESC [4~, ESC [4~, ESC [4~, ESC [4~ /# End #/ | |
| 266 ESC [D, ESC [D, ESC [D, ESC [D /# Keypad Left #/ | |
| 267 ESC [C, ESC [C, ESC [C, ESC [C /# Keypad Right #/ | |
| 268 ESC [A, ESC [A, ESC [A, ESC [A /# Keypad Up #/ | |
| 269 ESC [B, ESC [B, ESC [B, ESC [B /# Keypad Down #/ | |
| 270 ESC [1~, ESC [1~, ESC [1~, ESC [1~ /# Keypad Home #/ | |
| 271 ESC [5~, ESC [5~, ESC [5~, ESC [5~ /# Keypad PgUp #/ | |
| 272 ESC [6~, ESC [6~, ESC [6~, ESC [6~ /# Keypad PgDn #/ | |
| 273 ESC [4~, ESC [4~, ESC [4~, ESC [4~ /# Keypad End #/ | |
| 274 nothing, nothing, nothing, nothing /# Keypad 5 #/ | |
| 275 | |
| 276 Windows Telnet (term=xterm) | |
| 277 ============================== | |
| 278 normal shift ctrl alt | |
| 279 KEY_LEFT, KEY_LEFT, KEY_LEFT, KEY_LEFT /# Left #/ | |
| 280 KEY_RIGHT, KEY_RIGHT, KEY_RIGHT, KEY_RIGHT /# Right #/ | |
| 281 KEY_UP, KEY_UP, KEY_UP, KEY_UP /# Up #/ | |
| 282 KEY_DOWN, KEY_DOWN, KEY_DOWN, KEY_DOWN /# Down #/ | |
| 283 ESC [1~, ESC [1~, ESC [1~, ESC [1~ /# Home #/ | |
| 284 KEY_PPAGE, KEY_PPAGE, KEY_PPAGE, KEY_PPAGE /# Page Up #/ | |
| 285 KEY_NPAGE, KEY_NPAGE, KEY_NPAGE, KEY_NPAGE /# Page Down #/ | |
| 286 ESC [4~, ESC [4~, ESC [4~, ESC [4~ /# End #/ | |
| 287 KEY_LEFT, KEY_LEFT, KEY_LEFT, O /# Keypad Left #/ | |
| 288 KEY_RIGHT, KEY_RIGHT, KEY_RIGHT, O /# Keypad Right #/ | |
| 289 KEY_UP, KEY_UP, KEY_UP, O /# Keypad Up #/ | |
| 290 KEY_DOWN, KEY_DOWN, KEY_DOWN, O /# Keypad Down #/ | |
| 291 ESC [1~, ESC [1~, ESC [1~, ESC [1~ /# Keypad Home #/ | |
| 292 KEY_PPAGE, KEY_PPAGE, KEY_PPAGE, KEY_PPAGE /# Keypad PgUp #/ | |
| 293 KEY_NPAGE, KEY_NPAGE, KEY_NPAGE, KEY_NPAGE /# Keypad PgDn #/ | |
| 294 ESC [4~, ESC [4~, ESC [4~, O /# Keypad End #/ | |
| 295 ESC [-71, nothing, nothing, O /# Keypad 5 #/ | |
| 296 | |
| 297 PuTTY | |
| 298 ============================== | |
| 299 normal shift ctrl alt | |
| 300 ESC [D, ESC [D, ESC OD, ESC [D /# Left #/ | |
| 301 ESC [C, ESC [C, ESC OC, ESC [C /# Right #/ | |
| 302 ESC [A, ESC [A, ESC OA, ESC [A /# Up #/ | |
| 303 ESC [B, ESC [B, ESC OB, ESC [B /# Down #/ | |
| 304 ESC [1~, ESC [1~, local win, ESC [1~ /# Home #/ | |
| 305 ESC [5~, local win, local win, ESC [5~ /# Page Up #/ | |
| 306 ESC [6~, local win, local win, ESC [6~ /# Page Down #/ | |
| 307 ESC [4~, ESC [4~, local win, ESC [4~ /# End #/ | |
| 308 ESC [D, ESC [D, ESC [D, O /# Keypad Left #/ | |
| 309 ESC [C, ESC [C, ESC [C, O /# Keypad Right #/ | |
| 310 ESC [A, ESC [A, ESC [A, O /# Keypad Up #/ | |
| 311 ESC [B, ESC [B, ESC [B, O /# Keypad Down #/ | |
| 312 ESC [1~, ESC [1~, ESC [1~, O /# Keypad Home #/ | |
| 313 ESC [5~, ESC [5~, ESC [5~, O /# Keypad PgUp #/ | |
| 314 ESC [6~, ESC [6~, ESC [6~, O /# Keypad PgDn #/ | |
| 315 ESC [4~, ESC [4~, ESC [4~, O /# Keypad End #/ | |
| 316 nothing, nothing, nothing, O /# Keypad 5 #/ | |
| 317 | |
| 318 PuTTY | |
| 319 ============================== | |
| 320 normal shift ctrl alt | |
| 321 KEY_LEFT, KEY_LEFT, ESC OD, ESC KEY_LEFT /# Left #/ | |
| 322 KEY_RIGHT KEY_RIGHT, ESC OC, ESC KEY_RIGHT /# Right #/ | |
| 323 KEY_UP, KEY_UP, ESC OA, ESC KEY_UP /# Up #/ | |
| 324 KEY_DOWN, KEY_DOWN, ESC OB, ESC KEY_DOWN /# Down #/ | |
| 325 ESC [1~, ESC [1~, local win, ESC ESC [1~ /# Home #/ | |
| 326 KEY_PPAGE local win, local win, ESC KEY_PPAGE /# Page Up #/ |
