PageRenderTime 55ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/contrib/tcsh/ed.defns.c

https://bitbucket.org/freebsd/freebsd-head/
C | 1984 lines | 1774 code | 160 blank | 50 comment | 41 complexity | 34cd90ac153df6c7b814bddb27523e68 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, BSD-3-Clause, LGPL-2.0, LGPL-2.1, BSD-2-Clause, 0BSD, JSON, AGPL-1.0, GPL-2.0
  1. /* $Header: /p/tcsh/cvsroot/tcsh/ed.defns.c,v 3.46 2006/03/02 18:46:44 christos Exp $ */
  2. /*
  3. * ed.defns.c: Editor function definitions and initialization
  4. */
  5. /*-
  6. * Copyright (c) 1980, 1991 The Regents of the University of California.
  7. * All rights reserved.
  8. *
  9. * Redistribution and use in source and binary forms, with or without
  10. * modification, are permitted provided that the following conditions
  11. * are met:
  12. * 1. Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. * 2. Redistributions in binary form must reproduce the above copyright
  15. * notice, this list of conditions and the following disclaimer in the
  16. * documentation and/or other materials provided with the distribution.
  17. * 3. Neither the name of the University nor the names of its contributors
  18. * may be used to endorse or promote products derived from this software
  19. * without specific prior written permission.
  20. *
  21. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. * SUCH DAMAGE.
  32. */
  33. #include "sh.h"
  34. RCSID("$tcsh: ed.defns.c,v 3.46 2006/03/02 18:46:44 christos Exp $")
  35. #include "ed.h"
  36. static void ed_InitMetaBindings (void);
  37. PFCmd CcFuncTbl[] = { /* table of available commands */
  38. e_unassigned,
  39. /* no #define here -- this is a dummy to detect initing of the key map */
  40. e_unassigned,
  41. #define F_UNASSIGNED 1
  42. e_insert,
  43. #define F_INSERT 2
  44. e_newline,
  45. #define F_NEWLINE 3
  46. e_delprev,
  47. #define F_DELPREV 4
  48. e_delnext,
  49. #define F_DELNEXT 5
  50. e_toend,
  51. #define F_TOEND 6
  52. e_tobeg,
  53. #define F_TOBEG 7
  54. e_charback,
  55. #define F_CHARBACK 8
  56. e_charfwd,
  57. #define F_CHARFWD 9
  58. e_quote,
  59. #define F_QUOTE 10
  60. e_startover,
  61. #define F_STARTOVER 11
  62. e_redisp,
  63. #define F_REDISP 12
  64. e_tty_int,
  65. #define F_TTY_INT 13
  66. e_wordback,
  67. #define F_WORDBACK 14
  68. e_wordfwd,
  69. #define F_WORDFWD 15
  70. e_cleardisp,
  71. #define F_CLEARDISP 16
  72. e_complete,
  73. #define F_COMPLETE 17
  74. e_correct,
  75. #define F_CORRECT 18
  76. e_up_hist,
  77. #define F_UP_HIST 19
  78. e_down_hist,
  79. #define F_DOWN_HIST 20
  80. e_up_search_hist,
  81. #define F_UP_SEARCH_HIST 21
  82. e_down_search_hist,
  83. #define F_DOWN_SEARCH_HIST 22
  84. e_helpme,
  85. #define F_HELPME 23
  86. e_list_choices,
  87. #define F_LIST_CHOICES 24
  88. e_delwordprev,
  89. #define F_DELWORDPREV 25
  90. e_delwordnext,
  91. #define F_DELWORDNEXT 26
  92. e_digit,
  93. #define F_DIGIT 27
  94. e_killend,
  95. #define F_KILLEND 28
  96. e_killbeg,
  97. #define F_KILLBEG 29
  98. e_metanext,
  99. #define F_METANEXT 30
  100. e_send_eof,
  101. #define F_SEND_EOF 31
  102. e_charswitch,
  103. #define F_CHARSWITCH 32
  104. e_which,
  105. #define F_WHICH 33
  106. e_yank_kill,
  107. #define F_YANK_KILL 34
  108. e_tty_dsusp,
  109. #define F_TTY_DSUSP 35
  110. e_tty_flusho,
  111. #define F_TTY_FLUSHO 36
  112. e_tty_quit,
  113. #define F_TTY_QUIT 37
  114. e_tty_tsusp,
  115. #define F_TTY_TSUSP 38
  116. e_tty_stopo,
  117. #define F_TTY_STOPO 39
  118. e_tty_starto,
  119. #define F_TTY_STARTO 40
  120. e_argfour,
  121. #define F_ARGFOUR 41
  122. e_set_mark,
  123. #define F_SET_MARK 42
  124. e_exchange_mark,
  125. #define F_EXCHANGE_MARK 43
  126. e_last_item,
  127. #define F_LAST_ITEM 44
  128. e_delnext_list_eof,
  129. #define F_DELNEXT_LIST_EOF 45
  130. v_cmd_mode,
  131. #define V_CMD_MODE 46
  132. v_insert,
  133. #define V_INSERT 47
  134. e_argdigit,
  135. #define F_ARGDIGIT 48
  136. e_killregion,
  137. #define F_KILLREGION 49
  138. e_copyregion,
  139. #define F_COPYREGION 50
  140. e_gcharswitch,
  141. #define F_GCHARSWITCH 51
  142. e_run_fg_editor,
  143. #define F_RUN_FG_EDITOR 52
  144. e_unassigned, /* place holder for sequence lead in character */
  145. #define F_XKEY 53
  146. e_uppercase,
  147. #define F_CASEUPPER 54
  148. e_lowercase,
  149. #define F_CASELOWER 55
  150. e_capitolcase,
  151. #define F_CASECAPITAL 56
  152. v_zero,
  153. #define V_ZERO 57
  154. v_add,
  155. #define V_ADD 58
  156. v_addend,
  157. #define V_ADDEND 59
  158. v_wordbegnext,
  159. #define V_WORDBEGNEXT 60
  160. e_killall,
  161. #define F_KILLALL 61
  162. e_unassigned,
  163. /* F_EXTENDNEXT removed */
  164. v_insbeg,
  165. #define V_INSBEG 63
  166. v_replmode,
  167. #define V_REPLMODE 64
  168. v_replone,
  169. #define V_REPLONE 65
  170. v_substline,
  171. #define V_SUBSTLINE 66
  172. v_substchar,
  173. #define V_SUBSTCHAR 67
  174. v_chgtoend,
  175. #define V_CHGTOEND 68
  176. e_list_eof,
  177. #define F_LIST_EOF 69
  178. e_list_glob,
  179. #define F_LIST_GLOB 70
  180. e_expand_history,
  181. #define F_EXPAND_HISTORY 71
  182. e_magic_space,
  183. #define F_MAGIC_SPACE 72
  184. e_insovr,
  185. #define F_INSOVR 73
  186. v_cm_complete,
  187. #define V_CM_COMPLETE 74
  188. e_copyprev,
  189. #define F_COPYPREV 75
  190. e_correctl,
  191. #define F_CORRECT_L 76
  192. e_expand_glob,
  193. #define F_EXPAND_GLOB 77
  194. e_expand_vars,
  195. #define F_EXPAND_VARS 78
  196. e_toggle_hist,
  197. #define F_TOGGLE_HIST 79
  198. v_change_case,
  199. #define V_CHGCASE 80
  200. e_expand,
  201. #define F_EXPAND 81
  202. e_load_average,
  203. #define F_LOAD_AVERAGE 82
  204. v_delprev,
  205. #define V_DELPREV 83
  206. v_delmeta,
  207. #define V_DELMETA 84
  208. v_wordfwd,
  209. #define V_WORDFWD 85
  210. v_wordback,
  211. #define V_WORDBACK 86
  212. v_endword,
  213. #define V_ENDWORD 87
  214. v_eword,
  215. #define V_EWORD 88
  216. v_undo,
  217. #define V_UNDO 89
  218. v_ush_meta,
  219. #define V_USH_META 90
  220. v_dsh_meta,
  221. #define V_DSH_META 91
  222. v_rsrch_fwd,
  223. #define V_RSRCH_FWD 92
  224. v_rsrch_back,
  225. #define V_RSRCH_BACK 93
  226. v_char_fwd,
  227. #define V_CHAR_FWD 94
  228. v_char_back,
  229. #define V_CHAR_BACK 95
  230. v_chgmeta,
  231. #define V_CHGMETA 96
  232. e_inc_fwd,
  233. #define F_INC_FWD 97
  234. e_inc_back,
  235. #define F_INC_BACK 98
  236. v_rchar_fwd,
  237. #define V_RCHAR_FWD 99
  238. v_rchar_back,
  239. #define V_RCHAR_BACK 100
  240. v_charto_fwd,
  241. #define V_CHARTO_FWD 101
  242. v_charto_back,
  243. #define V_CHARTO_BACK 102
  244. e_normalize_path,
  245. #define F_PATH_NORM 103
  246. e_delnext_eof, /* added by mtk@ari.ncl.omron.co.jp (920818) */
  247. #define F_DELNEXT_EOF 104
  248. e_stuff_char,
  249. #define F_STUFF_CHAR 105
  250. e_complete_all,
  251. #define F_COMPLETE_ALL 106
  252. e_list_all,
  253. #define F_LIST_ALL 107
  254. e_complete_fwd,
  255. #define F_COMPLETE_FWD 108
  256. e_complete_back,
  257. #define F_COMPLETE_BACK 109
  258. e_delnext_list,
  259. #define F_DELNEXT_LIST 110
  260. e_normalize_command,
  261. #define F_COMMAND_NORM 111
  262. e_dabbrev_expand,
  263. #define F_DABBREV_EXPAND 112
  264. e_copy_to_clipboard,
  265. #define F_COPY_CLIP 113
  266. e_paste_from_clipboard,
  267. #define F_PASTE_CLIP 114
  268. e_dosify_next,
  269. #define F_DOSIFY_NEXT 115
  270. e_dosify_prev,
  271. #define F_DOSIFY_PREV 116
  272. e_page_up,
  273. #define F_PAGE_UP 117
  274. e_page_down,
  275. #define F_PAGE_DOWN 118
  276. e_yank_pop,
  277. #define F_YANK_POP 119
  278. e_newline_hold,
  279. #define F_NEWLINE_HOLD 120
  280. e_newline_down_hist,
  281. #define F_NEWLINE_DOWN_HIST 121
  282. 0 /* DUMMY VALUE */
  283. #define F_NUM_FNS 122
  284. };
  285. KEYCMD NumFuns = F_NUM_FNS;
  286. KEYCMD CcKeyMap[NT_NUM_KEYS]; /* the real key map */
  287. KEYCMD CcAltMap[NT_NUM_KEYS]; /* the alternative key map */
  288. #define F_NUM_FUNCNAMES (F_NUM_FNS + 2)
  289. struct KeyFuncs FuncNames[F_NUM_FUNCNAMES];
  290. #ifdef WINNT_NATIVE
  291. extern KEYCMD CcEmacsMap[];
  292. extern KEYCMD CcViMap[];
  293. extern KEYCMD CcViCmdMap[];
  294. #else /* !WINNT_NATIVE*/
  295. KEYCMD CcEmacsMap[] = {
  296. /* keymap table, each index into above tbl; should be 256*sizeof(KEYCMD)
  297. bytes long */
  298. F_SET_MARK, /* ^@ */
  299. F_TOBEG, /* ^A */
  300. F_CHARBACK, /* ^B */
  301. F_TTY_INT, /* ^C */
  302. F_DELNEXT_LIST_EOF, /* ^D */
  303. F_TOEND, /* ^E */
  304. F_CHARFWD, /* ^F */
  305. F_UNASSIGNED, /* ^G */
  306. F_DELPREV, /* ^H */
  307. F_COMPLETE, /* ^I */
  308. F_NEWLINE, /* ^J */
  309. F_KILLEND, /* ^K */
  310. F_CLEARDISP, /* ^L */
  311. F_NEWLINE, /* ^M */
  312. F_DOWN_HIST, /* ^N */
  313. F_TTY_FLUSHO, /* ^O */
  314. F_UP_HIST, /* ^P */
  315. F_TTY_STARTO, /* ^Q */
  316. F_REDISP, /* ^R */
  317. F_TTY_STOPO, /* ^S */
  318. F_CHARSWITCH, /* ^T */
  319. F_KILLALL, /* ^U */
  320. F_QUOTE, /* ^V */
  321. F_KILLREGION, /* ^W */
  322. F_XKEY, /* ^X */
  323. F_YANK_KILL, /* ^Y */
  324. F_TTY_TSUSP, /* ^Z */
  325. F_METANEXT, /* ^[ */
  326. F_TTY_QUIT, /* ^\ */
  327. F_TTY_DSUSP, /* ^] */
  328. F_UNASSIGNED, /* ^^ */
  329. F_UNASSIGNED, /* ^_ */
  330. F_INSERT, /* SPACE */
  331. F_INSERT, /* ! */
  332. F_INSERT, /* " */
  333. F_INSERT, /* # */
  334. F_INSERT, /* $ */
  335. F_INSERT, /* % */
  336. F_INSERT, /* & */
  337. F_INSERT, /* ' */
  338. F_INSERT, /* ( */
  339. F_INSERT, /* ) */
  340. F_INSERT, /* * */
  341. F_INSERT, /* + */
  342. F_INSERT, /* , */
  343. F_INSERT, /* - */
  344. F_INSERT, /* . */
  345. F_INSERT, /* / */
  346. F_DIGIT, /* 0 */
  347. F_DIGIT, /* 1 */
  348. F_DIGIT, /* 2 */
  349. F_DIGIT, /* 3 */
  350. F_DIGIT, /* 4 */
  351. F_DIGIT, /* 5 */
  352. F_DIGIT, /* 6 */
  353. F_DIGIT, /* 7 */
  354. F_DIGIT, /* 8 */
  355. F_DIGIT, /* 9 */
  356. F_INSERT, /* : */
  357. F_INSERT, /* ; */
  358. F_INSERT, /* < */
  359. F_INSERT, /* = */
  360. F_INSERT, /* > */
  361. F_INSERT, /* ? */
  362. F_INSERT, /* @ */
  363. F_INSERT, /* A */
  364. F_INSERT, /* B */
  365. F_INSERT, /* C */
  366. F_INSERT, /* D */
  367. F_INSERT, /* E */
  368. F_INSERT, /* F */
  369. F_INSERT, /* G */
  370. F_INSERT, /* H */
  371. F_INSERT, /* I */
  372. F_INSERT, /* J */
  373. F_INSERT, /* K */
  374. F_INSERT, /* L */
  375. F_INSERT, /* M */
  376. F_INSERT, /* N */
  377. F_INSERT, /* O */
  378. F_INSERT, /* P */
  379. F_INSERT, /* Q */
  380. F_INSERT, /* R */
  381. F_INSERT, /* S */
  382. F_INSERT, /* T */
  383. F_INSERT, /* U */
  384. F_INSERT, /* V */
  385. F_INSERT, /* W */
  386. F_INSERT, /* X */
  387. F_INSERT, /* Y */
  388. F_INSERT, /* Z */
  389. F_INSERT, /* [ */
  390. F_INSERT, /* \ */
  391. F_INSERT, /* ] */
  392. F_INSERT, /* ^ */
  393. F_INSERT, /* _ */
  394. F_INSERT, /* ` */
  395. F_INSERT, /* a */
  396. F_INSERT, /* b */
  397. F_INSERT, /* c */
  398. F_INSERT, /* d */
  399. F_INSERT, /* e */
  400. F_INSERT, /* f */
  401. F_INSERT, /* g */
  402. F_INSERT, /* h */
  403. F_INSERT, /* i */
  404. F_INSERT, /* j */
  405. F_INSERT, /* k */
  406. F_INSERT, /* l */
  407. F_INSERT, /* m */
  408. F_INSERT, /* n */
  409. F_INSERT, /* o */
  410. F_INSERT, /* p */
  411. F_INSERT, /* q */
  412. F_INSERT, /* r */
  413. F_INSERT, /* s */
  414. F_INSERT, /* t */
  415. F_INSERT, /* u */
  416. F_INSERT, /* v */
  417. F_INSERT, /* w */
  418. F_INSERT, /* x */
  419. F_INSERT, /* y */
  420. F_INSERT, /* z */
  421. F_INSERT, /* { */
  422. F_INSERT, /* | */
  423. F_INSERT, /* } */
  424. F_INSERT, /* ~ */
  425. F_DELPREV, /* ^? */
  426. F_UNASSIGNED, /* M-^@ */
  427. F_UNASSIGNED, /* M-^A */
  428. F_UNASSIGNED, /* M-^B */
  429. F_UNASSIGNED, /* M-^C */
  430. F_LIST_CHOICES, /* M-^D */
  431. F_UNASSIGNED, /* M-^E */
  432. F_UNASSIGNED, /* M-^F */
  433. F_UNASSIGNED, /* M-^G */
  434. F_DELWORDPREV, /* M-^H */
  435. F_COMPLETE, /* M-^I */
  436. F_UNASSIGNED, /* M-^J */
  437. F_UNASSIGNED, /* M-^K */
  438. F_CLEARDISP, /* M-^L */
  439. F_UNASSIGNED, /* M-^M */
  440. F_UNASSIGNED, /* M-^N */
  441. F_UNASSIGNED, /* M-^O */
  442. F_UNASSIGNED, /* M-^P */
  443. F_UNASSIGNED, /* M-^Q */
  444. F_UNASSIGNED, /* M-^R */
  445. F_UNASSIGNED, /* M-^S */
  446. F_UNASSIGNED, /* M-^T */
  447. F_UNASSIGNED, /* M-^U */
  448. F_UNASSIGNED, /* M-^V */
  449. F_UNASSIGNED, /* M-^W */
  450. F_UNASSIGNED, /* M-^X */
  451. F_UNASSIGNED, /* M-^Y */
  452. F_RUN_FG_EDITOR, /* M-^Z */
  453. F_COMPLETE, /* M-^[ */
  454. F_UNASSIGNED, /* M-^\ */
  455. F_UNASSIGNED, /* M-^] */
  456. F_UNASSIGNED, /* M-^^ */
  457. F_COPYPREV, /* M-^_ */
  458. F_EXPAND_HISTORY, /* M-SPACE */
  459. F_EXPAND_HISTORY, /* M-! */
  460. F_UNASSIGNED, /* M-" */
  461. F_UNASSIGNED, /* M-# */
  462. F_CORRECT_L, /* M-$ */
  463. F_UNASSIGNED, /* M-% */
  464. F_UNASSIGNED, /* M-& */
  465. F_UNASSIGNED, /* M-' */
  466. F_UNASSIGNED, /* M-( */
  467. F_UNASSIGNED, /* M-) */
  468. F_UNASSIGNED, /* M-* */
  469. F_UNASSIGNED, /* M-+ */
  470. F_UNASSIGNED, /* M-, */
  471. F_UNASSIGNED, /* M-- */
  472. F_UNASSIGNED, /* M-. */
  473. F_DABBREV_EXPAND, /* M-/ */
  474. F_ARGDIGIT, /* M-0 */
  475. F_ARGDIGIT, /* M-1 */
  476. F_ARGDIGIT, /* M-2 */
  477. F_ARGDIGIT, /* M-3 */
  478. F_ARGDIGIT, /* M-4 */
  479. F_ARGDIGIT, /* M-5 */
  480. F_ARGDIGIT, /* M-6 */
  481. F_ARGDIGIT, /* M-7 */
  482. F_ARGDIGIT, /* M-8 */
  483. F_ARGDIGIT, /* M-9 */
  484. F_UNASSIGNED, /* M-: */
  485. F_UNASSIGNED, /* M-; */
  486. F_UNASSIGNED, /* M-< */
  487. F_UNASSIGNED, /* M-= */
  488. F_UNASSIGNED, /* M-> */
  489. F_WHICH, /* M-? */
  490. F_UNASSIGNED, /* M-@ */
  491. F_NEWLINE_HOLD, /* M-A */
  492. F_WORDBACK, /* M-B */
  493. F_CASECAPITAL, /* M-C */
  494. F_DELWORDNEXT, /* M-D */
  495. F_UNASSIGNED, /* M-E */
  496. F_WORDFWD, /* M-F */
  497. F_UNASSIGNED, /* M-G */
  498. F_HELPME, /* M-H */
  499. F_UNASSIGNED, /* M-I */
  500. F_UNASSIGNED, /* M-J */
  501. F_UNASSIGNED, /* M-K */
  502. F_CASELOWER, /* M-L */
  503. F_UNASSIGNED, /* M-M */
  504. F_DOWN_SEARCH_HIST, /* M-N */
  505. F_XKEY, /* M-O *//* extended key esc PWP Mar 88 */
  506. F_UP_SEARCH_HIST, /* M-P */
  507. F_UNASSIGNED, /* M-Q */
  508. F_TOGGLE_HIST, /* M-R */
  509. F_CORRECT, /* M-S */
  510. F_UNASSIGNED, /* M-T */
  511. F_CASEUPPER, /* M-U */
  512. F_UNASSIGNED, /* M-V */
  513. F_COPYREGION, /* M-W */
  514. F_UNASSIGNED, /* M-X */
  515. F_YANK_POP, /* M-Y */
  516. F_UNASSIGNED, /* M-Z */
  517. F_XKEY, /* M-[ *//* extended key esc -mf Oct 87 */
  518. F_UNASSIGNED, /* M-\ */
  519. F_UNASSIGNED, /* M-] */
  520. F_UNASSIGNED, /* M-^ */
  521. F_LAST_ITEM, /* M-_ */
  522. F_UNASSIGNED, /* M-` */
  523. F_NEWLINE_HOLD, /* M-a */
  524. F_WORDBACK, /* M-b */
  525. F_CASECAPITAL, /* M-c */
  526. F_DELWORDNEXT, /* M-d */
  527. F_UNASSIGNED, /* M-e */
  528. F_WORDFWD, /* M-f */
  529. F_UNASSIGNED, /* M-g */
  530. F_HELPME, /* M-h */
  531. F_UNASSIGNED, /* M-i */
  532. F_UNASSIGNED, /* M-j */
  533. F_UNASSIGNED, /* M-k */
  534. F_CASELOWER, /* M-l */
  535. F_UNASSIGNED, /* M-m */
  536. F_DOWN_SEARCH_HIST, /* M-n */
  537. F_UNASSIGNED, /* M-o */
  538. F_UP_SEARCH_HIST, /* M-p */
  539. F_UNASSIGNED, /* M-q */
  540. F_TOGGLE_HIST, /* M-r */
  541. F_CORRECT, /* M-s */
  542. F_UNASSIGNED, /* M-t */
  543. F_CASEUPPER, /* M-u */
  544. F_UNASSIGNED, /* M-v */
  545. F_COPYREGION, /* M-w */
  546. F_UNASSIGNED, /* M-x */
  547. F_YANK_POP, /* M-y */
  548. F_UNASSIGNED, /* M-z */
  549. F_UNASSIGNED, /* M-{ */
  550. F_UNASSIGNED, /* M-| */
  551. F_UNASSIGNED, /* M-} */
  552. F_UNASSIGNED, /* M-~ */
  553. F_DELWORDPREV /* M-^? */
  554. };
  555. /*
  556. * keymap table for vi. Each index into above tbl; should be
  557. * 256 entries long. Vi mode uses a sticky-extend to do command mode:
  558. * insert mode characters are in the normal keymap, and command mode
  559. * in the extended keymap.
  560. */
  561. static KEYCMD CcViMap[] = {
  562. #ifdef KSHVI
  563. F_UNASSIGNED, /* ^@ */
  564. F_INSERT, /* ^A */
  565. F_INSERT, /* ^B */
  566. F_INSERT, /* ^C */
  567. F_INSERT, /* ^D */
  568. F_INSERT, /* ^E */
  569. F_INSERT, /* ^F */
  570. F_INSERT, /* ^G */
  571. V_DELPREV, /* ^H */ /* BackSpace key */
  572. F_COMPLETE, /* ^I */ /* Tab Key */
  573. F_NEWLINE, /* ^J */
  574. F_INSERT, /* ^K */
  575. F_INSERT, /* ^L */
  576. F_NEWLINE, /* ^M */
  577. F_INSERT, /* ^N */
  578. F_INSERT, /* ^O */
  579. F_INSERT, /* ^P */
  580. F_TTY_STARTO, /* ^Q */
  581. F_INSERT, /* ^R */
  582. F_INSERT, /* ^S */
  583. F_INSERT, /* ^T */
  584. F_INSERT, /* ^U */
  585. F_QUOTE, /* ^V */
  586. F_DELWORDPREV, /* ^W */ /* Only until start edit pos */
  587. F_INSERT, /* ^X */
  588. F_INSERT, /* ^Y */
  589. F_INSERT, /* ^Z */
  590. V_CMD_MODE, /* ^[ */ /* [ Esc ] key */
  591. F_TTY_QUIT, /* ^\ */
  592. F_INSERT, /* ^] */
  593. F_INSERT, /* ^^ */
  594. F_INSERT, /* ^_ */
  595. #else /* !KSHVI */
  596. F_UNASSIGNED, /* ^@ */ /* NOTE: These mapping do NOT */
  597. F_TOBEG, /* ^A */ /* Correspond well to the KSH */
  598. F_CHARBACK, /* ^B */ /* VI editting assignments */
  599. F_TTY_INT, /* ^C */ /* On the other hand they are */
  600. F_LIST_EOF, /* ^D */ /* convenient any many people */
  601. F_TOEND, /* ^E */ /* have gotten used to them */
  602. F_CHARFWD, /* ^F */
  603. F_LIST_GLOB, /* ^G */
  604. F_DELPREV, /* ^H */ /* BackSpace key */
  605. F_COMPLETE, /* ^I */ /* Tab Key */
  606. F_NEWLINE, /* ^J */
  607. F_KILLEND, /* ^K */
  608. F_CLEARDISP, /* ^L */
  609. F_NEWLINE, /* ^M */
  610. F_DOWN_HIST, /* ^N */
  611. F_TTY_FLUSHO, /* ^O */
  612. F_UP_HIST, /* ^P */
  613. F_TTY_STARTO, /* ^Q */
  614. F_REDISP, /* ^R */
  615. F_TTY_STOPO, /* ^S */
  616. F_CHARSWITCH, /* ^T */
  617. F_KILLBEG, /* ^U */
  618. F_QUOTE, /* ^V */
  619. F_DELWORDPREV, /* ^W */
  620. F_EXPAND, /* ^X */
  621. F_TTY_DSUSP, /* ^Y */
  622. F_TTY_TSUSP, /* ^Z */
  623. V_CMD_MODE, /* ^[ */
  624. F_TTY_QUIT, /* ^\ */
  625. F_UNASSIGNED, /* ^] */
  626. F_UNASSIGNED, /* ^^ */
  627. F_UNASSIGNED, /* ^_ */
  628. #endif /* KSHVI */
  629. F_INSERT, /* SPACE */
  630. F_INSERT, /* ! */
  631. F_INSERT, /* " */
  632. F_INSERT, /* # */
  633. F_INSERT, /* $ */
  634. F_INSERT, /* % */
  635. F_INSERT, /* & */
  636. F_INSERT, /* ' */
  637. F_INSERT, /* ( */
  638. F_INSERT, /* ) */
  639. F_INSERT, /* * */
  640. F_INSERT, /* + */
  641. F_INSERT, /* , */
  642. F_INSERT, /* - */
  643. F_INSERT, /* . */
  644. F_INSERT, /* / */
  645. F_INSERT, /* 0 */
  646. F_INSERT, /* 1 */
  647. F_INSERT, /* 2 */
  648. F_INSERT, /* 3 */
  649. F_INSERT, /* 4 */
  650. F_INSERT, /* 5 */
  651. F_INSERT, /* 6 */
  652. F_INSERT, /* 7 */
  653. F_INSERT, /* 8 */
  654. F_INSERT, /* 9 */
  655. F_INSERT, /* : */
  656. F_INSERT, /* ; */
  657. F_INSERT, /* < */
  658. F_INSERT, /* = */
  659. F_INSERT, /* > */
  660. F_INSERT, /* ? */
  661. F_INSERT, /* @ */
  662. F_INSERT, /* A */
  663. F_INSERT, /* B */
  664. F_INSERT, /* C */
  665. F_INSERT, /* D */
  666. F_INSERT, /* E */
  667. F_INSERT, /* F */
  668. F_INSERT, /* G */
  669. F_INSERT, /* H */
  670. F_INSERT, /* I */
  671. F_INSERT, /* J */
  672. F_INSERT, /* K */
  673. F_INSERT, /* L */
  674. F_INSERT, /* M */
  675. F_INSERT, /* N */
  676. F_INSERT, /* O */
  677. F_INSERT, /* P */
  678. F_INSERT, /* Q */
  679. F_INSERT, /* R */
  680. F_INSERT, /* S */
  681. F_INSERT, /* T */
  682. F_INSERT, /* U */
  683. F_INSERT, /* V */
  684. F_INSERT, /* W */
  685. F_INSERT, /* X */
  686. F_INSERT, /* Y */
  687. F_INSERT, /* Z */
  688. F_INSERT, /* [ */
  689. F_INSERT, /* \ */
  690. F_INSERT, /* ] */
  691. F_INSERT, /* ^ */
  692. F_INSERT, /* _ */
  693. F_INSERT, /* ` */
  694. F_INSERT, /* a */
  695. F_INSERT, /* b */
  696. F_INSERT, /* c */
  697. F_INSERT, /* d */
  698. F_INSERT, /* e */
  699. F_INSERT, /* f */
  700. F_INSERT, /* g */
  701. F_INSERT, /* h */
  702. F_INSERT, /* i */
  703. F_INSERT, /* j */
  704. F_INSERT, /* k */
  705. F_INSERT, /* l */
  706. F_INSERT, /* m */
  707. F_INSERT, /* n */
  708. F_INSERT, /* o */
  709. F_INSERT, /* p */
  710. F_INSERT, /* q */
  711. F_INSERT, /* r */
  712. F_INSERT, /* s */
  713. F_INSERT, /* t */
  714. F_INSERT, /* u */
  715. F_INSERT, /* v */
  716. F_INSERT, /* w */
  717. F_INSERT, /* x */
  718. F_INSERT, /* y */
  719. F_INSERT, /* z */
  720. F_INSERT, /* { */
  721. F_INSERT, /* | */
  722. F_INSERT, /* } */
  723. F_INSERT, /* ~ */
  724. F_DELPREV, /* ^? */
  725. F_UNASSIGNED, /* M-^@ */
  726. F_UNASSIGNED, /* M-^A */
  727. F_UNASSIGNED, /* M-^B */
  728. F_UNASSIGNED, /* M-^C */
  729. F_UNASSIGNED, /* M-^D */
  730. F_UNASSIGNED, /* M-^E */
  731. F_UNASSIGNED, /* M-^F */
  732. F_UNASSIGNED, /* M-^G */
  733. F_UNASSIGNED, /* M-^H */
  734. F_UNASSIGNED, /* M-^I */
  735. F_UNASSIGNED, /* M-^J */
  736. F_UNASSIGNED, /* M-^K */
  737. F_UNASSIGNED, /* M-^L */
  738. F_UNASSIGNED, /* M-^M */
  739. F_UNASSIGNED, /* M-^N */
  740. F_UNASSIGNED, /* M-^O */
  741. F_UNASSIGNED, /* M-^P */
  742. F_UNASSIGNED, /* M-^Q */
  743. F_UNASSIGNED, /* M-^R */
  744. F_UNASSIGNED, /* M-^S */
  745. F_UNASSIGNED, /* M-^T */
  746. F_UNASSIGNED, /* M-^U */
  747. F_UNASSIGNED, /* M-^V */
  748. F_UNASSIGNED, /* M-^W */
  749. F_UNASSIGNED, /* M-^X */
  750. F_UNASSIGNED, /* M-^Y */
  751. F_UNASSIGNED, /* M-^Z */
  752. F_UNASSIGNED, /* M-^[ */
  753. F_UNASSIGNED, /* M-^\ */
  754. F_UNASSIGNED, /* M-^] */
  755. F_UNASSIGNED, /* M-^^ */
  756. F_UNASSIGNED, /* M-^_ */
  757. F_UNASSIGNED, /* M-SPACE */
  758. F_UNASSIGNED, /* M-! */
  759. F_UNASSIGNED, /* M-" */
  760. F_UNASSIGNED, /* M-# */
  761. F_UNASSIGNED, /* M-$ */
  762. F_UNASSIGNED, /* M-% */
  763. F_UNASSIGNED, /* M-& */
  764. F_UNASSIGNED, /* M-' */
  765. F_UNASSIGNED, /* M-( */
  766. F_UNASSIGNED, /* M-) */
  767. F_UNASSIGNED, /* M-* */
  768. F_UNASSIGNED, /* M-+ */
  769. F_UNASSIGNED, /* M-, */
  770. F_UNASSIGNED, /* M-- */
  771. F_UNASSIGNED, /* M-. */
  772. F_UNASSIGNED, /* M-/ */
  773. F_UNASSIGNED, /* M-0 */
  774. F_UNASSIGNED, /* M-1 */
  775. F_UNASSIGNED, /* M-2 */
  776. F_UNASSIGNED, /* M-3 */
  777. F_UNASSIGNED, /* M-4 */
  778. F_UNASSIGNED, /* M-5 */
  779. F_UNASSIGNED, /* M-6 */
  780. F_UNASSIGNED, /* M-7 */
  781. F_UNASSIGNED, /* M-8 */
  782. F_UNASSIGNED, /* M-9 */
  783. F_UNASSIGNED, /* M-: */
  784. F_UNASSIGNED, /* M-; */
  785. F_UNASSIGNED, /* M-< */
  786. F_UNASSIGNED, /* M-= */
  787. F_UNASSIGNED, /* M-> */
  788. F_UNASSIGNED, /* M-? */
  789. F_UNASSIGNED, /* M-@ */
  790. F_UNASSIGNED, /* M-A */
  791. F_UNASSIGNED, /* M-B */
  792. F_UNASSIGNED, /* M-C */
  793. F_UNASSIGNED, /* M-D */
  794. F_UNASSIGNED, /* M-E */
  795. F_UNASSIGNED, /* M-F */
  796. F_UNASSIGNED, /* M-G */
  797. F_UNASSIGNED, /* M-H */
  798. F_UNASSIGNED, /* M-I */
  799. F_UNASSIGNED, /* M-J */
  800. F_UNASSIGNED, /* M-K */
  801. F_UNASSIGNED, /* M-L */
  802. F_UNASSIGNED, /* M-M */
  803. F_UNASSIGNED, /* M-N */
  804. F_UNASSIGNED, /* M-O */
  805. F_UNASSIGNED, /* M-P */
  806. F_UNASSIGNED, /* M-Q */
  807. F_UNASSIGNED, /* M-R */
  808. F_UNASSIGNED, /* M-S */
  809. F_UNASSIGNED, /* M-T */
  810. F_UNASSIGNED, /* M-U */
  811. F_UNASSIGNED, /* M-V */
  812. F_UNASSIGNED, /* M-W */
  813. F_UNASSIGNED, /* M-X */
  814. F_UNASSIGNED, /* M-Y */
  815. F_UNASSIGNED, /* M-Z */
  816. F_UNASSIGNED, /* M-[ */
  817. F_UNASSIGNED, /* M-\ */
  818. F_UNASSIGNED, /* M-] */
  819. F_UNASSIGNED, /* M-^ */
  820. F_UNASSIGNED, /* M-_ */
  821. F_UNASSIGNED, /* M-` */
  822. F_UNASSIGNED, /* M-a */
  823. F_UNASSIGNED, /* M-b */
  824. F_UNASSIGNED, /* M-c */
  825. F_UNASSIGNED, /* M-d */
  826. F_UNASSIGNED, /* M-e */
  827. F_UNASSIGNED, /* M-f */
  828. F_UNASSIGNED, /* M-g */
  829. F_UNASSIGNED, /* M-h */
  830. F_UNASSIGNED, /* M-i */
  831. F_UNASSIGNED, /* M-j */
  832. F_UNASSIGNED, /* M-k */
  833. F_UNASSIGNED, /* M-l */
  834. F_UNASSIGNED, /* M-m */
  835. F_UNASSIGNED, /* M-n */
  836. F_UNASSIGNED, /* M-o */
  837. F_UNASSIGNED, /* M-p */
  838. F_UNASSIGNED, /* M-q */
  839. F_UNASSIGNED, /* M-r */
  840. F_UNASSIGNED, /* M-s */
  841. F_UNASSIGNED, /* M-t */
  842. F_UNASSIGNED, /* M-u */
  843. F_UNASSIGNED, /* M-v */
  844. F_UNASSIGNED, /* M-w */
  845. F_UNASSIGNED, /* M-x */
  846. F_UNASSIGNED, /* M-y */
  847. F_UNASSIGNED, /* M-z */
  848. F_UNASSIGNED, /* M-{ */
  849. F_UNASSIGNED, /* M-| */
  850. F_UNASSIGNED, /* M-} */
  851. F_UNASSIGNED, /* M-~ */
  852. F_UNASSIGNED /* M-^? */
  853. };
  854. KEYCMD CcViCmdMap[] = {
  855. F_UNASSIGNED, /* ^@ */
  856. F_TOBEG, /* ^A */
  857. F_UNASSIGNED, /* ^B */
  858. F_TTY_INT, /* ^C */
  859. F_LIST_CHOICES, /* ^D */
  860. F_TOEND, /* ^E */
  861. F_UNASSIGNED, /* ^F */
  862. F_LIST_GLOB, /* ^G */
  863. F_CHARBACK, /* ^H */
  864. V_CM_COMPLETE, /* ^I */
  865. F_NEWLINE, /* ^J */
  866. F_KILLEND, /* ^K */
  867. F_CLEARDISP, /* ^L */
  868. F_NEWLINE, /* ^M */
  869. F_DOWN_HIST, /* ^N */
  870. F_TTY_FLUSHO, /* ^O */
  871. F_UP_HIST, /* ^P */
  872. F_TTY_STARTO, /* ^Q */
  873. F_REDISP, /* ^R */
  874. F_TTY_STOPO, /* ^S */
  875. F_UNASSIGNED, /* ^T */
  876. F_KILLBEG, /* ^U */
  877. F_UNASSIGNED, /* ^V */
  878. F_DELWORDPREV, /* ^W */
  879. F_EXPAND, /* ^X */
  880. F_UNASSIGNED, /* ^Y */
  881. F_UNASSIGNED, /* ^Z */
  882. F_METANEXT, /* ^[ */
  883. F_TTY_QUIT, /* ^\ */
  884. F_UNASSIGNED, /* ^] */
  885. F_UNASSIGNED, /* ^^ */
  886. F_UNASSIGNED, /* ^_ */
  887. F_CHARFWD, /* SPACE */
  888. F_EXPAND_HISTORY, /* ! */
  889. F_UNASSIGNED, /* " */
  890. F_UNASSIGNED, /* # */
  891. F_TOEND, /* $ */
  892. F_UNASSIGNED, /* % */
  893. F_UNASSIGNED, /* & */
  894. F_UNASSIGNED, /* ' */
  895. F_UNASSIGNED, /* ( */
  896. F_UNASSIGNED, /* ) */
  897. F_EXPAND_GLOB, /* * */
  898. F_DOWN_HIST, /* + */
  899. V_RCHAR_BACK, /* , */
  900. F_UP_HIST, /* - */
  901. F_UNASSIGNED, /* . */
  902. V_DSH_META, /* / */
  903. V_ZERO, /* 0 */
  904. F_ARGDIGIT, /* 1 */
  905. F_ARGDIGIT, /* 2 */
  906. F_ARGDIGIT, /* 3 */
  907. F_ARGDIGIT, /* 4 */
  908. F_ARGDIGIT, /* 5 */
  909. F_ARGDIGIT, /* 6 */
  910. F_ARGDIGIT, /* 7 */
  911. F_ARGDIGIT, /* 8 */
  912. F_ARGDIGIT, /* 9 */
  913. F_UNASSIGNED, /* : */
  914. V_RCHAR_FWD, /* ; */
  915. F_UNASSIGNED, /* < */
  916. F_UNASSIGNED, /* = */
  917. F_UNASSIGNED, /* > */
  918. V_USH_META, /* ? */
  919. F_UNASSIGNED, /* @ */
  920. V_ADDEND, /* A */
  921. V_WORDBACK, /* B */
  922. V_CHGTOEND, /* C */
  923. F_KILLEND, /* D */
  924. V_ENDWORD, /* E */
  925. V_CHAR_BACK, /* F */
  926. F_UNASSIGNED, /* G */
  927. F_UNASSIGNED, /* H */
  928. V_INSBEG, /* I */
  929. F_DOWN_SEARCH_HIST, /* J */
  930. F_UP_SEARCH_HIST, /* K */
  931. F_UNASSIGNED, /* L */
  932. F_UNASSIGNED, /* M */
  933. V_RSRCH_BACK, /* N */
  934. F_XKEY, /* O */
  935. F_UNASSIGNED, /* P */
  936. F_UNASSIGNED, /* Q */
  937. V_REPLMODE, /* R */
  938. V_SUBSTLINE, /* S */
  939. V_CHARTO_BACK, /* T */
  940. F_UNASSIGNED, /* U */
  941. F_EXPAND_VARS, /* V */
  942. V_WORDFWD, /* W */
  943. F_DELPREV, /* X */
  944. F_UNASSIGNED, /* Y */
  945. F_UNASSIGNED, /* Z */
  946. F_XKEY, /* [ */
  947. F_UNASSIGNED, /* \ */
  948. F_UNASSIGNED, /* ] */
  949. F_TOBEG, /* ^ */
  950. F_UNASSIGNED, /* _ */
  951. F_UNASSIGNED, /* ` */
  952. V_ADD, /* a */
  953. F_WORDBACK, /* b */
  954. V_CHGMETA, /* c */
  955. V_DELMETA, /* d */
  956. V_EWORD, /* e */
  957. V_CHAR_FWD, /* f */
  958. F_UNASSIGNED, /* g */
  959. F_CHARBACK, /* h */
  960. V_INSERT, /* i */
  961. F_DOWN_HIST, /* j */
  962. F_UP_HIST, /* k */
  963. F_CHARFWD, /* l */
  964. F_UNASSIGNED, /* m */
  965. V_RSRCH_FWD, /* n */
  966. F_UNASSIGNED, /* o */
  967. F_UNASSIGNED, /* p */
  968. F_UNASSIGNED, /* q */
  969. V_REPLONE, /* r */
  970. V_SUBSTCHAR, /* s */
  971. V_CHARTO_FWD, /* t */
  972. V_UNDO, /* u */
  973. F_EXPAND_VARS, /* v */
  974. V_WORDBEGNEXT, /* w */
  975. F_DELNEXT_EOF, /* x */
  976. F_UNASSIGNED, /* y */
  977. F_UNASSIGNED, /* z */
  978. F_UNASSIGNED, /* { */
  979. F_UNASSIGNED, /* | */
  980. F_UNASSIGNED, /* } */
  981. V_CHGCASE, /* ~ */
  982. F_DELPREV, /* ^? */
  983. F_UNASSIGNED, /* M-^@ */
  984. F_UNASSIGNED, /* M-^A */
  985. F_UNASSIGNED, /* M-^B */
  986. F_UNASSIGNED, /* M-^C */
  987. F_UNASSIGNED, /* M-^D */
  988. F_UNASSIGNED, /* M-^E */
  989. F_UNASSIGNED, /* M-^F */
  990. F_UNASSIGNED, /* M-^G */
  991. F_UNASSIGNED, /* M-^H */
  992. F_UNASSIGNED, /* M-^I */
  993. F_UNASSIGNED, /* M-^J */
  994. F_UNASSIGNED, /* M-^K */
  995. F_UNASSIGNED, /* M-^L */
  996. F_UNASSIGNED, /* M-^M */
  997. F_UNASSIGNED, /* M-^N */
  998. F_UNASSIGNED, /* M-^O */
  999. F_UNASSIGNED, /* M-^P */
  1000. F_UNASSIGNED, /* M-^Q */
  1001. F_UNASSIGNED, /* M-^R */
  1002. F_UNASSIGNED, /* M-^S */
  1003. F_UNASSIGNED, /* M-^T */
  1004. F_UNASSIGNED, /* M-^U */
  1005. F_UNASSIGNED, /* M-^V */
  1006. F_UNASSIGNED, /* M-^W */
  1007. F_UNASSIGNED, /* M-^X */
  1008. F_UNASSIGNED, /* M-^Y */
  1009. F_UNASSIGNED, /* M-^Z */
  1010. F_UNASSIGNED, /* M-^[ */
  1011. F_UNASSIGNED, /* M-^\ */
  1012. F_UNASSIGNED, /* M-^] */
  1013. F_UNASSIGNED, /* M-^^ */
  1014. F_UNASSIGNED, /* M-^_ */
  1015. F_UNASSIGNED, /* M-SPACE */
  1016. F_UNASSIGNED, /* M-! */
  1017. F_UNASSIGNED, /* M-" */
  1018. F_UNASSIGNED, /* M-# */
  1019. F_UNASSIGNED, /* M-$ */
  1020. F_UNASSIGNED, /* M-% */
  1021. F_UNASSIGNED, /* M-& */
  1022. F_UNASSIGNED, /* M-' */
  1023. F_UNASSIGNED, /* M-( */
  1024. F_UNASSIGNED, /* M-) */
  1025. F_UNASSIGNED, /* M-* */
  1026. F_UNASSIGNED, /* M-+ */
  1027. F_UNASSIGNED, /* M-, */
  1028. F_UNASSIGNED, /* M-- */
  1029. F_UNASSIGNED, /* M-. */
  1030. F_UNASSIGNED, /* M-/ */
  1031. F_UNASSIGNED, /* M-0 */
  1032. F_UNASSIGNED, /* M-1 */
  1033. F_UNASSIGNED, /* M-2 */
  1034. F_UNASSIGNED, /* M-3 */
  1035. F_UNASSIGNED, /* M-4 */
  1036. F_UNASSIGNED, /* M-5 */
  1037. F_UNASSIGNED, /* M-6 */
  1038. F_UNASSIGNED, /* M-7 */
  1039. F_UNASSIGNED, /* M-8 */
  1040. F_UNASSIGNED, /* M-9 */
  1041. F_UNASSIGNED, /* M-: */
  1042. F_UNASSIGNED, /* M-; */
  1043. F_UNASSIGNED, /* M-< */
  1044. F_UNASSIGNED, /* M-= */
  1045. F_UNASSIGNED, /* M-> */
  1046. F_HELPME, /* M-? */
  1047. F_UNASSIGNED, /* M-@ */
  1048. F_UNASSIGNED, /* M-A */
  1049. F_UNASSIGNED, /* M-B */
  1050. F_UNASSIGNED, /* M-C */
  1051. F_UNASSIGNED, /* M-D */
  1052. F_UNASSIGNED, /* M-E */
  1053. F_UNASSIGNED, /* M-F */
  1054. F_UNASSIGNED, /* M-G */
  1055. F_UNASSIGNED, /* M-H */
  1056. F_UNASSIGNED, /* M-I */
  1057. F_UNASSIGNED, /* M-J */
  1058. F_UNASSIGNED, /* M-K */
  1059. F_UNASSIGNED, /* M-L */
  1060. F_UNASSIGNED, /* M-M */
  1061. F_UNASSIGNED, /* M-N */
  1062. F_XKEY, /* M-O *//* extended key esc PWP Mar 88 */
  1063. F_UNASSIGNED, /* M-P */
  1064. F_UNASSIGNED, /* M-Q */
  1065. F_UNASSIGNED, /* M-R */
  1066. F_UNASSIGNED, /* M-S */
  1067. F_UNASSIGNED, /* M-T */
  1068. F_UNASSIGNED, /* M-U */
  1069. F_UNASSIGNED, /* M-V */
  1070. F_UNASSIGNED, /* M-W */
  1071. F_UNASSIGNED, /* M-X */
  1072. F_UNASSIGNED, /* M-Y */
  1073. F_UNASSIGNED, /* M-Z */
  1074. F_XKEY, /* M-[ *//* extended key esc -mf Oct 87 */
  1075. F_UNASSIGNED, /* M-\ */
  1076. F_UNASSIGNED, /* M-] */
  1077. F_UNASSIGNED, /* M-^ */
  1078. F_UNASSIGNED, /* M-_ */
  1079. F_UNASSIGNED, /* M-` */
  1080. F_UNASSIGNED, /* M-a */
  1081. F_UNASSIGNED, /* M-b */
  1082. F_UNASSIGNED, /* M-c */
  1083. F_UNASSIGNED, /* M-d */
  1084. F_UNASSIGNED, /* M-e */
  1085. F_UNASSIGNED, /* M-f */
  1086. F_UNASSIGNED, /* M-g */
  1087. F_UNASSIGNED, /* M-h */
  1088. F_UNASSIGNED, /* M-i */
  1089. F_UNASSIGNED, /* M-j */
  1090. F_UNASSIGNED, /* M-k */
  1091. F_UNASSIGNED, /* M-l */
  1092. F_UNASSIGNED, /* M-m */
  1093. F_UNASSIGNED, /* M-n */
  1094. F_UNASSIGNED, /* M-o */
  1095. F_UNASSIGNED, /* M-p */
  1096. F_UNASSIGNED, /* M-q */
  1097. F_UNASSIGNED, /* M-r */
  1098. F_UNASSIGNED, /* M-s */
  1099. F_UNASSIGNED, /* M-t */
  1100. F_UNASSIGNED, /* M-u */
  1101. F_UNASSIGNED, /* M-v */
  1102. F_UNASSIGNED, /* M-w */
  1103. F_UNASSIGNED, /* M-x */
  1104. F_UNASSIGNED, /* M-y */
  1105. F_UNASSIGNED, /* M-z */
  1106. F_UNASSIGNED, /* M-{ */
  1107. F_UNASSIGNED, /* M-| */
  1108. F_UNASSIGNED, /* M-} */
  1109. F_UNASSIGNED, /* M-~ */
  1110. F_UNASSIGNED /* M-^? */
  1111. };
  1112. #endif /* WINNT_NATIVE */
  1113. void
  1114. editinit(void)
  1115. {
  1116. struct KeyFuncs *f;
  1117. #if defined(NLS_CATALOGS) || defined(WINNT_NATIVE)
  1118. int i;
  1119. for (i = 0; i < F_NUM_FUNCNAMES; i++)
  1120. xfree((ptr_t)(intptr_t)FuncNames[i].desc);
  1121. #endif
  1122. f = FuncNames;
  1123. f->name = "backward-char";
  1124. f->func = F_CHARBACK;
  1125. f->desc = CSAVS(3, 1, "Move back a character");
  1126. f++;
  1127. f->name = "backward-delete-char";
  1128. f->func = F_DELPREV;
  1129. f->desc = CSAVS(3, 2, "Delete the character behind cursor");
  1130. f++;
  1131. f->name = "backward-delete-word";
  1132. f->func = F_DELWORDPREV;
  1133. f->desc = CSAVS(3, 3,
  1134. "Cut from beginning of current word to cursor - saved in cut buffer");
  1135. f++;
  1136. f->name = "backward-kill-line";
  1137. f->func = F_KILLBEG;
  1138. f->desc = CSAVS(3, 4,
  1139. "Cut from beginning of line to cursor - save in cut buffer");
  1140. f++;
  1141. f->name = "backward-word";
  1142. f->func = F_WORDBACK;
  1143. f->desc = CSAVS(3, 5, "Move to beginning of current word");
  1144. f++;
  1145. f->name = "beginning-of-line";
  1146. f->func = F_TOBEG;
  1147. f->desc = CSAVS(3, 6, "Move to beginning of line");
  1148. f++;
  1149. f->name = "capitalize-word";
  1150. f->func = F_CASECAPITAL;
  1151. f->desc = CSAVS(3, 7,
  1152. "Capitalize the characters from cursor to end of current word");
  1153. f++;
  1154. f->name = "change-case";
  1155. f->func = V_CHGCASE;
  1156. f->desc = CSAVS(3, 8,
  1157. "Vi change case of character under cursor and advance one character");
  1158. f++;
  1159. f->name = "change-till-end-of-line";
  1160. f->func = V_CHGTOEND; /* backward compat. */
  1161. f->desc = CSAVS(3, 9, "Vi change to end of line");
  1162. f++;
  1163. f->name = "clear-screen";
  1164. f->func = F_CLEARDISP;
  1165. f->desc = CSAVS(3, 10, "Clear screen leaving current line on top");
  1166. f++;
  1167. f->name = "complete-word";
  1168. f->func = F_COMPLETE;
  1169. f->desc = CSAVS(3, 11, "Complete current word");
  1170. f++;
  1171. f->name = "complete-word-fwd";
  1172. f->func = F_COMPLETE_FWD;
  1173. f->desc = CSAVS(3, 12, "Tab forward through files");
  1174. f++;
  1175. f->name = "complete-word-back";
  1176. f->func = F_COMPLETE_BACK;
  1177. f->desc = CSAVS(3, 13, "Tab backward through files");
  1178. f++;
  1179. f->name = "complete-word-raw";
  1180. f->func = F_COMPLETE_ALL;
  1181. f->desc = CSAVS(3, 14,
  1182. "Complete current word ignoring programmable completions");
  1183. f++;
  1184. f->name = "copy-prev-word";
  1185. f->func = F_COPYPREV;
  1186. f->desc = CSAVS(3, 15, "Copy current word to cursor");
  1187. f++;
  1188. f->name = "copy-region-as-kill";
  1189. f->func = F_COPYREGION;
  1190. f->desc = CSAVS(3, 16, "Copy area between mark and cursor to cut buffer");
  1191. f++;
  1192. f->name = "dabbrev-expand";
  1193. f->func = F_DABBREV_EXPAND;
  1194. f->desc = CSAVS(3, 17,
  1195. "Expand to preceding word for which this is a prefix");
  1196. f++;
  1197. f->name = "delete-char";
  1198. f->func = F_DELNEXT;
  1199. f->desc = CSAVS(3, 18, "Delete character under cursor");
  1200. f++;
  1201. f->name = "delete-char-or-eof";
  1202. f->func = F_DELNEXT_EOF;
  1203. f->desc = CSAVS(3, 19,
  1204. "Delete character under cursor or signal end of file on an empty line");
  1205. f++;
  1206. f->name = "delete-char-or-list";
  1207. f->func = F_DELNEXT_LIST;
  1208. f->desc = CSAVS(3, 20,
  1209. "Delete character under cursor or list completions if at end of line");
  1210. f++;
  1211. f->name = "delete-char-or-list-or-eof";
  1212. f->func = F_DELNEXT_LIST_EOF;
  1213. f->desc = CSAVS(3, 21,
  1214. "Delete character under cursor, list completions or signal end of file");
  1215. f++;
  1216. f->name = "delete-word";
  1217. f->func = F_DELWORDNEXT;
  1218. f->desc = CSAVS(3, 22,
  1219. "Cut from cursor to end of current word - save in cut buffer");
  1220. f++;
  1221. f->name = "digit";
  1222. f->func = F_DIGIT;
  1223. f->desc = CSAVS(3, 23, "Adds to argument if started or enters digit");
  1224. f++;
  1225. f->name = "digit-argument";
  1226. f->func = F_ARGDIGIT;
  1227. f->desc = CSAVS(3, 24, "Digit that starts argument");
  1228. f++;
  1229. f->name = "down-history";
  1230. f->func = F_DOWN_HIST;
  1231. f->desc = CSAVS(3, 25, "Move to next history line");
  1232. f++;
  1233. f->name = "downcase-word";
  1234. f->func = F_CASELOWER;
  1235. f->desc = CSAVS(3, 26,
  1236. "Lowercase the characters from cursor to end of current word");
  1237. f++;
  1238. f->name = "end-of-file";
  1239. f->func = F_SEND_EOF;
  1240. f->desc = CSAVS(3, 27, "Indicate end of file");
  1241. f++;
  1242. f->name = "end-of-line";
  1243. f->func = F_TOEND;
  1244. f->desc = CSAVS(3, 28, "Move cursor to end of line");
  1245. f++;
  1246. f->name = "exchange-point-and-mark";
  1247. f->func = F_EXCHANGE_MARK;
  1248. f->desc = CSAVS(3, 29, "Exchange the cursor and mark");
  1249. f++;
  1250. f->name = "expand-glob";
  1251. f->func = F_EXPAND_GLOB;
  1252. f->desc = CSAVS(3, 30, "Expand file name wildcards");
  1253. f++;
  1254. f->name = "expand-history";
  1255. f->func = F_EXPAND_HISTORY;
  1256. f->desc = CSAVS(3, 31, "Expand history escapes");
  1257. f++;
  1258. f->name = "expand-line";
  1259. f->func = F_EXPAND;
  1260. f->desc = CSAVS(3, 32, "Expand the history escapes in a line");
  1261. f++;
  1262. f->name = "expand-variables";
  1263. f->func = F_EXPAND_VARS;
  1264. f->desc = CSAVS(3, 33, "Expand variables");
  1265. f++;
  1266. f->name = "forward-char";
  1267. f->func = F_CHARFWD;
  1268. f->desc = CSAVS(3, 34, "Move forward one character");
  1269. f++;
  1270. f->name = "forward-word";
  1271. f->func = F_WORDFWD;
  1272. f->desc = CSAVS(3, 35, "Move forward to end of current word");
  1273. f++;
  1274. f->name = "gosmacs-transpose-chars";
  1275. f->func = F_GCHARSWITCH;
  1276. f->desc = CSAVS(3, 36, "Exchange the two characters before the cursor");
  1277. f++;
  1278. f->name = "history-search-backward";
  1279. f->func = F_UP_SEARCH_HIST;
  1280. f->desc = CSAVS(3, 37,
  1281. "Search in history backward for line beginning as current");
  1282. f++;
  1283. f->name = "history-search-forward";
  1284. f->func = F_DOWN_SEARCH_HIST;
  1285. f->desc = CSAVS(3, 38,
  1286. "Search in history forward for line beginning as current");
  1287. f++;
  1288. f->name = "insert-last-word";
  1289. f->func = F_LAST_ITEM;
  1290. f->desc = CSAVS(3, 39, "Insert last item of previous command");
  1291. f++;
  1292. f->name = "i-search-fwd";
  1293. f->func = F_INC_FWD;
  1294. f->desc = CSAVS(3, 40, "Incremental search forward");
  1295. f++;
  1296. f->name = "i-search-back";
  1297. f->func = F_INC_BACK;
  1298. f->desc = CSAVS(3, 41, "Incremental search backward");
  1299. f++;
  1300. f->name = "keyboard-quit";
  1301. f->func = F_STARTOVER;
  1302. f->desc = CSAVS(3, 42, "Clear line");
  1303. f++;
  1304. f->name = "kill-line";
  1305. f->func = F_KILLEND;
  1306. f->desc = CSAVS(3, 43, "Cut to end of line and save in cut buffer");
  1307. f++;
  1308. f->name = "kill-region";
  1309. f->func = F_KILLREGION;
  1310. f->desc = CSAVS(3, 44,
  1311. "Cut area between mark and cursor and save in cut buffer");
  1312. f++;
  1313. f->name = "kill-whole-line";
  1314. f->func = F_KILLALL;
  1315. f->desc = CSAVS(3, 45, "Cut the entire line and save in cut buffer");
  1316. f++;
  1317. f->name = "list-choices";
  1318. f->func = F_LIST_CHOICES;
  1319. f->desc = CSAVS(3, 46, "List choices for completion");
  1320. f++;
  1321. f->name = "list-choices-raw";
  1322. f->func = F_LIST_ALL;
  1323. f->desc = CSAVS(3, 47,
  1324. "List choices for completion overriding programmable completion");
  1325. f++;
  1326. f->name = "list-glob";
  1327. f->func = F_LIST_GLOB;
  1328. f->desc = CSAVS(3, 48, "List file name wildcard matches");
  1329. f++;
  1330. f->name = "list-or-eof";
  1331. f->func = F_LIST_EOF;
  1332. f->desc = CSAVS(3, 49,
  1333. "List choices for completion or indicate end of file if empty line");
  1334. f++;
  1335. f->name = "load-average";
  1336. f->func = F_LOAD_AVERAGE;
  1337. f->desc = CSAVS(3, 50, "Display load average and current process status");
  1338. f++;
  1339. f->name = "magic-space";
  1340. f->func = F_MAGIC_SPACE;
  1341. f->desc = CSAVS(3, 51, "Expand history escapes and insert a space");
  1342. f++;
  1343. f->name = "newline";
  1344. f->func = F_NEWLINE;
  1345. f->desc = CSAVS(3, 52, "Execute command");
  1346. f++;
  1347. f->name = "newline-and-hold";
  1348. f->func = F_NEWLINE_HOLD;
  1349. f->desc = CSAVS(3, 122, "Execute command and keep current line");
  1350. f++;
  1351. f->name = "newline-and-down-history";
  1352. f->func = F_NEWLINE_DOWN_HIST;
  1353. f->desc = CSAVS(3, 123, "Execute command and move to next history line");
  1354. f++;
  1355. f->name = "normalize-path";
  1356. f->func = F_PATH_NORM;
  1357. f->desc = CSAVS(3, 53,
  1358. "Expand pathnames, eliminating leading .'s and ..'s");
  1359. f++;
  1360. f->name = "normalize-command";
  1361. f->func = F_COMMAND_NORM;
  1362. f->desc = CSAVS(3, 54,
  1363. "Expand commands to the resulting pathname or alias");
  1364. f++;
  1365. f->name = "overwrite-mode";
  1366. f->func = F_INSOVR;
  1367. f->desc = CSAVS(3, 55,
  1368. "Switch from insert to overwrite mode or vice versa");
  1369. f++;
  1370. f->name = "prefix-meta";
  1371. f->func = F_METANEXT;
  1372. f->desc = CSAVS(3, 56, "Add 8th bit to next character typed");
  1373. f++;
  1374. f->name = "quoted-insert";
  1375. f->func = F_QUOTE;
  1376. f->desc = CSAVS(3, 57, "Add the next character typed to the line verbatim");
  1377. f++;
  1378. f->name = "redisplay";
  1379. f->func = F_REDISP;
  1380. f->desc = CSAVS(3, 58, "Redisplay everything");
  1381. f++;
  1382. f->name = "run-fg-editor";
  1383. f->func = F_RUN_FG_EDITOR;
  1384. f->desc = CSAVS(3, 59, "Restart stopped editor");
  1385. f++;
  1386. f->name = "run-help";
  1387. f->func = F_HELPME;
  1388. f->desc = CSAVS(3, 60, "Look for help on current command");
  1389. f++;
  1390. f->name = "self-insert-command";
  1391. f->func = F_INSERT;
  1392. f->desc = CSAVS(3, 61, "This character is added to the line");
  1393. f++;
  1394. f->name = "sequence-lead-in";
  1395. f->func = F_XKEY;
  1396. f->desc = CSAVS(3, 62,
  1397. "This character is the first in a character sequence");
  1398. f++;
  1399. f->name = "set-mark-command";
  1400. f->func = F_SET_MARK;
  1401. f->desc = CSAVS(3, 63, "Set the mark at cursor");
  1402. f++;
  1403. f->name = "spell-word";
  1404. f->func = F_CORRECT;
  1405. f->desc = CSAVS(3, 64, "Correct the spelling of current word");
  1406. f++;
  1407. f->name = "spell-line";
  1408. f->func = F_CORRECT_L;
  1409. f->desc = CSAVS(3, 65, "Correct the spelling of entire line");
  1410. f++;
  1411. f->name = "stuff-char";
  1412. f->func = F_STUFF_CHAR;
  1413. f->desc = CSAVS(3, 66, "Send character to tty in cooked mode");
  1414. f++;
  1415. f->name = "toggle-literal-history";
  1416. f->func = F_TOGGLE_HIST;
  1417. f->desc = CSAVS(3, 67,
  1418. "Toggle between literal and lexical current history line");
  1419. f++;
  1420. f->name = "transpose-chars";
  1421. f->func = F_CHARSWITCH;
  1422. f->desc = CSAVS(3, 68,
  1423. "Exchange the character to the left of the cursor with the one under");
  1424. f++;
  1425. f->name = "transpose-gosling";
  1426. f->func = F_GCHARSWITCH;
  1427. f->desc = CSAVS(3, 69, "Exchange the two characters before the cursor");
  1428. f++;
  1429. f->name = "tty-dsusp";
  1430. f->func = F_TTY_DSUSP;
  1431. f->desc = CSAVS(3, 70, "Tty delayed suspend character");
  1432. f++;
  1433. f->name = "tty-flush-output";
  1434. f->func = F_TTY_FLUSHO;
  1435. f->desc = CSAVS(3, 71, "Tty flush output character");
  1436. f++;
  1437. f->name = "tty-sigintr";
  1438. f->func = F_TTY_INT;
  1439. f->desc = CSAVS(3, 72, "Tty interrupt character");
  1440. f++;
  1441. f->name = "tty-sigquit";
  1442. f->func = F_TTY_QUIT;
  1443. f->desc = CSAVS(3, 73, "Tty quit character");
  1444. f++;
  1445. f->name = "tty-sigtsusp";
  1446. f->func = F_TTY_TSUSP;
  1447. f->desc = CSAVS(3, 74, "Tty suspend character");
  1448. f++;
  1449. f->name = "tty-start-output";
  1450. f->func = F_TTY_STARTO;
  1451. f->desc = CSAVS(3, 75, "Tty allow output character");
  1452. f++;
  1453. f->name = "tty-stop-output";
  1454. f->func = F_TTY_STOPO;
  1455. f->desc = CSAVS(3, 76, "Tty disallow output character");
  1456. f++;
  1457. f->name = "undefined-key";
  1458. f->func = F_UNASSIGNED;
  1459. f->desc = CSAVS(3, 77, "Indicates unbound character");
  1460. f++;
  1461. f->name = "universal-argument";
  1462. f->func = F_ARGFOUR;
  1463. f->desc = CSAVS(3, 78, "Emacs universal argument (argument times 4)");
  1464. f++;
  1465. f->name = "up-history";
  1466. f->func = F_UP_HIST;
  1467. f->desc = CSAVS(3, 79, "Move to previous history line");
  1468. f++;
  1469. f->name = "upcase-word";
  1470. f->func = F_CASEUPPER;
  1471. f->desc = CSAVS(3, 80,
  1472. "Uppercase the characters from cursor to end of current word");
  1473. f++;
  1474. f->name = "vi-beginning-of-next-word";
  1475. f->func = V_WORDBEGNEXT;
  1476. f->desc = CSAVS(3, 81, "Vi goto the beginning of next word");
  1477. f++;
  1478. f->name = "vi-add";
  1479. f->func = V_ADD;
  1480. f->desc = CSAVS(3, 82, "Vi enter insert mode after the cursor");
  1481. f++;
  1482. f->name = "vi-add-at-eol";
  1483. f->func = V_ADDEND;
  1484. f->desc = CSAVS(3, 83, "Vi enter insert mode at end of line");
  1485. f++;
  1486. f->name = "vi-chg-case";
  1487. f->func = V_CHGCASE;
  1488. f->desc = CSAVS(3, 84,
  1489. "Vi change case of character under cursor and advance one character");
  1490. f++;
  1491. f->name = "vi-chg-meta";
  1492. f->func = V_CHGMETA;
  1493. f->desc = CSAVS(3, 85, "Vi change prefix command");
  1494. f++;
  1495. f->name = "vi-chg-to-eol";
  1496. f->func = V_CHGTOEND;
  1497. f->desc = CSAVS(3, 86, "Vi change to end of line");
  1498. f++;
  1499. f->name = "vi-cmd-mode";
  1500. f->func = V_CMD_MODE;
  1501. f->desc = CSAVS(3, 87,
  1502. "Enter vi command mode (use alternative key bindings)");
  1503. f++;
  1504. f->name = "vi-cmd-mode-complete";
  1505. f->func = V_CM_COMPLETE;
  1506. f->desc = CSAVS(3, 88, "Vi command mode complete current word");
  1507. f++;
  1508. f->name = "vi-delprev";
  1509. f->func = V_DELPREV;
  1510. f->desc = CSAVS(3, 89, "Vi move to previous character (backspace)");
  1511. f++;
  1512. f->name = "vi-delmeta";
  1513. f->func = V_DELMETA;
  1514. f->desc = CSAVS(3, 90, "Vi delete prefix command");
  1515. f++;
  1516. f->name = "vi-endword";
  1517. f->func = V_ENDWORD;
  1518. f->desc = CSAVS(3, 91,
  1519. "Vi move to the end of the current space delimited word");
  1520. f++;
  1521. f->name = "vi-eword";
  1522. f->func = V_EWORD;
  1523. f->desc = CSAVS(3, 92, "Vi move to the end of the current word");
  1524. f++;
  1525. f->name = "vi-char-back";
  1526. f->func = V_CHAR_BACK;
  1527. f->desc = CSAVS(3, 93, "Vi move to the character specified backward");
  1528. f++;
  1529. f->name = "vi-char-fwd";
  1530. f->func = V_CHAR_FWD;
  1531. f->desc = CSAVS(3, 94, "Vi move to the character specified forward");
  1532. f++;
  1533. f->name = "vi-charto-back";
  1534. f->func = V_CHARTO_BACK;
  1535. f->desc = CSAVS(3, 95, "Vi move up to the character specified backward");
  1536. f++;
  1537. f->name = "vi-charto-fwd";
  1538. f->func = V_CHARTO_FWD;
  1539. f->desc = CSAVS(3, 96, "Vi move up to the character specified forward");
  1540. f++;
  1541. f->name = "vi-insert";
  1542. f->func = V_INSERT;
  1543. f->desc = CSAVS(3, 97, "Enter vi insert mode");
  1544. f++;
  1545. f->name = "vi-insert-at-bol";
  1546. f->func = V_INSBEG;
  1547. f->desc = CSAVS(3, 98, "Enter vi insert mode at beginning of line");
  1548. f++;
  1549. f->name = "vi-repeat-char-fwd";
  1550. f->func = V_RCHAR_FWD;
  1551. f->desc = CSAVS(3, 99,
  1552. "Vi repeat current character search in the same search direction");
  1553. f++;
  1554. f->name = "vi-repeat-char-back";
  1555. f->func = V_RCHAR_BACK;
  1556. f->desc = CSAVS(3, 100,
  1557. "Vi repeat current character search in the opposite search direction");
  1558. f++;
  1559. f->name = "vi-repeat-search-fwd";
  1560. f->func = V_RSRCH_FWD;
  1561. f->desc = CSAVS(3, 101,
  1562. "Vi repeat current search in the same search direction");
  1563. f++;
  1564. f->name = "vi-repeat-search-back";
  1565. f->func = V_RSRCH_BACK;
  1566. f->desc = CSAVS(3, 102,
  1567. "Vi repeat current search in the opposite search direction");
  1568. f++;
  1569. f->name = "vi-replace-char";
  1570. f->func = V_REPLONE;
  1571. f->desc = CSAVS(3, 103,
  1572. "Vi replace character under the cursor with the next character typed");
  1573. f++;
  1574. f->name = "vi-replace-mode";
  1575. f->func = V_REPLMODE;
  1576. f->desc = CSAVS(3, 104, "Vi replace mode");
  1577. f++;
  1578. f->name = "vi-search-back";
  1579. f->func = V_USH_META;
  1580. f->desc = CSAVS(3, 105, "Vi search history backward");
  1581. f++;
  1582. f->name = "vi-search-fwd";
  1583. f->func = V_DSH_META;
  1584. f->desc = CSAVS(3, 106, "Vi search history forward");
  1585. f++;
  1586. f->name = "vi-substitute-char";
  1587. f->func = V_SUBSTCHAR;
  1588. f->desc = CSAVS(3, 107,
  1589. "Vi replace character under the cursor and enter insert mode");
  1590. f++;
  1591. f->name = "vi-substitute-line";
  1592. f->func = V_SUBSTLINE;
  1593. f->desc = CSAVS(3, 108, "Vi replace entire line");
  1594. f++;
  1595. f->name = "vi-word-back";
  1596. f->func = V_WORDBACK;
  1597. f->desc = CSAVS(3, 109, "Vi move to the previous word");
  1598. f++;
  1599. f->name = "vi-word-fwd";
  1600. f->func = V_WORDFWD;
  1601. f->desc = CSAVS(3, 110, "Vi move to the next word");
  1602. f++;
  1603. f->name = "vi-undo";
  1604. f->func = V_UNDO;
  1605. f->desc = CSAVS(3, 111, "Vi undo last change");
  1606. f++;
  1607. f->name = "vi-zero";
  1608. f->func = V_ZERO;
  1609. f->desc = CSAVS(3, 112, "Vi goto the beginning of line");
  1610. f++;
  1611. f->name = "which-command";
  1612. f->func = F_WHICH;
  1613. f->desc = CSAVS(3, 113, "Perform which of current command");
  1614. f++;
  1615. f->name = "yank";
  1616. f->func = F_YANK_KILL;
  1617. f->desc = CSAVS(3, 114, "Paste cut buffer at cursor position");
  1618. f++;
  1619. f->name = "yank-pop";
  1620. f->func = F_YANK_POP;
  1621. f->desc = CSAVS(3, 115,
  1622. "Replace just-yanked text with yank from earlier kill");
  1623. f++;
  1624. f->name = "e_copy_to_clipboard";
  1625. f->func = F_COPY_CLIP;
  1626. f->desc = CSAVS(3, 116,
  1627. "(WIN32 only) Copy cut buffer to system clipboard");
  1628. f++;
  1629. f->name = "e_paste_from_clipboard";
  1630. f->func = F_PASTE_CLIP;
  1631. f->desc = CSAVS(3, 117,
  1632. "(WIN32 only) Paste clipboard buffer at cursor position");
  1633. f++;
  1634. f->name = "e_dosify_next";
  1635. f->func = F_DOSIFY_NEXT;
  1636. f->desc = CSAVS(3, 118,
  1637. "(WIN32 only) Convert each '/' in next word to '\\\\'");
  1638. f++;
  1639. f->name = "e_dosify_prev";
  1640. f->func = F_DOSIFY_PREV;
  1641. f->desc = CSAVS(3, 119,
  1642. "(WIN32 only) Convert each '/' in previous word to '\\\\'");
  1643. f++;
  1644. f->name = "e_page_up";
  1645. f->func = F_PAGE_UP;
  1646. f->desc = CSAVS(3, 120, "(WIN32 only) Page visible console window up");
  1647. f++;
  1648. f->name = "e_page_down";
  1649. f->func = F_PAGE_DOWN;
  1650. f->desc = CSAVS(3, 121, "(WIN32 only) Page visible console window down");
  1651. f++;
  1652. f->name = NULL;
  1653. f->func = 0;
  1654. f->desc = NULL;
  1655. f++;
  1656. if (f - FuncNames != F_NUM_FUNCNAMES)
  1657. abort();
  1658. }
  1659. #ifdef DEBUG_EDIT
  1660. void
  1661. CheckMaps(void)
  1662. { /* check the size of the key maps */
  1663. int c1 = (NT_NUM_KEYS * sizeof(KEYCMD));
  1664. if ((sizeof(CcKeyMap)) != c1)
  1665. xprintf("CcKeyMap should be %d entries, but is %d.\r\n",
  1666. NT_NUM_KEYS, sizeof(CcKeyMap) / sizeof(KEYCMD)));
  1667. if ((sizeof(CcAltMap)) != c1)
  1668. xprintf("CcAltMap should be %d entries, but is %d.\r\n",
  1669. NT_NUM_KEYS, (sizeof(CcAltMap) / sizeof(KEYCMD)));
  1670. if ((sizeof(CcEmacsMap)) != c1)
  1671. xprintf("CcEmacsMap should be %d entries, but is %d.\r\n",
  1672. NT_NUM_KEYS, (sizeof(CcEmacsMap) / sizeof(KEYCMD)));
  1673. if ((sizeof(CcViMap)) != c1)
  1674. xprintf("CcViMap should be %d entries, but is %d.\r\n",
  1675. NT_NUM_KEYS, (sizeof(CcViMap) / sizeof(KEYCMD)));
  1676. if ((sizeof(CcViCmdMap)) != c1)
  1677. xprintf("CcViCmdMap should be %d entries, but is %d.\r\n",
  1678. NT_NUM_KEYS, (sizeof(CcViCmdMap) / sizeof(KEYCMD)));
  1679. }
  1680. #endif
  1681. int MapsAreInited = 0;
  1682. int NLSMapsAreInited = 0;
  1683. int NoNLSRebind;
  1684. void
  1685. ed_InitNLSMaps(void)
  1686. {
  1687. int i;
  1688. if (AsciiOnly)
  1689. return;
  1690. if (NoNLSRebind)
  1691. return;
  1692. for (i = 0200; i <= 0377; i++) {
  1693. if (Isprint(CTL_ESC(i))) {
  1694. CcKeyMap[CTL_ESC(i)] = F_INSERT;
  1695. }
  1696. }
  1697. NLSMapsAreInited = 1;
  1698. }
  1699. static void
  1700. ed_InitMetaBindings(void)
  1701. {
  1702. Char buf[3];
  1703. int i;
  1704. CStr cstr;
  1705. KEYCMD *map;
  1706. map = CcKeyMap;
  1707. for (i = 0; i <= 0377 && CcKeyMap[CTL_ESC(i)] != F_METANEXT; i++)
  1708. continue;
  1709. if (i > 0377) {
  1710. for (i = 0; i <= 0377 && CcAltMap[CTL_ESC(i)] != F_METANEXT; i++)
  1711. continue;
  1712. if (i > 0377) {
  1713. i = '\033';
  1714. if (VImode)
  1715. map = CcAltMap;
  1716. }
  1717. else {
  1718. map = CcAltMap;
  1719. }
  1720. }
  1721. buf[0] = (Char)CTL_ESC(i);
  1722. buf[2] = 0;
  1723. cstr.buf = buf;
  1724. cstr.len = 2;
  1725. for (i = 0200; i <= 0377; i++) {
  1726. if (map[CTL_ESC(i)] != F_INSERT && map[CTL_ESC(i)] != F_UNASSIGNED && map[CTL_ESC(i)] != F_XKEY) {
  1727. buf[1] = CTL_ESC(i & ASCII);
  1728. AddXkey(&cstr, XmapCmd((int) map[CTL_ESC(i)]), XK_CMD);
  1729. }
  1730. }
  1731. map[buf[0]] = F_XKEY;
  1732. }
  1733. void
  1734. ed_InitVIMaps(void)
  1735. {
  1736. int i;
  1737. VImode = 1;
  1738. ResetXmap();
  1739. for (i = 0; i < NT_NUM_KEYS; i++) {
  1740. CcKeyMap[i] = CcViMap[i];
  1741. CcAltMap[i] = CcViCmdMap[i];
  1742. }
  1743. ed_InitMetaBindings();
  1744. ed_InitNLSMaps();
  1745. ResetArrowKeys();
  1746. BindArrowKeys();
  1747. }
  1748. void
  1749. ed_InitEmacsMaps(void)
  1750. {
  1751. int i;
  1752. Char buf[3];
  1753. CStr cstr;
  1754. cstr.buf = buf;
  1755. cstr.len = 2;
  1756. VImode = 0;
  1757. ResetXmap();
  1758. for (i = 0; i < NT_NUM_KEYS; i++) {
  1759. CcKeyMap[i] = CcEmacsMap[i];
  1760. CcAltMap[i] = F_UNASSIGNED;
  1761. }
  1762. ed_InitMetaBindings();
  1763. ed_InitNLSMaps();
  1764. buf[0] = CTL_ESC('\030');
  1765. buf[2] = 0;
  1766. buf[1] = CTL_ESC('\030');
  1767. AddXkey(&cstr, XmapCmd(F_EXCHANGE_MARK), XK_CMD);
  1768. buf[1] = '*';
  1769. AddXkey(&cstr, XmapCmd(F_EXPAND_GLOB), XK_CMD);
  1770. buf[1] = '$';
  1771. AddXkey(&cstr, XmapCmd(F_EXPAND_VARS), XK_CMD);
  1772. buf[1] = 'G';
  1773. AddXkey(&cstr, XmapCmd(F_LIST_GLOB), XK_CMD);
  1774. buf[1] = 'g';
  1775. AddXkey(&cstr, XmapCmd(F_LIST_GLOB), XK_CMD);
  1776. buf[1] = 'n';
  1777. AddXkey(&cstr, XmapCmd(F_PATH_NORM), XK_CMD);
  1778. buf[1] = 'N';
  1779. AddXkey(&cstr, XmapCmd(F_PATH_NORM), XK_CMD);
  1780. buf[1] = '?';
  1781. AddXkey(&cstr, XmapCmd(F_COMMAND_NORM), XK_CMD);
  1782. buf[1] = '\t';
  1783. AddXkey(&cstr, XmapCmd(F_COMPLETE_ALL), XK_CMD);
  1784. buf[1] = CTL_ESC('\004'); /* ^D */
  1785. AddXkey(&cstr, XmapCmd(F_LIST_ALL), XK_CMD);
  1786. ResetArrowKeys();
  1787. BindArrowKeys();
  1788. }
  1789. void
  1790. ed_InitMaps(void)
  1791. {
  1792. if (MapsAreInited)
  1793. return;
  1794. #ifndef IS_ASCII
  1795. /* This machine has an EBCDIC charset. The assumptions made for the
  1796. * initialized keymaps therefore don't hold, since they are based on
  1797. * ASCII (or ISO8859-1).
  1798. * Here, we do a one-time transformation to EBCDIC environment
  1799. * for the key initializations.
  1800. */
  1801. {
  1802. KEYCMD temp[NT_NUM_KEYS];
  1803. static KEYCMD *const list[3] = { CcEmacsMap, CcViMap, CcViCmdMap };
  1804. int i, table;
  1805. for (table=0; table<3; ++table)
  1806. {
  1807. /* copy ASCII ordered map to temp table */
  1808. for (i = 0; i < NT_NUM_KEYS; i++) {
  1809. temp[i] = list[table][i];
  1810. }
  1811. /* write back as EBCDIC ordered map */
  1812. for (i = 0; i < NT_NUM_KEYS; i++) {
  1813. list[table][_toebcdic[i]] = temp[i];
  1814. }
  1815. }
  1816. }
  1817. #endif /* !IS_ASCII */
  1818. #ifdef VIDEFAULT
  1819. ed_InitVIMaps();
  1820. #else
  1821. ed_InitEmacsMaps();
  1822. #endif
  1823. MapsAreInited = 1;
  1824. }