keymap.h
上传用户:gddssl
上传日期:2007-01-06
资源大小:1003k
文件大小:12k
源码类别:

编辑器/阅读器

开发平台:

DOS

  1. /* vi:set ts=8 sts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  */
  8. #define K_CCIRCM 0x1e /* control circumflex */
  9. /*
  10.  * For MSDOS some keys produce codes larger than 0xff. They are split into two
  11.  * chars, the first one is K_NUL (same value used in term.h).
  12.  */
  13. #define K_NUL (0xce)     /* for MSDOS: special key follows */
  14. /*
  15.  * Keycode definitions for special keys.
  16.  *
  17.  * Any special key code sequences are replaced by these codes.
  18.  */
  19. /*
  20.  * K_SPECIAL is the first byte of a special key code and is always followed by
  21.  * two bytes.
  22.  * The second byte can have any value. ASCII is used for normal termcap
  23.  * entries, 0x80 and higher for special keys, see below.
  24.  * The third byte is guaranteed to be between 0x02 and 0x7f.
  25.  */
  26. #define K_SPECIAL     (0x80)
  27. /*
  28.  * characters 0x0000 - 0x00ff are "normal"
  29.  * characters 0x0100 - 0x01ff are used for abbreviations
  30.  * characters 0x0200 - 0xffff are special key codes
  31.  */
  32. #define IS_SPECIAL(c)     ((c) >= 0x200)
  33. #define IS_ABBR(c)     ((c) >= 0x100 && (c) < 0x200)
  34. #define ABBR_OFF     0x100
  35. /*
  36.  * NUL cannot be in the input string, therefore it is replaced by
  37.  * K_SPECIAL   KS_ZERO K_FILLER
  38.  */
  39. #define KS_ZERO     255
  40. /*
  41.  * K_SPECIAL cannot be in the input string, therefore it is replaced by
  42.  * K_SPECIAL   KS_SPECIAL K_FILLER
  43.  */
  44. #define KS_SPECIAL     254
  45. /*
  46.  * KS_EXTRA is used for keys that have no termcap name
  47.  * K_SPECIAL   KS_EXTRA KE_xxx
  48.  */
  49. #define KS_EXTRA     253
  50. /*
  51.  * KS_MODIFIER is used when a modifier is given for a (special) key
  52.  * K_SPECIAL   KS_MODIFIER bitmask
  53.  */
  54. #define KS_MODIFIER     252
  55. /*
  56.  * These are used for the GUI
  57.  * K_SPECIAL   KS_xxx K_FILLER
  58.  */
  59. #define KS_MOUSE     251
  60. #define KS_MENU     250
  61. #define KS_SCROLLBAR     249
  62. #define KS_HORIZ_SCROLLBAR  248
  63. /*
  64.  * These are used for DEC mouse
  65.  */
  66. #define KS_NETTERM_MOUSE    247
  67. #define KS_DEC_MOUSE     246
  68. /*
  69.  * Used for switching Select mode back on after a mapping or menu.
  70.  */
  71. #define KS_SELECT     245
  72. #define K_SELECT_STRING     (char_u *)"200365X"
  73. /*
  74.  * Used for tearing off a menu.
  75.  */
  76. #define KS_TEAROFF     244
  77. /*
  78.  * Filler used after KS_SPECIAL and others
  79.  */
  80. #define K_FILLER     ('X')
  81. /*
  82.  * translation of three byte code "K_SPECIAL a b" into int "K_xxx" and back
  83.  */
  84. #define TERMCAP2KEY(a, b)   ((a) + ((int)(b) << 8))
  85. #define KEY2TERMCAP0(x)     ((x) & 0xff)
  86. #define KEY2TERMCAP1(x)     (((unsigned)(x) >> 8) & 0xff)
  87. /*
  88.  * get second or third byte when translating special key code into three bytes
  89.  */
  90. #define K_SECOND(c) ((c) == K_SPECIAL ? KS_SPECIAL : (c) == NUL ? KS_ZERO : KEY2TERMCAP0(c))
  91. #define K_THIRD(c) (((c) == K_SPECIAL || (c) == NUL) ? K_FILLER : KEY2TERMCAP1(c))
  92. /*
  93.  * get single int code from second byte after K_SPECIAL
  94.  */
  95. #define TO_SPECIAL(a, b)    ((a) == KS_SPECIAL ? K_SPECIAL : (a) == KS_ZERO ? K_ZERO : TERMCAP2KEY(a, b))
  96. /*
  97.  * Codes for keys that do not have a termcap name.
  98.  *
  99.  * K_SPECIAL KS_EXTRA KE_xxx
  100.  */
  101. enum key_extra
  102. {
  103.     KE_NAME = 3, /* name of this terminal entry */
  104.     KE_S_UP, /* shift-up */
  105.     KE_S_DOWN, /* shift-down */
  106.     KE_S_F1, /* shifted function keys */
  107.     KE_S_F2,
  108.     KE_S_F3,
  109.     KE_S_F4,
  110.     KE_S_F5,
  111.     KE_S_F6,
  112.     KE_S_F7,
  113.     KE_S_F8,
  114.     KE_S_F9,
  115.     KE_S_F10,
  116.     KE_S_F11,
  117.     KE_S_F12,
  118.     KE_S_F13,
  119.     KE_S_F14,
  120.     KE_S_F15,
  121.     KE_S_F16,
  122.     KE_S_F17,
  123.     KE_S_F18,
  124.     KE_S_F19,
  125.     KE_S_F20,
  126.     KE_S_F21,
  127.     KE_S_F22,
  128.     KE_S_F23,
  129.     KE_S_F24,
  130.     KE_S_F25,
  131.     KE_S_F26,
  132.     KE_S_F27,
  133.     KE_S_F28,
  134.     KE_S_F29,
  135.     KE_S_F30,
  136.     KE_S_F31,
  137.     KE_S_F32,
  138.     KE_S_F33,
  139.     KE_S_F34,
  140.     KE_S_F35,
  141.     KE_MOUSE, /* mouse event start */
  142. /*
  143.  * Symbols for pseudo keys which are translated from the real key symbols
  144.  * above.
  145.  */
  146.     KE_LEFTMOUSE, /* Left mouse button click */
  147.     KE_LEFTDRAG, /* Drag with left mouse button down */
  148.     KE_LEFTRELEASE, /* Left mouse button release */
  149.     KE_MIDDLEMOUSE, /* Middle mouse button click */
  150.     KE_MIDDLEDRAG, /* Drag with middle mouse button down */
  151.     KE_MIDDLERELEASE, /* Middle mouse button release */
  152.     KE_RIGHTMOUSE, /* Right mouse button click */
  153.     KE_RIGHTDRAG, /* Drag with right mouse button down */
  154.     KE_RIGHTRELEASE, /* Right mouse button release */
  155.     KE_IGNORE, /* Ignored mouse drag/release */
  156.     KE_TAB, /* unshifted TAB key */
  157.     KE_S_TAB, /* shifted TAB key */
  158.     KE_SNIFF, /* SNiFF+ input waiting */
  159.     KE_XF1, /* extra vt100 function keys for xterm */
  160.     KE_XF2,
  161.     KE_XF3,
  162.     KE_XF4
  163. };
  164. /*
  165.  * the three byte codes are replaced with the following int when using vgetc()
  166.  */
  167. #define K_ZERO TERMCAP2KEY(KS_ZERO, K_FILLER)
  168. #define K_UP TERMCAP2KEY('k', 'u')
  169. #define K_DOWN TERMCAP2KEY('k', 'd')
  170. #define K_LEFT TERMCAP2KEY('k', 'l')
  171. #define K_RIGHT TERMCAP2KEY('k', 'r')
  172. #define K_S_UP TERMCAP2KEY(KS_EXTRA, KE_S_UP)
  173. #define K_S_DOWN TERMCAP2KEY(KS_EXTRA, KE_S_DOWN)
  174. #define K_S_LEFT TERMCAP2KEY('#', '4')
  175. #define K_S_RIGHT TERMCAP2KEY('%', 'i')
  176. #define K_S_HOME TERMCAP2KEY('#', '2')
  177. #define K_S_END TERMCAP2KEY('*', '7')
  178. #define K_TAB TERMCAP2KEY(KS_EXTRA, KE_TAB)
  179. #define K_S_TAB TERMCAP2KEY(KS_EXTRA, KE_S_TAB)
  180. /* extra set of function keys F1-F4, for vt100 compatible xterm */
  181. #define K_XF1 TERMCAP2KEY(KS_EXTRA, KE_XF1)
  182. #define K_XF2 TERMCAP2KEY(KS_EXTRA, KE_XF2)
  183. #define K_XF3 TERMCAP2KEY(KS_EXTRA, KE_XF3)
  184. #define K_XF4 TERMCAP2KEY(KS_EXTRA, KE_XF4)
  185. #define K_F1 TERMCAP2KEY('k', '1') /* function keys */
  186. #define K_F2 TERMCAP2KEY('k', '2')
  187. #define K_F3 TERMCAP2KEY('k', '3')
  188. #define K_F4 TERMCAP2KEY('k', '4')
  189. #define K_F5 TERMCAP2KEY('k', '5')
  190. #define K_F6 TERMCAP2KEY('k', '6')
  191. #define K_F7 TERMCAP2KEY('k', '7')
  192. #define K_F8 TERMCAP2KEY('k', '8')
  193. #define K_F9 TERMCAP2KEY('k', '9')
  194. #define K_F10 TERMCAP2KEY('k', ';')
  195. #define K_F11 TERMCAP2KEY('F', '1')
  196. #define K_F12 TERMCAP2KEY('F', '2')
  197. #define K_F13 TERMCAP2KEY('F', '3')
  198. #define K_F14 TERMCAP2KEY('F', '4')
  199. #define K_F15 TERMCAP2KEY('F', '5')
  200. #define K_F16 TERMCAP2KEY('F', '6')
  201. #define K_F17 TERMCAP2KEY('F', '7')
  202. #define K_F18 TERMCAP2KEY('F', '8')
  203. #define K_F19 TERMCAP2KEY('F', '9')
  204. #define K_F20 TERMCAP2KEY('F', 'A')
  205. #define K_F21 TERMCAP2KEY('F', 'B')
  206. #define K_F22 TERMCAP2KEY('F', 'C')
  207. #define K_F23 TERMCAP2KEY('F', 'D')
  208. #define K_F24 TERMCAP2KEY('F', 'E')
  209. #define K_F25 TERMCAP2KEY('F', 'F')
  210. #define K_F26 TERMCAP2KEY('F', 'G')
  211. #define K_F27 TERMCAP2KEY('F', 'H')
  212. #define K_F28 TERMCAP2KEY('F', 'I')
  213. #define K_F29 TERMCAP2KEY('F', 'J')
  214. #define K_F30 TERMCAP2KEY('F', 'K')
  215. #define K_F31 TERMCAP2KEY('F', 'L')
  216. #define K_F32 TERMCAP2KEY('F', 'M')
  217. #define K_F33 TERMCAP2KEY('F', 'N')
  218. #define K_F34 TERMCAP2KEY('F', 'O')
  219. #define K_F35 TERMCAP2KEY('F', 'P')
  220. #define K_S_F1 TERMCAP2KEY(KS_EXTRA, KE_S_F1) /* shifted func. keys */
  221. #define K_S_F2 TERMCAP2KEY(KS_EXTRA, KE_S_F2)
  222. #define K_S_F3 TERMCAP2KEY(KS_EXTRA, KE_S_F3)
  223. #define K_S_F4 TERMCAP2KEY(KS_EXTRA, KE_S_F4)
  224. #define K_S_F5 TERMCAP2KEY(KS_EXTRA, KE_S_F5)
  225. #define K_S_F6 TERMCAP2KEY(KS_EXTRA, KE_S_F6)
  226. #define K_S_F7 TERMCAP2KEY(KS_EXTRA, KE_S_F7)
  227. #define K_S_F8 TERMCAP2KEY(KS_EXTRA, KE_S_F8)
  228. #define K_S_F9 TERMCAP2KEY(KS_EXTRA, KE_S_F9)
  229. #define K_S_F10 TERMCAP2KEY(KS_EXTRA, KE_S_F10)
  230. #define K_S_F11 TERMCAP2KEY(KS_EXTRA, KE_S_F11)
  231. #define K_S_F12 TERMCAP2KEY(KS_EXTRA, KE_S_F12)
  232. #define K_S_F13 TERMCAP2KEY(KS_EXTRA, KE_S_F13)
  233. #define K_S_F14 TERMCAP2KEY(KS_EXTRA, KE_S_F14)
  234. #define K_S_F15 TERMCAP2KEY(KS_EXTRA, KE_S_F15)
  235. #define K_S_F16 TERMCAP2KEY(KS_EXTRA, KE_S_F16)
  236. #define K_S_F17 TERMCAP2KEY(KS_EXTRA, KE_S_F17)
  237. #define K_S_F18 TERMCAP2KEY(KS_EXTRA, KE_S_F18)
  238. #define K_S_F19 TERMCAP2KEY(KS_EXTRA, KE_S_F19)
  239. #define K_S_F20 TERMCAP2KEY(KS_EXTRA, KE_S_F20)
  240. #define K_S_F21 TERMCAP2KEY(KS_EXTRA, KE_S_F21)
  241. #define K_S_F22 TERMCAP2KEY(KS_EXTRA, KE_S_F22)
  242. #define K_S_F23 TERMCAP2KEY(KS_EXTRA, KE_S_F23)
  243. #define K_S_F24 TERMCAP2KEY(KS_EXTRA, KE_S_F24)
  244. #define K_S_F25 TERMCAP2KEY(KS_EXTRA, KE_S_F25)
  245. #define K_S_F26 TERMCAP2KEY(KS_EXTRA, KE_S_F26)
  246. #define K_S_F27 TERMCAP2KEY(KS_EXTRA, KE_S_F27)
  247. #define K_S_F28 TERMCAP2KEY(KS_EXTRA, KE_S_F28)
  248. #define K_S_F29 TERMCAP2KEY(KS_EXTRA, KE_S_F29)
  249. #define K_S_F30 TERMCAP2KEY(KS_EXTRA, KE_S_F30)
  250. #define K_S_F31 TERMCAP2KEY(KS_EXTRA, KE_S_F31)
  251. #define K_S_F32 TERMCAP2KEY(KS_EXTRA, KE_S_F32)
  252. #define K_S_F33 TERMCAP2KEY(KS_EXTRA, KE_S_F33)
  253. #define K_S_F34 TERMCAP2KEY(KS_EXTRA, KE_S_F34)
  254. #define K_S_F35 TERMCAP2KEY(KS_EXTRA, KE_S_F35)
  255. #define K_HELP TERMCAP2KEY('%', '1')
  256. #define K_UNDO TERMCAP2KEY('&', '8')
  257. #define K_BS TERMCAP2KEY('k', 'b')
  258. #define K_INS TERMCAP2KEY('k', 'I')
  259. #define K_DEL TERMCAP2KEY('k', 'D')
  260. #define K_HOME TERMCAP2KEY('k', 'h')
  261. #define K_END TERMCAP2KEY('@', '7')
  262. #define K_PAGEUP TERMCAP2KEY('k', 'P')
  263. #define K_PAGEDOWN TERMCAP2KEY('k', 'N')
  264. #define K_KHOME TERMCAP2KEY('K', '1') /* keypad home (upper left) */
  265. #define K_KPAGEUP TERMCAP2KEY('K', '3') /* keypad pageup (upper R.) */
  266. #define K_KEND TERMCAP2KEY('K', '4') /* keypad end (lower left) */
  267. #define K_KPAGEDOWN TERMCAP2KEY('K', '5') /* keypad pagedown (lower R.) */
  268. #define K_KPLUS TERMCAP2KEY('K', '6') /* keypad plus */
  269. #define K_KMINUS TERMCAP2KEY('K', '7') /* keypad minus */
  270. #define K_KDIVIDE TERMCAP2KEY('K', '8') /* keypad / */
  271. #define K_KMULTIPLY TERMCAP2KEY('K', '9') /* keypad * */
  272. #define K_KENTER TERMCAP2KEY('K', 'A') /* keypad Enter */
  273. #define K_MOUSE TERMCAP2KEY(KS_MOUSE, K_FILLER)
  274. #define K_MENU TERMCAP2KEY(KS_MENU, K_FILLER)
  275. #define K_SCROLLBAR TERMCAP2KEY(KS_SCROLLBAR, K_FILLER)
  276. #define K_HORIZ_SCROLLBAR   TERMCAP2KEY(KS_HORIZ_SCROLLBAR, K_FILLER)
  277. #define K_SELECT TERMCAP2KEY(KS_SELECT, K_FILLER)
  278. #define K_TEAROFF TERMCAP2KEY(KS_TEAROFF, K_FILLER)
  279. /*
  280.  * Symbols for pseudo keys which are translated from the real key symbols
  281.  * above.
  282.  */
  283. #define K_LEFTMOUSE     TERMCAP2KEY(KS_EXTRA, KE_LEFTMOUSE)
  284. #define K_LEFTDRAG     TERMCAP2KEY(KS_EXTRA, KE_LEFTDRAG)
  285. #define K_LEFTRELEASE     TERMCAP2KEY(KS_EXTRA, KE_LEFTRELEASE)
  286. #define K_MIDDLEMOUSE     TERMCAP2KEY(KS_EXTRA, KE_MIDDLEMOUSE)
  287. #define K_MIDDLEDRAG     TERMCAP2KEY(KS_EXTRA, KE_MIDDLEDRAG)
  288. #define K_MIDDLERELEASE     TERMCAP2KEY(KS_EXTRA, KE_MIDDLERELEASE)
  289. #define K_RIGHTMOUSE     TERMCAP2KEY(KS_EXTRA, KE_RIGHTMOUSE)
  290. #define K_RIGHTDRAG     TERMCAP2KEY(KS_EXTRA, KE_RIGHTDRAG)
  291. #define K_RIGHTRELEASE     TERMCAP2KEY(KS_EXTRA, KE_RIGHTRELEASE)
  292. #define K_IGNORE     TERMCAP2KEY(KS_EXTRA, KE_IGNORE)
  293. #define K_SNIFF     TERMCAP2KEY(KS_EXTRA, KE_SNIFF)
  294. /* Bits for modifier mask */
  295. /* 0x01 cannot be used, because the modifier must be 0x02 or higher */
  296. #define MOD_MASK_SHIFT     0x02
  297. #define MOD_MASK_CTRL     0x04
  298. #define MOD_MASK_ALT     0x08
  299. #define MOD_MASK_2CLICK     0x10
  300. #define MOD_MASK_3CLICK     0x20
  301. #define MOD_MASK_4CLICK     0x40
  302. #ifdef macintosh
  303. # define MOD_MASK_CMD      0x80
  304. #endif
  305. #define MOD_MASK_MULTI_CLICK (MOD_MASK_2CLICK|MOD_MASK_3CLICK|MOD_MASK_4CLICK)
  306. /*
  307.  * The length of the longest special key name, including modifiers.
  308.  * Current longest is <M-C-S-4-MiddleRelease> (length includes '<' and '>').
  309.  */
  310. #define MAX_KEY_NAME_LEN    23
  311. /* Maximum length of a special key event as tokens.  This includes modifiers.
  312.  * The longest event is something like <M-C-S-4-LeftDrag> which would be the
  313.  * following string of tokens:
  314.  *
  315.  * <K_SPECIAL> <KS_MODIFIER> bitmask <K_SPECIAL> <KS_EXTRA> <KT_LEFTDRAG>.
  316.  *
  317.  * This is a total of 6 tokens, and is currently the longest one possible.
  318.  */
  319. #define MAX_KEY_CODE_LEN    6