keybind-defaults.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. /*
  2. Default values for keybinding engine
  3. Copyright (C) 2009-2020
  4. Free Software Foundation, Inc.
  5. Written by:
  6. Vitja Makarov, 2005
  7. Ilia Maslakov <il.smind@gmail.com>, 2009, 2010
  8. Andrew Borodin <aborodin@vmail.ru>, 2010, 2011
  9. This file is part of the Midnight Commander.
  10. The Midnight Commander is free software: you can redistribute it
  11. and/or modify it under the terms of the GNU General Public License as
  12. published by the Free Software Foundation, either version 3 of the License,
  13. or (at your option) any later version.
  14. The Midnight Commander is distributed in the hope that it will be useful,
  15. but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. GNU General Public License for more details.
  18. You should have received a copy of the GNU General Public License
  19. along with this program. If not, see <http://www.gnu.org/licenses/>.
  20. */
  21. #include <config.h>
  22. #include "lib/global.h"
  23. #include "lib/widget.h" /* dialog_map, input_map, listbox_map, menu_map, radio_map */
  24. #include "keybind-defaults.h"
  25. /*** global variables ****************************************************************************/
  26. GArray *main_keymap = NULL;
  27. GArray *main_x_keymap = NULL;
  28. GArray *panel_keymap = NULL;
  29. GArray *dialog_keymap = NULL;
  30. GArray *menu_keymap = NULL;
  31. GArray *input_keymap = NULL;
  32. GArray *listbox_keymap = NULL;
  33. GArray *radio_keymap = NULL;
  34. GArray *tree_keymap = NULL;
  35. GArray *help_keymap = NULL;
  36. #ifdef ENABLE_EXT2FS_ATTR
  37. GArray *chattr_keymap = NULL;
  38. #endif
  39. #ifdef USE_INTERNAL_EDIT
  40. GArray *editor_keymap = NULL;
  41. GArray *editor_x_keymap = NULL;
  42. #endif
  43. GArray *viewer_keymap = NULL;
  44. GArray *viewer_hex_keymap = NULL;
  45. #ifdef USE_DIFF_VIEW
  46. GArray *diff_keymap = NULL;
  47. #endif
  48. const global_keymap_t *main_map = NULL;
  49. const global_keymap_t *main_x_map = NULL;
  50. const global_keymap_t *panel_map = NULL;
  51. const global_keymap_t *tree_map = NULL;
  52. const global_keymap_t *help_map = NULL;
  53. #ifdef ENABLE_EXT2FS_ATTR
  54. const global_keymap_t *chattr_map = NULL;
  55. #endif
  56. #ifdef USE_INTERNAL_EDIT
  57. const global_keymap_t *editor_map = NULL;
  58. const global_keymap_t *editor_x_map = NULL;
  59. #endif
  60. const global_keymap_t *viewer_map = NULL;
  61. const global_keymap_t *viewer_hex_map = NULL;
  62. #ifdef USE_DIFF_VIEW
  63. const global_keymap_t *diff_map = NULL;
  64. #endif
  65. /*** file scope macro definitions ****************************************************************/
  66. /*** file scope type declarations ****************************************************************/
  67. /* default keymaps in ini (key=value) format */
  68. typedef struct global_keymap_ini_t
  69. {
  70. const char *key;
  71. const char *value;
  72. } global_keymap_ini_t;
  73. /*** file scope variables ************************************************************************/
  74. /* midnight */
  75. static const global_keymap_ini_t default_main_keymap[] = {
  76. {"ChangePanel", "tab"},
  77. {"Help", "f1"},
  78. {"UserMenu", "f2"},
  79. {"View", "f3"},
  80. {"Edit", "f4"},
  81. {"Copy", "f5"},
  82. {"Move", "f6"},
  83. {"MakeDir", "f7"},
  84. {"Delete", "f8"},
  85. {"Menu", "f9"},
  86. {"Quit", "f10"},
  87. {"MenuLastSelected", "f19"},
  88. {"QuitQuiet", "f20"},
  89. {"History", "alt-h"},
  90. {"EditorViewerHistory", "alt-shift-e"},
  91. {"DirSize", "ctrl-space"},
  92. /* Copy useful information to the command line */
  93. {"PutCurrentPath", "alt-a"},
  94. {"PutOtherPath", "alt-shift-a"},
  95. {"PutCurrentSelected", "alt-enter; ctrl-enter"},
  96. {"PutCurrentFullSelected", "ctrl-shift-enter"},
  97. {"CdQuick", "alt-c"},
  98. /* To access the directory hotlist */
  99. {"HotList", "ctrl-backslash"},
  100. /* Suspend */
  101. {"Suspend", "ctrl-z"},
  102. /* The filtered view command */
  103. {"ViewFiltered", "alt-exclamation"},
  104. /* Find file */
  105. {"Find", "alt-question"},
  106. /* Panel refresh */
  107. {"Reread", "ctrl-r"},
  108. /* Switch listing between long, user defined and full formats */
  109. /* Swap panels */
  110. {"Swap", "ctrl-u"},
  111. /* Resize panels */
  112. {"SplitEqual", "alt-equal"},
  113. {"SplitMore", "alt-shift-right"},
  114. {"SplitLess", "alt-shift-left"},
  115. /* View output */
  116. {"Shell", "ctrl-o"},
  117. {"ShowHidden", "alt-dot"},
  118. {"SplitVertHoriz", "alt-comma"},
  119. {"ExtendedKeyMap", "ctrl-x"},
  120. /* Select/unselect group */
  121. {"Select", "kpplus"},
  122. {"Unselect", "kpminus"},
  123. {"SelectInvert", "kpasterisk"},
  124. /* List of screens */
  125. {"ScreenList", "alt-prime"},
  126. {NULL, NULL}
  127. };
  128. static const global_keymap_ini_t default_main_x_keymap[] = {
  129. {"CompareDirs", "d"},
  130. #ifdef USE_DIFF_VIEW
  131. {"CompareFiles", "ctrl-d"},
  132. #endif /* USE_DIFF_VIEW */
  133. #ifdef ENABLE_VFS
  134. {"VfsList", "a"},
  135. #endif /* ENABLE_VFS */
  136. {"PutCurrentPath", "p"},
  137. {"PutOtherPath", "ctrl-p"},
  138. {"PutCurrentTagged", "t"},
  139. {"PutOtherTagged", "ctrl-t"},
  140. {"ChangeMode", "c"},
  141. {"ChangeOwn", "o"},
  142. #ifdef ENABLE_EXT2FS_ATTR
  143. {"ChangeAttributes", "e"},
  144. #endif /* ENABLE_EXT2FS_ATTR */
  145. {"PutCurrentLink", "r"},
  146. {"PutOtherLink", "ctrl-r"},
  147. {"Link", "l"},
  148. {"LinkSymbolic", "s"},
  149. {"LinkSymbolicRelative", "v"},
  150. {"LinkSymbolicEdit", "ctrl-s"},
  151. {"PanelInfo", "i"},
  152. {"PanelQuickView", "q"},
  153. {"HotListAdd", "h"},
  154. #ifdef ENABLE_BACKGROUND
  155. {"Jobs", "j"},
  156. #endif /* ENABLE_BACKGROUND */
  157. {"ExternalPanelize", "!"},
  158. {NULL, NULL}
  159. };
  160. /* panel */
  161. static const global_keymap_ini_t default_panel_keymap[] = {
  162. {"CycleListingFormat", "alt-t"},
  163. {"PanelOtherCd", "alt-o"},
  164. {"PanelOtherCdLink", "alt-l"},
  165. {"CopySingle", "f15"},
  166. {"DeleteSingle", "f18"},
  167. {"Enter", "enter"},
  168. {"EditNew", "f14"},
  169. {"MoveSingle", "f16"},
  170. {"SelectInvert", "alt-asterisk"},
  171. {"Select", "alt-plus"},
  172. {"Unselect", "alt-minus"},
  173. {"ViewRaw", "f13"},
  174. {"CdChild", "ctrl-pgdn"},
  175. {"CdParent", "ctrl-pgup"},
  176. {"History", "alt-shift-h"},
  177. {"HistoryNext", "alt-u"},
  178. {"HistoryPrev", "alt-y"},
  179. {"BottomOnScreen", "alt-j"},
  180. {"MiddleOnScreen", "alt-r"},
  181. {"TopOnScreen", "alt-g"},
  182. {"Mark", "insert; ctrl-t"},
  183. {"MarkDown", "shift-down"},
  184. {"MarkUp", "shift-up"},
  185. {"Up", "up; ctrl-p"},
  186. {"Down", "down; ctrl-n"},
  187. {"Left", "left"},
  188. {"Right", "right"},
  189. {"Top", "alt-lt; home; a1"},
  190. {"Bottom", "alt-gt; end; c1"},
  191. {"PageDown", "pgdn; ctrl-v"},
  192. {"PageUp", "pgup; alt-v"},
  193. #ifdef HAVE_CHARSET
  194. {"SelectCodepage", "alt-e"},
  195. #endif
  196. {"Search", "ctrl-s; alt-s"},
  197. {"PanelOtherSync", "alt-i"},
  198. {NULL, NULL}
  199. };
  200. /* dialog */
  201. static const global_keymap_ini_t default_dialog_keymap[] = {
  202. {"Ok", "enter"},
  203. {"Cancel", "f10; esc; ctrl-g"},
  204. {"Up", "up; left"},
  205. {"Down", "down; right"},
  206. #if 0
  207. {"Left", "up; left"},
  208. {"Right", "down; right"},
  209. #endif
  210. {"Help", "f1"},
  211. {"Suspend", "ctrl-z"},
  212. {"Refresh", "ctrl-l"},
  213. {"ScreenList", "alt-prime"},
  214. {"ScreenNext", "alt-rbrace"},
  215. {"ScreenPrev", "alt-lbrace"},
  216. {NULL, NULL}
  217. };
  218. /* menubar */
  219. static const global_keymap_ini_t default_menu_keymap[] = {
  220. {"Help", "f1"},
  221. {"Left", "left; ctrl-b"},
  222. {"Right", "right; ctrl-f"},
  223. {"Up", "up; ctrl-p"},
  224. {"Down", "down; ctrl-n"},
  225. {"Home", "home; alt-lt; ctrl-a"},
  226. {"End", "end; alt-gt; ctrl-e"},
  227. {"Enter", "enter"},
  228. {"Quit", "f10; ctrl-g; esc"},
  229. {NULL, NULL}
  230. };
  231. /* input line */
  232. static const global_keymap_ini_t default_input_keymap[] = {
  233. /* Motion */
  234. {"Home", "ctrl-a; alt-lt; home; a1"},
  235. {"End", "ctrl-e; alt-gt; end; c1"},
  236. {"Left", "left; alt-left; ctrl-b"},
  237. {"Right", "right; alt-right; ctrl-f"},
  238. {"WordLeft", "ctrl-left; alt-b"},
  239. {"WordRight", "ctrl-right; alt-f"},
  240. /* Mark */
  241. {"MarkLeft", "shift-left"},
  242. {"MarkRight", "shift-right"},
  243. {"MarkToWordBegin", "ctrl-shift-left"},
  244. {"MarkToWordEnd", "ctrl-shift-right"},
  245. {"MarkToHome", "shift-home"},
  246. {"MarkToEnd", "shift-end"},
  247. /* Editing */
  248. {"Backspace", "backspace; ctrl-h"},
  249. {"Delete", "delete; ctrl-d"},
  250. {"DeleteToWordEnd", "alt-d"},
  251. {"DeleteToWordBegin", "alt-backspace"},
  252. /* Region manipulation */
  253. {"Remove", "ctrl-w"},
  254. {"Store", "alt-w"},
  255. {"Yank", "ctrl-y"},
  256. {"DeleteToEnd", "ctrl-k"},
  257. /* History */
  258. {"History", "alt-h"},
  259. {"HistoryPrev", "alt-p; ctrl-down"},
  260. {"HistoryNext", "alt-n; ctrl-up"},
  261. /* Completion */
  262. {"Complete", "alt-tab"},
  263. {NULL, NULL}
  264. };
  265. /* listbox */
  266. static const global_keymap_ini_t default_listbox_keymap[] = {
  267. {"Up", "up; ctrl-p"},
  268. {"Down", "down; ctrl-n"},
  269. {"Top", "home; alt-lt; a1"},
  270. {"Bottom", "end; alt-gt; c1"},
  271. {"PageUp", "pgup; alt-v"},
  272. {"PageDown", "pgdn; ctrl-v"},
  273. {"Delete", "delete; d"},
  274. {"Clear", "shift-delete; shift-d"},
  275. {"View", "f3"},
  276. {"Edit", "f4"},
  277. {"Enter", "enter"},
  278. {NULL, NULL}
  279. };
  280. /* radio */
  281. static const global_keymap_ini_t default_radio_keymap[] = {
  282. {"Up", "up; ctrl-p"},
  283. {"Down", "down; ctrl-n"},
  284. {"Top", "home; alt-lt; a1"},
  285. {"Bottom", "end; alt-gt; c1"},
  286. {"Select", "space"},
  287. {NULL, NULL}
  288. };
  289. /* tree */
  290. static const global_keymap_ini_t default_tree_keymap[] = {
  291. {"Help", "f1"},
  292. {"Rescan", "f2; ctrl-r"},
  293. {"Forget", "f3"},
  294. {"ToggleNavigation", "f4"},
  295. {"Copy", "f5"},
  296. {"Move", "f6"},
  297. #if 0
  298. {"MakeDir", "f7"},
  299. #endif
  300. {"Delete", "f8; delete"},
  301. {"Up", "up; ctrl-p"},
  302. {"Down", "down; ctrl-n"},
  303. {"Left", "left"},
  304. {"Right", "right"},
  305. {"Top", "home; alt-lt; a1"},
  306. {"Bottom", "end; alt-gt; c1"},
  307. {"PageUp", "pgup; alt-v"},
  308. {"PageDown", "pgdn; ctrl-v"},
  309. {"Enter", "enter"},
  310. {"Search", "ctrl-s; alt-s"},
  311. {NULL, NULL}
  312. };
  313. /* help */
  314. static const global_keymap_ini_t default_help_keymap[] = {
  315. {"Help", "f1"},
  316. {"Index", "f2; c"},
  317. {"Back", "f3; left; l"},
  318. {"Quit", "f10; esc"},
  319. {"Up", "up; ctrl-p"},
  320. {"Down", "down; ctrl-n"},
  321. {"PageDown", "f; space; pgdn; ctrl-v"},
  322. {"PageUp", "b; pgup; alt-v; backspace"},
  323. {"HalfPageDown", "d"},
  324. {"HalfPageUp", "u"},
  325. {"Top", "home; ctrl-home; ctrl-pgup; a1; alt-lt; g"},
  326. {"Bottom", "end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g"},
  327. {"Enter", "right; enter"},
  328. {"LinkNext", "tab"},
  329. {"LinkPrev", "alt-tab"},
  330. {"NodeNext", "n"},
  331. {"NodePrev", "p"},
  332. {NULL, NULL}
  333. };
  334. #ifdef ENABLE_EXT2FS_ATTR
  335. /* chattr dialog */
  336. static const global_keymap_ini_t default_chattr_keymap[] = {
  337. {"Up", "up; left; ctrl-p"},
  338. {"Down", "down; right; ctrl-n"},
  339. {"Top", "home; alt-lt; a1"},
  340. {"Bottom", "end; alt-gt; c1"},
  341. {"PageUp", "pgup; alt-v"},
  342. {"PageDown", "pgdn; ctrl-v"},
  343. {"Mark", "t; shift-t"},
  344. {"MarkAndDown", "insert"},
  345. {NULL, NULL}
  346. };
  347. #endif /* ENABLE_EXT2FS_ATTR */
  348. #ifdef USE_INTERNAL_EDIT
  349. static const global_keymap_ini_t default_editor_keymap[] = {
  350. {"Enter", "enter"},
  351. {"Return", "shift-enter; ctrl-enter; ctrl-shift-enter"}, /* useful for pasting multiline text */
  352. {"Tab", "tab; shift-tab; ctrl-tab; ctrl-shift-tab"}, /* ditto */
  353. {"BackSpace", "backspace; ctrl-h"},
  354. {"Delete", "delete; ctrl-d"},
  355. {"Left", "left"},
  356. {"Right", "right"},
  357. {"Up", "up"},
  358. {"Down", "down"},
  359. {"Home", "home"},
  360. {"End", "end"},
  361. {"PageUp", "pgup"},
  362. {"PageDown", "pgdn"},
  363. {"WordLeft", "ctrl-left; ctrl-z"},
  364. {"WordRight", "ctrl-right; ctrl-x"},
  365. {"InsertOverwrite", "insert"},
  366. {"Help", "f1"},
  367. {"Save", "f2"},
  368. {"Mark", "f3"},
  369. {"Replace", "f4"},
  370. {"Copy", "f5"},
  371. {"Move", "f6"},
  372. {"Search", "f7"},
  373. {"Remove", "f8; ctrl-delete"},
  374. {"Menu", "f9"},
  375. {"Quit", "f10; esc"},
  376. {"UserMenu", "f11"},
  377. {"SaveAs", "f12; ctrl-f2"},
  378. {"MarkColumn", "f13"},
  379. {"ReplaceContinue", "f14; ctrl-f4"},
  380. {"InsertFile", "f15"},
  381. {"SearchContinue", "f17; ctrl-f7"},
  382. {"EditNew", "ctrl-n"},
  383. {"DeleteToWordBegin", "alt-backspace"},
  384. {"DeleteToWordEnd", "alt-d"},
  385. {"DeleteLine", "ctrl-y"},
  386. {"DeleteToEnd", "ctrl-k"},
  387. {"Undo", "ctrl-u; ctrl-backspace"},
  388. {"Redo", "alt-r"},
  389. #ifdef HAVE_CHARSET
  390. {"SelectCodepage", "alt-e"},
  391. #endif
  392. {"Goto", "alt-l; alt-shift-l"},
  393. {"Refresh", "ctrl-l"},
  394. {"Shell", "ctrl-o"},
  395. {"Top", "ctrl-home; ctrl-pgup; alt-lt"},
  396. {"Bottom", "ctrl-end; ctrl-pgdn; alt-gt"},
  397. {"TopOnScreen", "ctrl-pgup"},
  398. {"BottomOnScreen", "ctrl-pgdn"},
  399. {"ScrollUp", "ctrl-up"},
  400. {"ScrollDown", "ctrl-down"},
  401. {"Store", "ctrl-insert"},
  402. {"Paste", "shift-insert"},
  403. {"Cut", "shift-delete"},
  404. {"BlockSave", "ctrl-f"},
  405. {"MarkLeft", "shift-left"},
  406. {"MarkRight", "shift-right"},
  407. {"MarkUp", "shift-up"},
  408. {"MarkDown", "shift-down"},
  409. {"MarkPageUp", "shift-pgup"},
  410. {"MarkPageDown", "shift-pgdn"},
  411. {"MarkToWordBegin", "ctrl-shift-left"},
  412. {"MarkToWordEnd", "ctrl-shift-right"},
  413. {"MarkToHome", "shift-home"},
  414. {"MarkToEnd", "shift-end"},
  415. {"MarkToFileBegin", "ctrl-shift-home"},
  416. {"MarkToFileEnd", "ctrl-shift-end"},
  417. {"MarkToPageBegin", "ctrl-shift-pgup"},
  418. {"MarkToPageEnd", "ctrl-shift-pgdn"},
  419. {"MarkScrollUp", "ctrl-shift-up"},
  420. {"MarkScrollDown", "ctrl-shift-down"},
  421. {"MarkColumnLeft", "alt-left"},
  422. {"MarkColumnRight", "alt-right"},
  423. {"MarkColumnUp", "alt-up"},
  424. {"MarkColumnDown", "alt-down"},
  425. {"MarkColumnPageUp", "alt-pgup"},
  426. {"MarkColumnPageDown", "alt-pgdn"},
  427. {"InsertLiteral", "ctrl-q"},
  428. {"Complete", "alt-tab"},
  429. {"MatchBracket", "alt-b"},
  430. {"ParagraphFormat", "alt-p"},
  431. {"Bookmark", "alt-k"},
  432. {"BookmarkFlush", "alt-o"},
  433. {"BookmarkNext", "alt-j"},
  434. {"BookmarkPrev", "alt-i"},
  435. {"MacroStartStopRecord", "ctrl-r"},
  436. {"MacroExecute", "ctrl-a"},
  437. {"ShowNumbers", "alt-n"},
  438. {"ShowTabTws", "alt-underline"},
  439. {"SyntaxOnOff", "ctrl-s"},
  440. {"Find", "alt-enter"},
  441. {"FilePrev", "alt-minus"},
  442. {"FileNext", "alt-plus"},
  443. {"Sort", "alt-t"},
  444. {"Mail", "alt-m"},
  445. {"ExternalCommand", "alt-u"},
  446. #ifdef HAVE_ASPELL
  447. {"SpellCheckCurrentWord", "ctrl-p"},
  448. #endif
  449. {"ExtendedKeyMap", "ctrl-x"},
  450. {NULL, NULL}
  451. };
  452. /* emacs keyboard layout emulation */
  453. static const global_keymap_ini_t default_editor_x_keymap[] = {
  454. {NULL, NULL}
  455. };
  456. #endif /* USE_INTERNAL_EDIT */
  457. /* viewer */
  458. static const global_keymap_ini_t default_viewer_keymap[] = {
  459. {"Help", "f1"},
  460. {"WrapMode", "f2"},
  461. {"Quit", "f3; f10; q; esc"},
  462. {"HexMode", "f4"},
  463. {"Goto", "f5"},
  464. {"Search", "f7"},
  465. {"SearchContinue", "f17; n"},
  466. {"MagicMode", "f8"},
  467. {"NroffMode", "f9"},
  468. {"Home", "ctrl-a"},
  469. {"End", "ctrl-e"},
  470. {"Left", "h; left"},
  471. {"Right", "l; right"},
  472. {"LeftQuick", "ctrl-left"},
  473. {"RightQuick", "ctrl-right"},
  474. {"Up", "k; y; insert; up; ctrl-p"},
  475. {"Down", "j; e; delete; down; enter; ctrl-n"},
  476. {"PageDown", "f; space; pgdn; ctrl-v"},
  477. {"PageUp", "b; pgup; alt-v; backspace"},
  478. {"HalfPageDown", "d"},
  479. {"HalfPageUp", "u"},
  480. {"Top", "home; ctrl-home; ctrl-pgup; a1; alt-lt; g"},
  481. {"Bottom", "end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g"},
  482. {"BookmarkGoto", "m"},
  483. {"Bookmark", "r"},
  484. {"FileNext", "ctrl-f"},
  485. {"FilePrev", "ctrl-b"},
  486. #ifdef HAVE_CHARSET
  487. {"SelectCodepage", "alt-e"},
  488. #endif
  489. {"Shell", "ctrl-o"},
  490. {"Ruler", "alt-r"},
  491. {"SearchForward", "slash"},
  492. {"SearchBackward", "question"},
  493. {"SearchForwardContinue", "ctrl-s"},
  494. {"SearchBackwardContinue", "ctrl-r"},
  495. {"SearchOppositeContinue", "shift-n"},
  496. {"History", "alt-shift-e"},
  497. {NULL, NULL}
  498. };
  499. /* hex viewer */
  500. static const global_keymap_ini_t default_viewer_hex_keymap[] = {
  501. {"Help", "f1"},
  502. {"HexEditMode", "f2"},
  503. {"Quit", "f3; f10; q; esc"},
  504. {"HexMode", "f4"},
  505. {"Goto", "f5"},
  506. {"Save", "f6"},
  507. {"Search", "f7"},
  508. {"SearchContinue", "f17; n"},
  509. {"MagicMode", "f8"},
  510. {"NroffMode", "f9"},
  511. {"ToggleNavigation", "tab"},
  512. {"Home", "ctrl-a; home"},
  513. {"End", "ctrl-e; end"},
  514. {"Left", "b; left"},
  515. {"Right", "f; right"},
  516. {"Up", "k; y; up"},
  517. {"Down", "j; delete; down"},
  518. {"PageDown", "pgdn; ctrl-v"},
  519. {"PageUp", "pgup; alt-v"},
  520. {"Top", "ctrl-home; ctrl-pgup; a1; alt-lt; g"},
  521. {"Bottom", "ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g"},
  522. #ifdef HAVE_CHARSET
  523. {"SelectCodepage", "alt-e"},
  524. #endif
  525. {"Shell", "ctrl-o"},
  526. {"SearchForward", "slash"},
  527. {"SearchBackward", "question"},
  528. {"SearchForwardContinue", "ctrl-s"},
  529. {"SearchBackwardContinue", "ctrl-r"},
  530. {"SearchOppositeContinue", "shift-n"},
  531. {"History", "alt-shift-e"},
  532. {NULL, NULL}
  533. };
  534. #ifdef USE_DIFF_VIEW
  535. /* diff viewer */
  536. static const global_keymap_ini_t default_diff_keymap[] = {
  537. {"ShowSymbols", "alt-s; s"},
  538. {"ShowNumbers", "alt-n; l"},
  539. {"SplitFull", "f"},
  540. {"SplitEqual", "equal"},
  541. {"SplitMore", "gt"},
  542. {"SplitLess", "lt"},
  543. {"Tab2", "2"},
  544. {"Tab3", "3"},
  545. {"Tab4", "4"},
  546. {"Tab8", "8"},
  547. {"Swap", "ctrl-u"},
  548. {"Redo", "ctrl-r"},
  549. {"HunkNext", "n; enter; space"},
  550. {"HunkPrev", "p; backspace"},
  551. {"Goto", "g; shift-g"},
  552. {"Save", "f2"},
  553. {"Edit", "f4"},
  554. {"EditOther", "f14"},
  555. {"Merge", "f5"},
  556. {"MergeOther", "f15"},
  557. {"Search", "f7"},
  558. {"SearchContinue", "f17"},
  559. {"Options", "f9"},
  560. {"Top", "ctrl-home"},
  561. {"Bottom", "ctrl-end"},
  562. {"Down", "down"},
  563. {"Up", "up"},
  564. {"LeftQuick", "ctrl-left"},
  565. {"RightQuick", "ctrl-right"},
  566. {"Left", "left"},
  567. {"Right", "right"},
  568. {"PageDown", "pgdn"},
  569. {"PageUp", "pgup"},
  570. {"Home", "home"},
  571. {"End", "end"},
  572. {"Help", "f1"},
  573. {"Quit", "f10; q; shift-q; esc"},
  574. #ifdef HAVE_CHARSET
  575. {"SelectCodepage", "alt-e"},
  576. #endif
  577. {"Shell", "ctrl-o"},
  578. {NULL, NULL}
  579. };
  580. #endif
  581. /*** file scope macro definitions ****************************************************************/
  582. /*** file scope type declarations ****************************************************************/
  583. /*** file scope variables ************************************************************************/
  584. /*** file scope functions ************************************************************************/
  585. /* --------------------------------------------------------------------------------------------- */
  586. static void
  587. create_default_keymap_section (mc_config_t * keymap, const char *section,
  588. const global_keymap_ini_t * k)
  589. {
  590. size_t i;
  591. for (i = 0; k[i].key != NULL; i++)
  592. mc_config_set_string_raw (keymap, section, k[i].key, k[i].value);
  593. }
  594. /* --------------------------------------------------------------------------------------------- */
  595. /*** public functions ****************************************************************************/
  596. /* --------------------------------------------------------------------------------------------- */
  597. mc_config_t *
  598. create_default_keymap (void)
  599. {
  600. mc_config_t *keymap;
  601. keymap = mc_config_init (NULL, TRUE);
  602. create_default_keymap_section (keymap, KEYMAP_SECTION_MAIN, default_main_keymap);
  603. create_default_keymap_section (keymap, KEYMAP_SECTION_MAIN_EXT, default_main_x_keymap);
  604. create_default_keymap_section (keymap, KEYMAP_SECTION_PANEL, default_panel_keymap);
  605. create_default_keymap_section (keymap, KEYMAP_SECTION_DIALOG, default_dialog_keymap);
  606. create_default_keymap_section (keymap, KEYMAP_SECTION_MENU, default_menu_keymap);
  607. create_default_keymap_section (keymap, KEYMAP_SECTION_INPUT, default_input_keymap);
  608. create_default_keymap_section (keymap, KEYMAP_SECTION_LISTBOX, default_listbox_keymap);
  609. create_default_keymap_section (keymap, KEYMAP_SECTION_RADIO, default_radio_keymap);
  610. create_default_keymap_section (keymap, KEYMAP_SECTION_TREE, default_tree_keymap);
  611. create_default_keymap_section (keymap, KEYMAP_SECTION_HELP, default_help_keymap);
  612. #ifdef ENABLE_EXT2FS_ATTR
  613. create_default_keymap_section (keymap, KEYMAP_SECTION_HELP, default_chattr_keymap);
  614. #endif
  615. #ifdef USE_INTERNAL_EDIT
  616. create_default_keymap_section (keymap, KEYMAP_SECTION_EDITOR, default_editor_keymap);
  617. create_default_keymap_section (keymap, KEYMAP_SECTION_EDITOR_EXT, default_editor_x_keymap);
  618. #endif
  619. create_default_keymap_section (keymap, KEYMAP_SECTION_VIEWER, default_viewer_keymap);
  620. create_default_keymap_section (keymap, KEYMAP_SECTION_VIEWER_HEX, default_viewer_hex_keymap);
  621. #ifdef USE_DIFF_VIEW
  622. create_default_keymap_section (keymap, KEYMAP_SECTION_DIFFVIEWER, default_diff_keymap);
  623. #endif
  624. return keymap;
  625. }