2 Default values for keybinding engine
4 Copyright (C) 2009-2017
5 Free Software Foundation, Inc.
9 Ilia Maslakov <il.smind@gmail.com>, 2009, 2010
10 Andrew Borodin <aborodin@vmail.ru>, 2010, 2011
12 This file is part of the Midnight Commander.
14 The Midnight Commander is free software: you can redistribute it
15 and/or modify it under the terms of the GNU General Public License as
16 published by the Free Software Foundation, either version 3 of the License,
17 or (at your option) any later version.
19 The Midnight Commander is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
24 You should have received a copy of the GNU General Public License
25 along with this program. If not, see <http://www.gnu.org/licenses/>.
30 #include "lib/global.h"
31 #include "lib/widget.h" /* dialog_map, input_map, listbox_map */
33 #include "keybind-defaults.h"
35 /*** global variables ****************************************************************************/
37 GArray
*main_keymap
= NULL
;
38 GArray
*main_x_keymap
= NULL
;
39 GArray
*panel_keymap
= NULL
;
40 GArray
*dialog_keymap
= NULL
;
41 GArray
*input_keymap
= NULL
;
42 GArray
*listbox_keymap
= NULL
;
43 GArray
*tree_keymap
= NULL
;
44 GArray
*help_keymap
= NULL
;
45 #ifdef USE_INTERNAL_EDIT
46 GArray
*editor_keymap
= NULL
;
47 GArray
*editor_x_keymap
= NULL
;
49 GArray
*viewer_keymap
= NULL
;
50 GArray
*viewer_hex_keymap
= NULL
;
52 GArray
*diff_keymap
= NULL
;
55 const global_keymap_t
*main_map
= NULL
;
56 const global_keymap_t
*main_x_map
= NULL
;
57 const global_keymap_t
*panel_map
= NULL
;
58 const global_keymap_t
*tree_map
= NULL
;
59 const global_keymap_t
*help_map
= NULL
;
61 #ifdef USE_INTERNAL_EDIT
62 const global_keymap_t
*editor_map
= NULL
;
63 const global_keymap_t
*editor_x_map
= NULL
;
65 const global_keymap_t
*viewer_map
= NULL
;
66 const global_keymap_t
*viewer_hex_map
= NULL
;
68 const global_keymap_t
*diff_map
= NULL
;
71 /*** file scope macro definitions ****************************************************************/
73 /*** file scope type declarations ****************************************************************/
75 /* default keymaps in ini (key=value) format */
76 typedef struct global_keymap_ini_t
80 } global_keymap_ini_t
;
82 /*** file scope variables ************************************************************************/
85 static const global_keymap_ini_t default_main_keymap
[] = {
86 {"ChangePanel", "tab"},
97 {"MenuLastSelected", "f19"},
100 {"DirSize", "ctrl-space"},
101 /* Copy useful information to the command line */
102 {"PutCurrentPath", "alt-a"},
103 {"PutOtherPath", "alt-shift-a"},
104 {"PutCurrentSelected", "alt-enter; ctrl-enter"},
105 {"PutCurrentFullSelected", "ctrl-shift-enter"},
106 {"CdQuick", "alt-c"},
107 /* To access the directory hotlist */
108 {"HotList", "ctrl-backslash"},
110 {"Suspend", "ctrl-z"},
111 /* The filtered view command */
112 {"ViewFiltered", "alt-exclamation"},
114 {"Find", "alt-question"},
116 {"Reread", "ctrl-r"},
117 /* Switch listing between long, user defined and full formats */
121 {"SplitEqual", "alt-equal"},
122 {"SplitMore", "alt-shift-right"},
123 {"SplitLess", "alt-shift-left"},
126 {"ShowHidden", "alt-dot"},
127 {"SplitVertHoriz", "alt-comma"},
128 {"ExtendedKeyMap", "ctrl-x"},
129 /* Select/unselect group */
130 {"Select", "kpplus"},
131 {"Unselect", "kpminus"},
132 {"SelectInvert", "kpasterisk"},
133 /* List of screens */
134 {"ScreenList", "alt-prime"},
138 static const global_keymap_ini_t default_main_x_keymap
[] = {
139 {"CompareDirs", "d"},
141 {"CompareFiles", "ctrl-d"},
142 #endif /* USE_DIFF_VIEW */
145 #endif /* ENABLE_VFS */
146 {"PutCurrentPath", "p"},
147 {"PutOtherPath", "ctrl-p"},
148 {"PutCurrentTagged", "t"},
149 {"PutOtherTagged", "ctrl-t"},
152 {"PutCurrentLink", "r"},
153 {"PutOtherLink", "ctrl-r"},
155 {"LinkSymbolic", "s"},
156 {"LinkSymbolicRelative", "v"},
157 {"LinkSymbolicEdit", "ctrl-s"},
159 {"PanelQuickView", "q"},
161 #ifdef ENABLE_BACKGROUND
163 #endif /* ENABLE_BACKGROUND */
164 {"ExternalPanelize", "!"},
169 static const global_keymap_ini_t default_panel_keymap
[] = {
170 {"CycleListingFormat", "alt-t"},
171 {"PanelOtherCd", "alt-o"},
172 {"PanelOtherCdLink", "alt-l"},
173 {"CopySingle", "f15"},
174 {"DeleteSingle", "f18"},
177 {"MoveSingle", "f16"},
178 {"SelectInvert", "alt-asterisk"},
179 {"Select", "alt-plus"},
180 {"Unselect", "alt-minus"},
182 {"CdChild", "ctrl-pgdn"},
183 {"CdParent", "ctrl-pgup"},
184 {"History", "alt-shift-h"},
185 {"HistoryNext", "alt-u"},
186 {"HistoryPrev", "alt-y"},
187 {"BottomOnScreen", "alt-j"},
188 {"MiddleOnScreen", "alt-r"},
189 {"TopOnScreen", "alt-g"},
190 {"Mark", "insert; ctrl-t"},
191 {"MarkDown", "shift-down"},
192 {"MarkUp", "shift-up"},
193 {"Up", "up; ctrl-p"},
194 {"Down", "down; ctrl-n"},
197 {"Top", "alt-lt; home; a1"},
198 {"Bottom", "alt-gt; end; c1"},
199 {"PageDown", "pgdn; ctrl-v"},
200 {"PageUp", "pgup; alt-v"},
202 {"SelectCodepage", "alt-e"},
204 {"Search", "ctrl-s; alt-s"},
205 {"PanelOtherSync", "alt-i"},
210 static const global_keymap_ini_t default_dialog_keymap
[] = {
212 {"Cancel", "f10; esc; ctrl-g"},
214 {"Down", "down; right"},
216 {"Left", "up; left"},
217 {"Right", "down; right"},
220 {"Suspend", "ctrl-z"},
221 {"Refresh", "ctrl-l"},
222 {"ScreenList", "alt-prime"},
223 {"ScreenNext", "alt-rbrace"},
224 {"ScreenPrev", "alt-lbrace"},
229 static const global_keymap_ini_t default_input_keymap
[] = {
231 {"Home", "ctrl-a; alt-lt; home; a1"},
232 {"End", "ctrl-e; alt-gt; end; c1"},
233 {"Left", "left; alt-left; ctrl-b"},
234 {"Right", "right; alt-right; ctrl-f"},
235 {"WordLeft", "ctrl-left; alt-b"},
236 {"WordRight", "ctrl-right; alt-f"},
238 {"MarkLeft", "shift-left"},
239 {"MarkRight", "shift-right"},
240 {"MarkToWordBegin", "ctrl-shift-left"},
241 {"MarkToWordEnd", "ctrl-shift-right"},
242 {"MarkToHome", "shift-home"},
243 {"MarkToEnd", "shift-end"},
245 {"Backspace", "backspace; ctrl-h"},
246 {"Delete", "delete; ctrl-d"},
247 {"DeleteToWordEnd", "alt-d"},
248 {"DeleteToWordBegin", "alt-backspace"},
249 /* Region manipulation */
250 {"Remove", "ctrl-w"},
253 {"DeleteToEnd", "ctrl-k"},
255 {"History", "alt-h"},
256 {"HistoryPrev", "alt-p; ctrl-down"},
257 {"HistoryNext", "alt-n; ctrl-up"},
259 {"Complete", "alt-tab"},
264 static const global_keymap_ini_t default_listbox_keymap
[] = {
265 {"Up", "up; ctrl-p"},
266 {"Down", "down; ctrl-n"},
267 {"Top", "home; alt-lt; a1"},
268 {"Bottom", "end; alt-gt; c1"},
269 {"PageUp", "pgup; alt-v"},
270 {"PageDown", "pgdn; ctrl-v"},
271 {"Delete", "delete; d"},
272 {"Clear", "shift-delete; shift-d"},
277 static const global_keymap_ini_t default_tree_keymap
[] = {
279 {"Rescan", "f2; ctrl-r"},
281 {"ToggleNavigation", "f4"},
287 {"Delete", "f8; delete"},
288 {"Up", "up; ctrl-p"},
289 {"Down", "down; ctrl-n"},
292 {"Top", "home; alt-lt; a1"},
293 {"Bottom", "end; alt-gt; c1"},
294 {"PageUp", "pgup; alt-v"},
295 {"PageDown", "pgdn; ctrl-v"},
297 {"Search", "ctrl-s; alt-s"},
302 static const global_keymap_ini_t default_help_keymap
[] = {
305 {"Back", "f3; left; l"},
306 {"Quit", "f10; esc"},
307 {"Up", "up; ctrl-p"},
308 {"Down", "down; ctrl-n"},
309 {"PageDown", "f; space; pgdn; ctrl-v"},
310 {"PageUp", "b; pgup; alt-v; backspace"},
311 {"HalfPageDown", "d"},
313 {"Top", "home; ctrl-home; ctrl-pgup; a1; alt-lt; g"},
314 {"Bottom", "end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g"},
315 {"Enter", "right; enter"},
317 {"LinkPrev", "alt-tab"},
323 #ifdef USE_INTERNAL_EDIT
324 static const global_keymap_ini_t default_editor_keymap
[] = {
326 {"Return", "shift-enter; ctrl-enter; ctrl-shift-enter"}, /* useful for pasting multiline text */
327 {"Tab", "tab; shift-tab; ctrl-tab; ctrl-shift-tab"}, /* ditto */
328 {"BackSpace", "backspace; ctrl-h"},
329 {"Delete", "delete; ctrl-d"},
337 {"PageDown", "pgdn"},
338 {"WordLeft", "ctrl-left; ctrl-z"},
339 {"WordRight", "ctrl-right; ctrl-x"},
340 {"InsertOverwrite", "insert"},
348 {"Remove", "f8; ctrl-delete"},
350 {"Quit", "f10; esc"},
352 {"SaveAs", "f12; ctrl-f2"},
353 {"MarkColumn", "f13"},
354 {"ReplaceContinue", "f14; ctrl-f4"},
355 {"InsertFile", "f15"},
356 {"SearchContinue", "f17; ctrl-f7"},
357 {"EditNew", "ctrl-n"},
358 {"DeleteToWordBegin", "alt-backspace"},
359 {"DeleteToWordEnd", "alt-d"},
360 {"DeleteLine", "ctrl-y"},
361 {"DeleteToEnd", "ctrl-k"},
362 {"Undo", "ctrl-u; ctrl-backspace"},
365 {"SelectCodepage", "alt-e"},
367 {"Goto", "alt-l; alt-shift-l"},
368 {"Refresh", "ctrl-l"},
370 {"Top", "ctrl-home; ctrl-pgup; alt-lt"},
371 {"Bottom", "ctrl-end; ctrl-pgdn; alt-gt"},
372 {"TopOnScreen", "ctrl-pgup"},
373 {"BottomOnScreen", "ctrl-pgdn"},
374 {"ScrollUp", "ctrl-up"},
375 {"ScrollDown", "ctrl-down"},
376 {"Store", "ctrl-insert"},
377 {"Paste", "shift-insert"},
378 {"Cut", "shift-delete"},
379 {"BlockSave", "ctrl-f"},
380 {"MarkLeft", "shift-left"},
381 {"MarkRight", "shift-right"},
382 {"MarkUp", "shift-up"},
383 {"MarkDown", "shift-down"},
384 {"MarkPageUp", "shift-pgup"},
385 {"MarkPageDown", "shift-pgdn"},
386 {"MarkToWordBegin", "ctrl-shift-left"},
387 {"MarkToWordEnd", "ctrl-shift-right"},
388 {"MarkToHome", "shift-home"},
389 {"MarkToEnd", "shift-end"},
390 {"MarkToFileBegin", "ctrl-shift-home"},
391 {"MarkToFileEnd", "ctrl-shift-end"},
392 {"MarkToPageBegin", "ctrl-shift-pgup"},
393 {"MarkToPageEnd", "ctrl-shift-pgdn"},
394 {"MarkScrollUp", "ctrl-shift-up"},
395 {"MarkScrollDown", "ctrl-shift-down"},
396 {"MarkColumnLeft", "alt-left"},
397 {"MarkColumnRight", "alt-right"},
398 {"MarkColumnUp", "alt-up"},
399 {"MarkColumnDown", "alt-down"},
400 {"MarkColumnPageUp", "alt-pgup"},
401 {"MarkColumnPageDown", "alt-pgdn"},
402 {"InsertLiteral", "ctrl-q"},
403 {"Complete", "alt-tab"},
404 {"MatchBracket", "alt-b"},
405 {"ParagraphFormat", "alt-p"},
406 {"Bookmark", "alt-k"},
407 {"BookmarkFlush", "alt-o"},
408 {"BookmarkNext", "alt-j"},
409 {"BookmarkPrev", "alt-i"},
410 {"MacroStartStopRecord", "ctrl-r"},
411 {"MacroExecute", "ctrl-a"},
412 {"ShowNumbers", "alt-n"},
413 {"ShowTabTws", "alt-underline"},
414 {"SyntaxOnOff", "ctrl-s"},
415 {"Find", "alt-enter"},
416 {"FilePrev", "alt-minus"},
417 {"FileNext", "alt-plus"},
420 {"ExternalCommand", "alt-u"},
422 {"SpellCheckCurrentWord", "ctrl-p"},
424 {"ExtendedKeyMap", "ctrl-x"},
428 /* emacs keyboard layout emulation */
429 static const global_keymap_ini_t default_editor_x_keymap
[] = {
432 #endif /* USE_INTERNAL_EDIT */
435 static const global_keymap_ini_t default_viewer_keymap
[] = {
438 {"Quit", "f3; f10; q; esc"},
442 {"SearchContinue", "f17; n"},
448 {"Right", "l; right"},
449 {"LeftQuick", "ctrl-left"},
450 {"RightQuick", "ctrl-right"},
451 {"Up", "k; y; insert; up; ctrl-p"},
452 {"Down", "j; e; delete; down; enter; ctrl-n"},
453 {"PageDown", "f; space; pgdn; ctrl-v"},
454 {"PageUp", "b; pgup; alt-v; backspace"},
455 {"HalfPageDown", "d"},
457 {"Top", "home; ctrl-home; ctrl-pgup; a1; alt-lt; g"},
458 {"Bottom", "end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g"},
459 {"BookmarkGoto", "m"},
461 {"FileNext", "ctrl-f"},
462 {"FilePrev", "ctrl-b"},
464 {"SelectCodepage", "alt-e"},
468 {"SearchForward", "slash"},
469 {"SearchBackward", "question"},
470 {"SearchForwardContinue", "ctrl-s"},
471 {"SearchBackwardContinue", "ctrl-r"},
476 static const global_keymap_ini_t default_viewer_hex_keymap
[] = {
478 {"HexEditMode", "f2"},
479 {"Quit", "f3; f10; q; esc"},
484 {"SearchContinue", "f17; n"},
487 {"ToggleNavigation", "tab"},
488 {"Home", "ctrl-a; home"},
489 {"End", "ctrl-e; end"},
491 {"Right", "f; right"},
493 {"Down", "j; delete; down"},
494 {"PageDown", "pgdn; ctrl-v"},
495 {"PageUp", "pgup; alt-v"},
496 {"Top", "ctrl-home; ctrl-pgup; a1; alt-lt; g"},
497 {"Bottom", "ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g"},
499 {"SelectCodepage", "alt-e"},
502 {"SearchForward", "slash"},
503 {"SearchBackward", "question"},
504 {"SearchForwardContinue", "ctrl-s"},
505 {"SearchBackwardContinue", "ctrl-r"},
511 static const global_keymap_ini_t default_diff_keymap
[] = {
512 {"ShowSymbols", "alt-s; s"},
513 {"ShowNumbers", "alt-n; l"},
515 {"SplitEqual", "equal"},
524 {"HunkNext", "n; enter; space"},
525 {"HunkPrev", "p; backspace"},
526 {"Goto", "g; shift-g"},
529 {"EditOther", "f14"},
531 {"MergeOther", "f15"},
533 {"SearchContinue", "f17"},
535 {"Top", "ctrl-home"},
536 {"Bottom", "ctrl-end"},
539 {"LeftQuick", "ctrl-left"},
540 {"RightQuick", "ctrl-right"},
543 {"PageDown", "pgdn"},
548 {"Quit", "f10; q; shift-q; esc"},
550 {"SelectCodepage", "alt-e"},
557 /*** file scope macro definitions ****************************************************************/
559 /*** file scope type declarations ****************************************************************/
561 /*** file scope variables ************************************************************************/
563 /*** file scope functions ************************************************************************/
564 /* --------------------------------------------------------------------------------------------- */
567 create_default_keymap_section (mc_config_t
* keymap
, const char *section
,
568 const global_keymap_ini_t
* k
)
572 for (i
= 0; k
[i
].key
!= NULL
; i
++)
573 mc_config_set_string_raw (keymap
, section
, k
[i
].key
, k
[i
].value
);
576 /* --------------------------------------------------------------------------------------------- */
577 /*** public functions ****************************************************************************/
578 /* --------------------------------------------------------------------------------------------- */
581 create_default_keymap (void)
585 keymap
= mc_config_init (NULL
, TRUE
);
587 create_default_keymap_section (keymap
, KEYMAP_SECTION_MAIN
, default_main_keymap
);
588 create_default_keymap_section (keymap
, KEYMAP_SECTION_MAIN_EXT
, default_main_x_keymap
);
589 create_default_keymap_section (keymap
, KEYMAP_SECTION_PANEL
, default_panel_keymap
);
590 create_default_keymap_section (keymap
, KEYMAP_SECTION_DIALOG
, default_dialog_keymap
);
591 create_default_keymap_section (keymap
, KEYMAP_SECTION_INPUT
, default_input_keymap
);
592 create_default_keymap_section (keymap
, KEYMAP_SECTION_LISTBOX
, default_listbox_keymap
);
593 create_default_keymap_section (keymap
, KEYMAP_SECTION_TREE
, default_tree_keymap
);
594 create_default_keymap_section (keymap
, KEYMAP_SECTION_HELP
, default_help_keymap
);
595 #ifdef USE_INTERNAL_EDIT
596 create_default_keymap_section (keymap
, KEYMAP_SECTION_EDITOR
, default_editor_keymap
);
597 create_default_keymap_section (keymap
, KEYMAP_SECTION_EDITOR_EXT
, default_editor_x_keymap
);
599 create_default_keymap_section (keymap
, KEYMAP_SECTION_VIEWER
, default_viewer_keymap
);
600 create_default_keymap_section (keymap
, KEYMAP_SECTION_VIEWER_HEX
, default_viewer_hex_keymap
);
602 create_default_keymap_section (keymap
, KEYMAP_SECTION_DIFFVIEWER
, default_diff_keymap
);