2 Copyright (C) 2009 The Free Software Foundation, Inc.
4 Written by: 2005 Vitja Makarov
7 This file is part of the Midnight Commander.
9 The Midnight Commander is free software; you can redistribute it
10 and/or modify it under the terms of the GNU General Public License as
11 published by the Free Software Foundation; either version 2 of the
12 License, or (at your option) any later version.
14 The Midnight Commander is distributed in the hope that it will be
15 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
16 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
33 #include <sys/types.h>
37 #include "lib/global.h"
38 #include "lib/tty/win.h"
39 #include "lib/tty/key.h" /* KEY_M_ */
40 #include "lib/tty/tty.h" /* keys */
41 #include "lib/strutil.h"
43 #include "cmddef.h" /* CK_ cmd name const */
47 #ifdef USE_INTERNAL_EDIT
48 GArray
*editor_keymap
= NULL
;
49 GArray
*editor_x_keymap
= NULL
;
51 const global_keymap_t
*editor_map
;
52 const global_keymap_t
*editor_x_map
;
55 GArray
*main_keymap
= NULL
;
56 GArray
*main_x_keymap
= NULL
;
57 GArray
*viewer_keymap
= NULL
;
58 GArray
*viewer_hex_keymap
= NULL
;
59 GArray
*panel_keymap
= NULL
;
60 GArray
*input_keymap
= NULL
;
61 GArray
*listbox_keymap
= NULL
;
62 GArray
*tree_keymap
= NULL
;
63 GArray
*help_keymap
= NULL
;
64 GArray
*dialog_keymap
= NULL
;
67 GArray
*diff_keymap
= NULL
;
69 const global_keymap_t
*diff_map
;
72 const global_keymap_t
*main_map
;
73 const global_keymap_t
*main_x_map
;
74 const global_keymap_t
*panel_map
;
75 const global_keymap_t
*input_map
;
76 const global_keymap_t
*listbox_map
;
77 const global_keymap_t
*tree_map
;
78 const global_keymap_t
*help_map
;
79 const global_keymap_t
*dialog_map
;
81 static name_keymap_t command_names
[] = {
82 #ifdef USE_INTERNAL_EDIT
83 { "EditNoCommand", CK_Ignore_Key
},
84 { "EditIgnoreKey", CK_Ignore_Key
},
85 { "EditBackSpace", CK_BackSpace
},
86 { "EditDelete", CK_Delete
},
87 { "EditEnter", CK_Enter
},
88 { "EditPageUp", CK_Page_Up
},
89 { "EditPageDown", CK_Page_Down
},
90 { "EditLeft", CK_Left
},
91 { "EditRight", CK_Right
},
92 { "EditWordLeft", CK_Word_Left
},
93 { "EditWordRight", CK_Word_Right
},
95 { "EditDown", CK_Down
},
96 { "EditHome", CK_Home
},
97 { "EditEnd", CK_End
},
98 { "EditTab", CK_Tab
},
99 { "EditUndo", CK_Undo
},
100 { "EditBeginningOfText", CK_Beginning_Of_Text
},
101 { "EditEndOfText", CK_End_Of_Text
},
102 { "EditScrollUp", CK_Scroll_Up
},
103 { "EditScrollDown", CK_Scroll_Down
},
104 { "EditReturn", CK_Return
},
105 { "EditBeginPage", CK_Begin_Page
},
106 { "EditEndPage", CK_End_Page
},
107 { "EditDeleteWordLeft", CK_Delete_Word_Left
},
108 { "EditDeleteWordRight", CK_Delete_Word_Right
},
109 { "EditParagraphUp", CK_Paragraph_Up
},
110 { "EditParagraphDown", CK_Paragraph_Down
},
111 { "EditMenu", CK_Menu
},
112 { "EditSave", CK_Save
},
113 { "EditLoad", CK_Load
},
114 { "EditNew", CK_New
},
115 { "EditSaveas", CK_Save_As
},
116 { "EditMark", CK_Mark
},
117 { "EditCopy", CK_Copy
},
118 { "EditMove", CK_Move
},
119 { "EditRemove", CK_Remove
},
120 { "EditMarkAll", CK_Mark_All
},
121 { "EditUnmark", CK_Unmark
},
122 { "EditSaveBlock", CK_Save_Block
},
123 { "EditColumnMark", CK_Column_Mark
},
124 { "EditFind", CK_Find
},
125 { "EditFindAgain", CK_Find_Again
},
126 { "EditReplace", CK_Replace
},
127 { "EditReplaceAgain", CK_Replace_Again
},
128 { "EditCompleteWord", CK_Complete_Word
},
131 { "EditDebugStart", CK_Debug_Start
},
132 { "EditDebugStop", CK_Debug_Stop
},
133 { "EditDebugToggleBreak", CK_Debug_Toggle_Break
},
134 { "EditDebugClear", CK_Debug_Clear
},
135 { "EditDebugNext", CK_Debug_Next
},
136 { "EditDebugStep", CK_Debug_Step
},
137 { "EditDebugBackTrace", CK_Debug_Back_Trace
},
138 { "EditDebugContinue", CK_Debug_Continue
},
139 { "EditDebugEnterCommand", CK_Debug_Enter_Command
},
140 { "EditDebugUntilCurser", CK_Debug_Until_Curser
},
142 { "EditInsertFile", CK_Insert_File
},
143 { "EditQuit", CK_Quit
},
144 { "EditToggleInsert", CK_Toggle_Insert
},
145 { "EditHelp", CK_Help
},
146 { "EditDate", CK_Date
},
147 { "EditRefresh", CK_Refresh
},
148 { "EditGoto", CK_Goto
},
149 { "EditDeleteLine", CK_Delete_Line
},
150 { "EditDeleteToLineEnd", CK_Delete_To_Line_End
},
151 { "EditDeleteToLineBegin", CK_Delete_To_Line_Begin
},
152 { "EditManPage", CK_Man_Page
},
153 { "EditSort", CK_Sort
},
154 { "EditMail", CK_Mail
},
155 { "EditCancel", CK_Cancel
},
156 { "EditComplete", CK_Complete
},
157 { "EditParagraphFormat", CK_Paragraph_Format
},
158 { "EditUtil", CK_Util
},
159 { "EditTypeLoadPython", CK_Type_Load_Python
},
160 { "EditFindFile", CK_Find_File
},
161 { "EditCtags", CK_Ctags
},
162 { "EditMatchBracket", CK_Match_Bracket
},
163 { "EditTerminal", CK_Terminal
},
164 { "EditTerminalApp", CK_Terminal_App
},
165 { "EditExtCmd", CK_ExtCmd
},
166 { "EditUserMenu", CK_User_Menu
},
167 { "EditBeginRecordMacro", CK_Begin_Record_Macro
},
168 { "EditEndRecordMacro", CK_End_Record_Macro
},
169 { "EditDeleteMacro", CK_Delete_Macro
},
170 { "EditToggleBookmark", CK_Toggle_Bookmark
},
171 { "EditFlushBookmarks", CK_Flush_Bookmarks
},
172 { "EditNextBookmark", CK_Next_Bookmark
},
173 { "EditPrevBookmark", CK_Prev_Bookmark
},
174 { "EditPageUpHighlight", CK_Page_Up_Highlight
},
175 { "EditPageDownHighlight", CK_Page_Down_Highlight
},
176 { "EditLeftHighlight", CK_Left_Highlight
},
177 { "EditRightHighlight", CK_Right_Highlight
},
178 { "EditWordLeftHighlight", CK_Word_Left_Highlight
},
179 { "EditWordRightHighlight", CK_Word_Right_Highlight
},
180 { "EditUpHighlight", CK_Up_Highlight
},
181 { "EditDownHighlight", CK_Down_Highlight
},
182 { "EditHomeHighlight", CK_Home_Highlight
},
183 { "EditEndHighlight", CK_End_Highlight
},
184 { "EditBeginningOfTextHighlight", CK_Beginning_Of_Text_Highlight
},
185 { "EditEndOfTextHighlight", CK_End_Of_Text_Highlight
},
186 { "EditBeginPageHighlight", CK_Begin_Page_Highlight
},
187 { "EditEndPageHighlight", CK_End_Page_Highlight
},
188 { "EditScrollUpHighlight", CK_Scroll_Up_Highlight
},
189 { "EditScrollDownHighlight", CK_Scroll_Down_Highlight
},
190 { "EditParagraphUpHighlight", CK_Paragraph_Up_Highlight
},
191 { "EditParagraphDownHighlight", CK_Paragraph_Down_Highlight
},
193 { "EditPageUpAltHighlight", CK_Page_Up_Alt_Highlight
},
194 { "EditPageDownAltHighlight", CK_Page_Down_Alt_Highlight
},
195 { "EditLeftAltHighlight", CK_Left_Alt_Highlight
},
196 { "EditRightAltHighlight", CK_Right_Alt_Highlight
},
197 { "EditWordLeftAltHighlight", CK_Word_Left_Alt_Highlight
},
198 { "EditWordRightAltHighlight", CK_Word_Right_Alt_Highlight
},
199 { "EditUpAltHighlight", CK_Up_Alt_Highlight
},
200 { "EditDownAltHighlight", CK_Down_Alt_Highlight
},
201 { "EditHomeAltHighlight", CK_Home_Alt_Highlight
},
202 { "EditEndAltHighlight", CK_End_Alt_Highlight
},
203 { "EditBeginningOfTextAltHighlight", CK_Beginning_Of_Text_Alt_Highlight
},
204 { "EditEndOfTextAltHighlight", CK_End_Of_Text_Alt_Highlight
},
205 { "EditBeginPageAltHighlight", CK_Begin_Page_Alt_Highlight
},
206 { "EditEndPageAltHighlight", CK_End_Page_Alt_Highlight
},
207 { "EditScrollUpAltHighlight", CK_Scroll_Up_Alt_Highlight
},
208 { "EditScrollDownAltHighlight", CK_Scroll_Down_Alt_Highlight
},
209 { "EditParagraphUpAltHighlight", CK_Paragraph_Up_Alt_Highlight
},
210 { "EditParagraphDownAltHighlight", CK_Paragraph_Down_Alt_Highlight
},
212 { "EditShiftBlockLeft", CK_Shift_Block_Left
},
213 { "EditShiftBlockRight", CK_Shift_Block_Right
},
215 { "EditXStore", CK_XStore
},
216 { "EditXCut", CK_XCut
},
217 { "EditXPaste", CK_XPaste
},
218 { "EditSelectionHistory", CK_Selection_History
},
219 { "EditShell", CK_Shell
},
220 { "EditInsertLiteral", CK_Insert_Literal
},
221 { "EditExecuteMacro", CK_Execute_Macro
},
222 { "EditBeginOrEndMacro", CK_Begin_End_Macro
},
223 { "EditExtMode", CK_Ext_Mode
},
224 { "EditToggleLineState", CK_Toggle_Line_State
},
225 { "EditToggleTabTWS", CK_Toggle_Tab_TWS
},
226 { "EditToggleSyntax", CK_Toggle_Syntax
},
227 { "EditToggleShowMargin", CK_Toggle_Show_Margin
},
228 { "EditFindDefinition", CK_Find_Definition
},
229 { "EditLoadPrevFile", CK_Load_Prev_File
},
230 { "EditLoadNextFile", CK_Load_Next_File
},
231 { "EditOptions", CK_Edit_Options
},
232 { "EditSaveMode", CK_Edit_Save_Mode
},
233 { "EditChooseSyntax", CK_Choose_Syntax
},
234 { "EditAbout", CK_About
},
237 { "EditFocusNext", CK_Focus_Next
},
238 { "EditFocusPrev", CK_Focus_Prev
},
239 { "EditHeightInc", CK_Height_Inc
},
240 { "EditHeightDec", CK_Height_Dec
},
241 { "EditMake", CK_Make
},
242 { "EditErrorNext", CK_Error_Next
},
243 { "EditErrorPrev", CK_Error_Prev
},
247 { "EditSaveDesktop", CK_Save_Desktop
},
248 { "EditNewWindow", CK_New_Window
},
249 { "EditCycle", CK_Cycle
},
250 { "EditSaveAndQuit", CK_Save_And_Quit
},
251 { "EditRunAnother", CK_Run_Another
},
252 { "EditCheckSaveAndQuit", CK_Check_Save_And_Quit
},
253 { "EditMaximize", CK_Maximize
},
256 #endif /* USE_INTERNAL_EDIT */
259 { "ViewHelp", CK_ViewHelp
},
260 { "ViewToggleWrapMode", CK_ViewToggleWrapMode
},
261 { "ViewToggleHexEditMode", CK_ViewToggleHexEditMode
},
262 { "ViewQuit", CK_ViewQuit
},
263 { "ViewToggleHexMode", CK_ViewToggleHexMode
},
264 { "ViewGoto", CK_ViewGoto
},
265 { "ViewHexEditSave", CK_ViewHexEditSave
},
266 { "ViewSearch", CK_ViewSearch
},
267 { "ViewToggleMagicMode", CK_ViewToggleMagicMode
},
268 { "ViewToggleNroffMode", CK_ViewToggleNroffMode
},
269 { "ViewContinueSearch", CK_ViewContinueSearch
},
270 { "ViewGotoBookmark", CK_ViewGotoBookmark
},
271 { "ViewNewBookmark", CK_ViewNewBookmark
},
272 { "ViewMoveUp", CK_ViewMoveUp
},
273 { "ViewMoveDown", CK_ViewMoveDown
},
274 { "ViewMoveLeft", CK_ViewMoveLeft
},
275 { "ViewMoveRight", CK_ViewMoveRight
},
276 { "ViewMoveLeft10", CK_ViewMoveLeft10
},
277 { "ViewMoveRight10", CK_ViewMoveRight10
},
278 { "ViewMovePgDn", CK_ViewMovePgDn
},
279 { "ViewMovePgUp", CK_ViewMovePgUp
},
280 { "ViewMoveHalfPgDn", CK_ViewMoveHalfPgDn
},
281 { "ViewMoveHalfPgUp", CK_ViewMoveHalfPgUp
},
282 { "ViewMoveToBol", CK_ViewMoveToBol
},
283 { "ViewMoveToEol", CK_ViewMoveToEol
},
284 { "ViewMoveTop", CK_ViewMoveTop
},
285 { "ViewMoveBottom", CK_ViewMoveBottom
},
286 { "ViewNextFile", CK_ViewNextFile
},
287 { "ViewPrevFile", CK_ViewPrevFile
},
288 { "ViewToggleRuler", CK_ViewToggleRuler
},
289 { "ViewToggleHexNavMode", CK_ViewToggleHexNavMode
},
292 { "HelpHelp", CK_HelpHelp
},
293 { "HelpIndex", CK_HelpIndex
},
294 { "HelpBack", CK_HelpBack
},
295 { "HelpQuit", CK_HelpQuit
},
296 { "HelpMoveUp", CK_HelpMoveUp
},
297 { "HelpMoveDown", CK_HelpMoveDown
},
298 { "HelpMovePgDn", CK_HelpMovePgDn
},
299 { "HelpMovePgUp", CK_HelpMovePgUp
},
300 { "HelpMoveHalfPgDn", CK_HelpMoveHalfPgDn
},
301 { "HelpMoveHalfPgUp", CK_HelpMoveHalfPgUp
},
302 { "HelpMoveTop", CK_HelpMoveTop
},
303 { "HelpMoveBottom", CK_HelpMoveBottom
},
304 { "HelpSelectLink", CK_HelpSelectLink
},
305 { "HelpNextLink", CK_HelpNextLink
},
306 { "HelpPrevLink", CK_HelpPrevLink
},
307 { "HelpNextNode", CK_HelpNextNode
},
308 { "HelpPrevNode", CK_HelpPrevNode
},
311 { "TreeHelp", CK_TreeHelp
},
312 { "TreeForget", CK_TreeForget
},
313 { "TreeToggleNav", CK_TreeToggleNav
},
314 { "TreeCopy", CK_TreeCopy
},
315 { "TreeMove", CK_TreeMove
},
316 { "TreeMake", CK_TreeMake
},
317 { "TreeMoveUp", CK_TreeMoveUp
},
318 { "TreeMoveDown", CK_TreeMoveDown
},
319 { "TreeMoveLeft", CK_TreeMoveLeft
},
320 { "TreeMoveRight", CK_TreeMoveRight
},
321 { "TreeMoveHome", CK_TreeMoveHome
},
322 { "TreeMoveEnd", CK_TreeMoveEnd
},
323 { "TreeMovePgUp", CK_TreeMovePgUp
},
324 { "TreeMovePgDn", CK_TreeMovePgDn
},
325 { "TreeOpen", CK_TreeOpen
},
326 { "TreeRescan", CK_TreeRescan
},
327 { "TreeStartSearch", CK_TreeStartSearch
},
328 { "TreeRemove", CK_TreeRemove
},
331 { "CmdHelp", CK_HelpCmd
},
332 { "CmdMenu", CK_MenuCmd
},
333 { "CmdChmod", CK_ChmodCmd
},
334 { "CmdMenuLastSelected", CK_MenuLastSelectedCmd
},
335 { "CmdSingleDirsize", CK_SingleDirsizeCmd
},
336 { "CmdCopyCurrentPathname", CK_CopyCurrentPathname
},
337 { "CmdCopyOtherPathname", CK_CopyOtherPathname
},
338 { "CmdSuspend", CK_SuspendCmd
},
339 { "CmdToggleListing", CK_ToggleListingCmd
},
340 { "CmdChownAdvanced", CK_ChownAdvancedCmd
},
341 { "CmdChown", CK_ChownCmd
},
342 { "CmdCompareDirs", CK_CompareDirsCmd
},
343 { "CmdConfigureBox", CK_ConfigureBox
},
344 { "CmdConfigureVfs", CK_ConfigureVfs
},
345 { "CmdConfirmBox", CK_ConfirmBox
},
346 { "CmdCopy", CK_CopyCmd
},
347 { "CmdDelete", CK_DeleteCmd
},
348 { "CmdDirsizes", CK_DirsizesCmd
},
349 { "CmdDisplayBitsBox", CK_DisplayBitsBox
},
350 { "CmdEdit", CK_EditCmd
},
351 #ifdef USE_INTERNAL_EDIT
352 { "CmdEditForceInternal", CK_EditForceInternalCmd
},
354 { "CmdEditExtFile", CK_EditExtFileCmd
},
355 { "CmdEditFhlFile", CK_EditFhlFileCmd
},
356 { "CmdEditMcMenu", CK_EditMcMenuCmd
},
357 { "CmdEditSymlink", CK_EditSymlinkCmd
},
358 { "CmdEditSyntax", CK_EditSyntaxCmd
},
359 { "CmdEditUserMenu", CK_EditUserMenuCmd
},
360 { "CmdExternalPanelize", CK_ExternalPanelize
},
361 { "CmdFilter", CK_FilterCmd
},
362 { "CmdFilteredView", CK_FilteredViewCmd
},
363 { "CmdFind", CK_FindCmd
},
364 #ifdef ENABLE_VFS_FISH
365 { "CmdFishlink", CK_FishlinkCmd
},
367 #ifdef ENABLE_VFS_FTP
368 { "CmdFtplink", CK_FtplinkCmd
},
370 { "CmdHistory", CK_HistoryCmd
},
371 { "CmdInfo", CK_InfoCmd
},
372 #ifdef WITH_BACKGROUND
373 { "CmdJobs", CK_JobsCmd
},
375 { "CmdLayout", CK_LayoutBox
},
376 { "CmdLearnKeys", CK_LearnKeys
},
377 { "CmdLink", CK_LinkCmd
},
378 { "CmdChangeListing", CK_ChangeListingCmd
},
379 { "CmdListing", CK_ListingCmd
},
380 #ifdef LISTMODE_EDITOR
381 { "CmdListmodeCmd", CK_ListmodeCmd
}.
383 { "CmdMkdir", CK_MkdirCmd
},
384 { "CmdPanelOptions", CK_PanelOptionsBox
},
385 { "CmdQuickCd", CK_QuickCdCmd
},
386 { "CmdQuickChdir", CK_QuickChdirCmd
},
387 { "CmdQuickView", CK_QuickViewCmd
},
388 { "CmdQuietQuit", CK_QuietQuitCmd
},
389 { "CmdRelativeSymlink", CK_RelativeSymlinkCmd
},
390 { "CmdRename", CK_RenameCmd
},
391 { "CmdReread", CK_RereadCmd
},
392 { "CmdReselectVfs", CK_ReselectVfs
},
393 { "CmdReverseSelection", CK_ReverseSelectionCmd
},
394 { "CmdSaveSetup", CK_SaveSetupCmd
},
395 { "CmdSelect", CK_SelectCmd
},
396 #ifdef ENABLE_VFS_SMB
397 { "CmdSmblinkCmd", CK_SmblinkCmd
},
399 { "CmdSwapPanel", CK_SwapCmd
},
400 { "CmdSymlink", CK_SymlinkCmd
},
401 { "CmdTree", CK_TreeCmd
},
402 { "CmdTreeBox", CK_TreeBoxCmd
},
403 #ifdef ENABLE_VFS_UNDELFS
404 { "CmdUndelete", CK_UndeleteCmd
},
406 { "CmdUnselect", CK_UnselectCmd
},
407 { "CmdUserMenu", CK_UserMenuCmd
},
408 { "CmdUserFileMenu", CK_UserFileMenuCmd
},
409 { "CmdView", CK_ViewCmd
},
410 { "CmdViewFile", CK_ViewFileCmd
},
411 { "CmdCopyCurrentReadlink", CK_CopyCurrentReadlink
},
412 { "CmdCopyOtherReadlink", CK_CopyOtherReadlink
},
413 { "CmdAddHotlist", CK_AddHotlist
},
414 { "CmdQuit", CK_QuitCmd
},
415 { "CmdCopyCurrentTagged", CK_CopyCurrentTagged
},
416 { "CmdCopyOtherTagged", CK_CopyOtherTagged
},
417 { "CmdToggleShowHidden", CK_ToggleShowHidden
},
418 { "CmdTogglePanelsSplit", CK_TogglePanelsSplit
},
420 { "CmdDiffView", CK_DiffViewCmd
},
422 { "CmdDialogList", CK_DialogListCmd
},
423 { "CmdDialogNext", CK_DialogNextCmd
},
424 { "CmdDialogPrev", CK_DialogPrevCmd
},
427 { "PanelChdirOtherPanel", CK_PanelChdirOtherPanel
},
428 { "PanelChdirToReadlink", CK_PanelChdirToReadlink
},
429 { "PanelCopyLocal", CK_PanelCmdCopyLocal
},
430 { "PanelDeleteLocal", CK_PanelCmdDeleteLocal
},
431 { "PanelDoEnter", CK_PanelCmdDoEnter
},
432 { "PanelEditNew", CK_PanelCmdEditNew
},
433 { "PanelRenameLocal", CK_PanelCmdRenameLocal
},
434 { "PanelReverseSelection", CK_PanelCmdReverseSelection
},
435 { "PanelSelect", CK_PanelCmdSelect
},
436 { "PanelUnselect", CK_PanelCmdUnselect
},
437 { "PanelViewSimple", CK_PanelCmdViewSimple
},
438 { "PanelCtrlNextPage", CK_PanelCtrlNextPage
},
439 { "PanelCtrlPrevPage", CK_PanelCtrlPrevPage
},
440 { "PanelDirectoryHistoryList", CK_PanelDirectoryHistoryList
},
441 { "PanelDirectoryHistoryNext", CK_PanelDirectoryHistoryNext
},
442 { "PanelDirectoryHistoryPrev", CK_PanelDirectoryHistoryPrev
},
443 { "PanelGotoBottomFile", CK_PanelGotoBottomFile
},
444 { "PanelGotoMiddleFile", CK_PanelGotoMiddleFile
},
445 { "PanelGotoTopFile", CK_PanelGotoTopFile
},
446 { "PanelMarkFile", CK_PanelMarkFile
},
447 { "PanelMarkFileDown", CK_PanelMarkFileDown
},
448 { "PanelMarkFileUp", CK_PanelMarkFileUp
},
449 { "PanelMoveUp", CK_PanelMoveUp
},
450 { "PanelMoveDown", CK_PanelMoveDown
},
451 { "PanelMoveLeft", CK_PanelMoveLeft
},
452 { "PanelMoveRight", CK_PanelMoveRight
},
453 { "PanelMoveEnd", CK_PanelMoveEnd
},
454 { "PanelMoveHome", CK_PanelMoveHome
},
455 { "PanelNextPage", CK_PanelNextPage
},
456 { "PanelPrevPage", CK_PanelPrevPage
},
458 { "PanelSetPanelEncoding", CK_PanelSetPanelEncoding
},
460 { "PanelStartSearch", CK_PanelStartSearch
},
461 { "PanelSyncOtherPanel", CK_PanelSyncOtherPanel
},
462 { "PanelToggleSortOrderNext", CK_PanelToggleSortOrderNext
},
463 { "PanelToggleSortOrderPrev", CK_PanelToggleSortOrderPrev
},
464 { "PanelSelectSortOrder", CK_PanelSelectSortOrder
},
465 { "PanelReverseSort", CK_PanelReverseSort
},
466 { "PanelSortOrderByName", CK_PanelSortOrderByName
},
467 { "PanelSortOrderByExt", CK_PanelSortOrderByExt
},
468 { "PanelSortOrderBySize", CK_PanelSortOrderBySize
},
469 { "PanelSortOrderByMTime", CK_PanelSortOrderByMTime
},
472 { "InputBol", CK_InputBol
},
473 { "InputEol", CK_InputEol
},
474 { "InputMoveLeft", CK_InputMoveLeft
},
475 { "InputWordLeft", CK_InputWordLeft
},
476 { "InputBackwardChar", CK_InputBackwardChar
},
477 { "InputBackwardWord", CK_InputBackwardWord
},
478 { "InputMoveRight", CK_InputMoveRight
},
479 { "InputWordRight", CK_InputWordRight
},
480 { "InputForwardChar", CK_InputForwardChar
},
481 { "InputForwardWord", CK_InputForwardWord
},
482 { "InputBackwardDelete", CK_InputBackwardDelete
},
483 { "InputDeleteChar", CK_InputDeleteChar
},
484 { "InputKillWord", CK_InputKillWord
},
485 { "InputBackwardKillWord", CK_InputBackwardKillWord
},
486 { "InputSetMark", CK_InputSetMark
},
487 { "InputKillRegion", CK_InputKillRegion
},
488 { "InputYank", CK_InputYank
},
489 { "InputKillLine", CK_InputKillLine
},
490 { "InputHistoryPrev", CK_InputHistoryPrev
},
491 { "InputHistoryNext", CK_InputHistoryNext
},
492 { "InputHistoryShow", CK_InputHistoryShow
},
493 { "InputComplete", CK_InputComplete
},
494 { "InputXStore", CK_InputKillSave
},
495 { "InputXPaste", CK_InputPaste
},
496 { "InputClearLine", CK_InputClearLine
},
497 { "InputLeftHighlight", CK_InputLeftHighlight
},
498 { "InputRightHighlight", CK_InputRightHighlight
},
499 { "InputWordLeftHighlight", CK_InputWordLeftHighlight
},
500 { "InputWordRightHighlight", CK_InputWordRightHighlight
},
501 { "InputBolHighlight", CK_InputBolHighlight
},
502 { "InputEolHighlight", CK_InputEolHighlight
},
505 { "ListboxMoveUp", CK_ListboxMoveUp
},
506 { "ListboxMoveDown", CK_ListboxMoveDown
},
507 { "ListboxMoveHome", CK_ListboxMoveHome
},
508 { "ListboxMoveEnd", CK_ListboxMoveEnd
},
509 { "ListboxMovePgUp", CK_ListboxMovePgUp
},
510 { "ListboxMovePgDn", CK_ListboxMovePgDn
},
511 { "ListboxDeleteItem", CK_ListboxDeleteItem
},
512 { "ListboxDeleteAll", CK_ListboxDeleteAll
},
515 { "ExtMap1", CK_StartExtMap1
},
516 { "ExtMap2", CK_StartExtMap2
},
517 { "ShowCommandLine", CK_ShowCommandLine
},
518 { "SelectCodepage", CK_SelectCodepage
},
521 { "DialogOK", CK_DialogOK
},
522 { "DialogCancel", CK_DialogCancel
},
523 { "DialogPrevItem", CK_DialogPrevItem
},
524 { "DialogNextItem", CK_DialogNextItem
},
525 { "DialogHelp", CK_DialogHelp
},
526 { "DialogSuspend", CK_DialogSuspend
},
527 { "DialogRefresh", CK_DialogRefresh
},
531 { "DiffDisplaySymbols", CK_DiffDisplaySymbols
},
532 { "DiffDisplayNumbers", CK_DiffDisplayNumbers
},
533 { "DiffFull", CK_DiffFull
},
534 { "DiffEqual", CK_DiffEqual
},
535 { "DiffSplitMore", CK_DiffSplitMore
},
536 { "DiffSplitLess", CK_DiffSplitLess
},
537 { "DiffShowDiff", CK_DiffShowDiff
},
538 { "DiffSetTab2", CK_DiffSetTab2
},
539 { "DiffSetTab3", CK_DiffSetTab3
},
540 { "DiffSetTab4", CK_DiffSetTab4
},
541 { "DiffSetTab8", CK_DiffSetTab8
},
542 { "DiffSwapPanel", CK_DiffSwapPanel
},
543 { "DiffRedo", CK_DiffRedo
},
544 { "DiffNextHunk", CK_DiffNextHunk
},
545 { "DiffPrevHunk", CK_DiffPrevHunk
},
546 { "DiffGoto", CK_DiffGoto
},
547 { "DiffEditCurrent", CK_DiffEditCurrent
},
548 { "DiffEditOther", CK_DiffEditOther
},
549 { "DiffSearch", CK_DiffSearch
},
550 { "DiffContinueSearch", CK_DiffContinueSearch
},
551 { "DiffEOF", CK_DiffEOF
},
552 { "DiffBOF", CK_DiffBOF
},
553 { "DiffDown", CK_DiffDown
},
554 { "DiffUp", CK_DiffUp
},
555 { "DiffLeft", CK_DiffLeft
},
556 { "DiffRight", CK_DiffRight
},
557 { "DiffPageDown", CK_DiffPageDown
},
558 { "DiffPageUp", CK_DiffPageUp
},
559 { "DiffHome", CK_DiffHome
},
560 { "DiffEnd", CK_DiffEnd
},
561 { "DiffQuit", CK_DiffQuit
},
562 { "DiffHelp", CK_DiffHelp
},
563 { "SelectCodepage", CK_SelectCodepage
},
564 { "DiffMergeCurrentHunk", CK_DiffMergeCurrentHunk
},
565 { "DiffSave", CK_DiffSave
},
566 { "DiffOptions", CK_DiffOptions
},
569 { NULL
, CK_Ignore_Key
}
572 static const size_t num_command_names
= sizeof (command_names
) /
573 sizeof (command_names
[0]) - 1;
575 /*** global variables ****************************************************************************/
577 /* viewer/actions_cmd.c */
578 const global_keymap_t default_viewer_keymap
[] = {
579 { KEY_F (1), CK_ViewHelp
, "F1" },
580 { KEY_F (2), CK_ViewToggleWrapMode
, "F2" },
581 { KEY_F (3), CK_ViewQuit
, "F3" },
582 { KEY_F (4), CK_ViewToggleHexMode
, "F4" },
583 { KEY_F (5), CK_ViewGoto
, "F5" },
584 { KEY_F (7), CK_ViewSearch
, "F7" },
585 { KEY_F (8), CK_ViewToggleMagicMode
, "F8" },
586 { KEY_F (9), CK_ViewToggleNroffMode
, "F9" },
587 { KEY_F (10), CK_ViewQuit
, "F10" },
589 { '?', CK_ViewSearch
, "?" },
590 { '/', CK_ViewSearch
, "/" },
591 { XCTRL ('r'), CK_ViewContinueSearch
, "C-r" },
592 { XCTRL ('s'), CK_ViewContinueSearch
, "C-s" },
593 { KEY_F (17), CK_ViewContinueSearch
, "S-F7" },
594 { 'n', CK_ViewContinueSearch
, "n" },
595 { ALT ('r'), CK_ViewToggleRuler
, "M-r" },
597 { XCTRL ('a'), CK_ViewMoveToBol
, "C-a" },
598 { XCTRL ('e'), CK_ViewMoveToEol
, "C-e" },
600 { 'h', CK_ViewMoveLeft
, "h" },
601 { KEY_LEFT
, CK_ViewMoveLeft
, "Left" },
603 { 'l', CK_ViewMoveRight
, "l" },
604 { KEY_RIGHT
, CK_ViewMoveRight
, "Right" },
606 { KEY_M_CTRL
| KEY_LEFT
, CK_ViewMoveLeft10
, "C-Left" },
607 { KEY_M_CTRL
| KEY_RIGHT
, CK_ViewMoveRight10
, "C-Right" },
609 { 'k', CK_ViewMoveUp
, "k" },
610 { 'y', CK_ViewMoveUp
, "y" },
611 { XCTRL ('p'), CK_ViewMoveUp
, "C-p" },
612 { KEY_IC
, CK_ViewMoveUp
, "Insert" },
613 { KEY_UP
, CK_ViewMoveUp
, "Up" },
615 { 'j', CK_ViewMoveDown
, "j" },
616 { 'e', CK_ViewMoveDown
, "e" },
617 { XCTRL ('n'), CK_ViewMoveUp
, "C-n" },
618 { KEY_DOWN
, CK_ViewMoveDown
, "Down" },
619 { KEY_DC
, CK_ViewMoveDown
, "Delete" },
620 { '\n', CK_ViewMoveDown
, "Endter" },
622 { ' ', CK_ViewMovePgDn
, "Space" },
623 { 'f', CK_ViewMovePgDn
, "f" },
624 { KEY_NPAGE
, CK_ViewMovePgDn
, "PgDn" },
625 { XCTRL ('v'), CK_ViewMovePgDn
, "C-v" },
627 { 'b', CK_ViewMovePgUp
, "b" },
628 { KEY_PPAGE
, CK_ViewMovePgUp
, "PgUp" },
629 { ALT ('v'), CK_ViewMovePgUp
, "M-v" },
630 { KEY_BACKSPACE
, CK_ViewMovePgUp
, "BackSpace" },
632 { 'd', CK_ViewMoveHalfPgDn
, "d" },
633 { 'u', CK_ViewMoveHalfPgUp
, "u" },
635 { KEY_HOME
, CK_ViewMoveTop
, "Home" },
636 { KEY_M_CTRL
| KEY_HOME
, CK_ViewMoveTop
, "C-Home" },
637 { KEY_M_CTRL
| KEY_PPAGE
, CK_ViewMoveTop
, "C-PgUp" },
638 { KEY_A1
, CK_ViewMoveTop
, "A1" },
639 { ALT ('<'), CK_ViewMoveTop
, "M-<" },
640 { 'g', CK_ViewMoveTop
, "g" },
642 { KEY_END
, CK_ViewMoveBottom
, "End" },
643 { KEY_M_CTRL
| KEY_END
, CK_ViewMoveBottom
, "C-End" },
644 { KEY_M_CTRL
| KEY_NPAGE
, CK_ViewMoveBottom
, "C-PgDn" },
645 { KEY_C1
, CK_ViewMoveBottom
, "C1" },
646 { ALT ('>'), CK_ViewMoveBottom
, "M->" },
647 { 'G', CK_ViewMoveBottom
, "G" },
649 { 'm', CK_ViewGotoBookmark
, "m" },
650 { 'r', CK_ViewNewBookmark
, "r" },
652 { XCTRL ('f'), CK_ViewNextFile
, "C-f" },
653 { XCTRL ('b'), CK_ViewPrevFile
, "C-b" },
655 { 'q', CK_ViewQuit
, "q" },
656 { XCTRL ('g'), CK_ViewQuit
, "C-g" },
657 { ESC_CHAR
, CK_ViewQuit
, "Esc" },
659 { ALT ('e'), CK_SelectCodepage
, "M-e" },
660 { XCTRL ('o'), CK_ShowCommandLine
, "C-o" },
662 { 0, CK_Ignore_Key
, "" }
665 const global_keymap_t default_viewer_hex_keymap
[] = {
666 { KEY_F (1), CK_ViewHelp
, "F1" },
667 { KEY_F (2), CK_ViewToggleHexEditMode
, "F2" },
668 { KEY_F (3), CK_ViewQuit
, "F3" },
669 { KEY_F (4), CK_ViewToggleHexMode
, "F4" },
670 { KEY_F (5), CK_ViewGoto
, "F5" },
671 { KEY_F (6), CK_ViewHexEditSave
, "F6" },
672 { KEY_F (7), CK_ViewSearch
, "F7" },
673 { KEY_F (8), CK_ViewToggleMagicMode
, "F8" },
674 { KEY_F (9), CK_ViewToggleNroffMode
, "F9" },
675 { KEY_F (10), CK_ViewQuit
, "F10" },
677 { '?', CK_ViewSearch
, "?" },
678 { '/', CK_ViewSearch
, "/" },
679 { XCTRL ('r'), CK_ViewContinueSearch
, "C-r" },
680 { XCTRL ('s'), CK_ViewContinueSearch
, "C-s" },
681 { KEY_F (17), CK_ViewContinueSearch
, "S-F7" },
682 { 'n', CK_ViewContinueSearch
, "n" },
684 { '\t', CK_ViewToggleHexNavMode
, "Tab" },
685 { XCTRL ('a'), CK_ViewMoveToBol
, "C-a" },
686 { XCTRL ('e'), CK_ViewMoveToEol
, "C-e" },
688 { 'b', CK_ViewMoveLeft
, "b" },
689 { KEY_LEFT
, CK_ViewMoveLeft
, "Left" },
691 { 'f', CK_ViewMoveRight
, "f" },
692 { KEY_RIGHT
, CK_ViewMoveRight
, "Right" },
694 { 'k', CK_ViewMoveUp
, "k" },
695 { 'y', CK_ViewMoveUp
, "y" },
696 { KEY_UP
, CK_ViewMoveUp
, "Up" },
698 { 'j', CK_ViewMoveDown
, "j" },
699 { KEY_DOWN
, CK_ViewMoveDown
, "Down" },
700 { KEY_DC
, CK_ViewMoveDown
, "Delete" },
702 { KEY_NPAGE
, CK_ViewMovePgDn
, "PgDn" },
703 { XCTRL ('v'), CK_ViewMovePgDn
, "C-v" },
705 { KEY_PPAGE
, CK_ViewMovePgUp
, "PgUp" },
706 { ALT ('v'), CK_ViewMovePgUp
, "M-v" },
708 { KEY_HOME
, CK_ViewMoveTop
, "Home" },
709 { KEY_M_CTRL
| KEY_HOME
, CK_ViewMoveTop
, "C-Home" },
710 { KEY_M_CTRL
| KEY_PPAGE
, CK_ViewMoveTop
, "C-PgUp" },
711 { KEY_A1
, CK_ViewMoveTop
, "A1" },
712 { ALT ('<'), CK_ViewMoveTop
, "M-<" },
713 { 'g', CK_ViewMoveTop
, "g" },
715 { KEY_END
, CK_ViewMoveBottom
, "End" },
716 { KEY_M_CTRL
| KEY_END
, CK_ViewMoveBottom
, "C-End" },
717 { KEY_M_CTRL
| KEY_NPAGE
, CK_ViewMoveBottom
, "C-PgDn" },
718 { KEY_C1
, CK_ViewMoveBottom
, "C1" },
719 { ALT ('>'), CK_ViewMoveBottom
, "M->" },
720 { 'G', CK_ViewMoveBottom
, "G" },
722 { 'q', CK_ViewQuit
, "q" },
723 { XCTRL ('g'), CK_ViewQuit
, "C-g" },
724 { ESC_CHAR
, CK_ViewQuit
, "Esc" },
726 { ALT ('e'), CK_SelectCodepage
, "M-e" },
727 { XCTRL ('o'), CK_ShowCommandLine
, "C-o" },
729 { 0, CK_Ignore_Key
, "" }
732 #ifdef USE_INTERNAL_EDIT
733 /* ../edit/editkeys.c */
734 const global_keymap_t default_editor_keymap
[] = {
735 { '\n', CK_Enter
, "Enter" },
736 { '\t', CK_Tab
, "Tab" },
738 { KEY_F (1), CK_Help
, "F1" },
739 { KEY_F (2), CK_Save
, "F2" },
740 { KEY_F (3), CK_Mark
, "F3" },
741 { KEY_F (4), CK_Replace
, "F4" },
742 { KEY_F (5), CK_Copy
, "F5" },
743 { KEY_F (6), CK_Move
, "F6" },
744 { KEY_F (7), CK_Find
, "F7" },
745 { KEY_F (8), CK_Remove
, "F8" },
746 { KEY_F (9), CK_Menu
, "F9" },
747 { KEY_F (10), CK_Quit
, "F10" },
749 { KEY_F (11), CK_User_Menu
, "S-F1" },
750 { KEY_F (12), CK_Save_As
, "S-F2" },
751 { KEY_F (13), CK_Column_Mark
, "S-F3" },
752 { KEY_F (14), CK_Replace_Again
, "S-F4" },
753 { KEY_F (15), CK_Insert_File
, "S-F5" },
754 { KEY_F (17), CK_Find_Again
, "S-F7" },
756 { KEY_F (19), CK_Pipe_Block (0), "S-F9" },
758 { ESC_CHAR
, CK_Quit
, "Esc" },
759 { KEY_BACKSPACE
, CK_BackSpace
, "BackSpace" },
760 { KEY_DC
, CK_Delete
, "Delete" },
761 { KEY_DOWN
, CK_Down
, "Down" },
762 { KEY_END
, CK_End
, "End" },
763 { KEY_HOME
, CK_Home
, "Home" },
764 { KEY_IC
, CK_Toggle_Insert
, "Insert" },
765 { KEY_LEFT
, CK_Left
, "Left" },
766 { KEY_NPAGE
, CK_Page_Down
, "PgDn" },
767 { KEY_PPAGE
, CK_Page_Up
, "PgUp" },
768 { KEY_RIGHT
, CK_Right
, "Right" },
769 { KEY_UP
, CK_Up
, "Up" },
772 { KEY_M_CTRL
| (KEY_F (2)), CK_Save_As
, "C-F2" },
773 { KEY_M_CTRL
| (KEY_F (4)), CK_Replace_Again
, "C-F4" },
774 { KEY_M_CTRL
| (KEY_F (7)), CK_Find_Again
, "C-F7" },
775 { KEY_M_CTRL
| KEY_BACKSPACE
, CK_Undo
, "C-BackSpace" },
776 { KEY_M_CTRL
| KEY_NPAGE
, CK_End_Of_Text
, "C-PgDn" },
777 { KEY_M_CTRL
| KEY_PPAGE
, CK_Beginning_Of_Text
, "C-PgUp" },
778 { KEY_M_CTRL
| KEY_HOME
, CK_Beginning_Of_Text
, "C-Home" },
779 { KEY_M_CTRL
| KEY_END
, CK_End_Of_Text
, "C-End" },
780 { KEY_M_CTRL
| KEY_UP
, CK_Scroll_Up
, "C-Up" },
781 { KEY_M_CTRL
| KEY_DOWN
, CK_Scroll_Down
, "C-Down" },
782 { KEY_M_CTRL
| KEY_LEFT
, CK_Word_Left
, "C-Left" },
783 { KEY_M_CTRL
| KEY_RIGHT
, CK_Word_Right
, "C-Right" },
784 { KEY_M_CTRL
| KEY_IC
, CK_XStore
, "C-Insert" },
785 { KEY_M_CTRL
| KEY_DC
, CK_Remove
, "C-Delete" },
787 { XCTRL ('n'), CK_New
, "C-n" },
788 { XCTRL ('k'), CK_Delete_To_Line_End
, "C-k" },
789 { XCTRL ('l'), CK_Refresh
, "C-l" },
790 { XCTRL ('o'), CK_Shell
, "C-o" },
791 { XCTRL ('s'), CK_Toggle_Syntax
, "C-s" },
792 { XCTRL ('u'), CK_Undo
, "C-u" },
793 { ALT ('e'), CK_SelectCodepage
, "M-e" },
794 { XCTRL ('q'), CK_Insert_Literal
, "C-q" },
795 { XCTRL ('r'), CK_Begin_End_Macro
, "C-r" },
796 { XCTRL ('r'), CK_Begin_Record_Macro
, "C-r" },
797 { XCTRL ('r'), CK_End_Record_Macro
, "C-r" },
798 { XCTRL ('a'), CK_Execute_Macro
, "C-a" },
801 { KEY_M_SHIFT
| KEY_NPAGE
, CK_Page_Down_Highlight
, "S-PgDn" },
802 { KEY_M_SHIFT
| KEY_PPAGE
, CK_Page_Up_Highlight
, "S-PgUp" },
803 { KEY_M_SHIFT
| KEY_LEFT
, CK_Left_Highlight
, "S-Left" },
804 { KEY_M_SHIFT
| KEY_RIGHT
, CK_Right_Highlight
, "S-Right" },
805 { KEY_M_SHIFT
| KEY_UP
, CK_Up_Highlight
, "S-Up" },
806 { KEY_M_SHIFT
| KEY_DOWN
, CK_Down_Highlight
, "S-Down" },
807 { KEY_M_SHIFT
| KEY_HOME
, CK_Home_Highlight
, "S-Home" },
808 { KEY_M_SHIFT
| KEY_END
, CK_End_Highlight
, "S-End" },
809 { KEY_M_SHIFT
| KEY_IC
, CK_XPaste
, "S-Insert" },
810 { KEY_M_SHIFT
| KEY_DC
, CK_XCut
, "S-Delete" },
811 /* useful for pasting multiline text */
812 { KEY_M_SHIFT
| '\n', CK_Return
, "S-Enter" },
815 { KEY_M_SHIFT
| KEY_M_CTRL
| KEY_NPAGE
, CK_End_Of_Text_Highlight
, "C-S-PgDn" },
816 { KEY_M_SHIFT
| KEY_M_CTRL
| KEY_PPAGE
, CK_Beginning_Of_Text_Highlight
, "C-S-PgUp" },
817 { KEY_M_SHIFT
| KEY_M_CTRL
| KEY_LEFT
, CK_Word_Left_Highlight
, "C-S-Left" },
818 { KEY_M_SHIFT
| KEY_M_CTRL
| KEY_RIGHT
, CK_Word_Right_Highlight
, "C-S-Right" },
819 { KEY_M_SHIFT
| KEY_M_CTRL
| KEY_UP
, CK_Scroll_Up_Highlight
, "C-S-Up" },
820 { KEY_M_SHIFT
| KEY_M_CTRL
| KEY_DOWN
, CK_Scroll_Down_Highlight
, "C-S-Down" },
823 { KEY_M_ALT
| KEY_NPAGE
, CK_Page_Down_Alt_Highlight
, "M-PgDn" },
824 { KEY_M_ALT
| KEY_PPAGE
, CK_Page_Up_Alt_Highlight
, "M-PgUp" },
825 { KEY_M_ALT
| KEY_LEFT
, CK_Left_Alt_Highlight
, "M-Left" },
826 { KEY_M_ALT
| KEY_RIGHT
, CK_Right_Alt_Highlight
, "M-Right" },
827 { KEY_M_ALT
| KEY_UP
, CK_Up_Alt_Highlight
, "M-Up" },
828 { KEY_M_ALT
| KEY_DOWN
, CK_Down_Alt_Highlight
, "M-Down" },
829 { KEY_M_ALT
| KEY_HOME
, CK_Home_Highlight
, "M-Home" },
830 { KEY_M_ALT
| KEY_END
, CK_End_Alt_Highlight
, "M-End" },
832 { ALT ('\n'), CK_Find_Definition
, "M-Enter" },
833 { ALT ('\t'), CK_Complete_Word
, "M-Tab" },
834 { ALT ('l'), CK_Goto
, "M-l" },
835 { ALT ('L'), CK_Goto
, "M-L" },
836 { ALT ('p'), CK_Paragraph_Format
, "M-p" },
837 { ALT ('t'), CK_Sort
, "M-t" },
838 { ALT ('u'), CK_ExtCmd
, "M-u" },
839 { ALT ('<'), CK_Beginning_Of_Text
, "M-<" },
840 { ALT ('>'), CK_End_Of_Text
, "M->" },
841 { ALT ('-'), CK_Load_Prev_File
, "M--" },
842 { ALT ('+'), CK_Load_Next_File
, "M-+" },
843 { ALT ('d'), CK_Delete_Word_Right
, "M-d" },
844 { ALT (KEY_BACKSPACE
), CK_Delete_Word_Left
, "M-BackSpace" },
845 { ALT ('n'), CK_Toggle_Line_State
, "M-n" },
846 { ALT ('_'), CK_Toggle_Tab_TWS
, "M-_" },
847 { ALT ('k'), CK_Toggle_Bookmark
, "M-k" },
848 { ALT ('i'), CK_Prev_Bookmark
, "M-i" },
849 { ALT ('j'), CK_Next_Bookmark
, "M-j" },
850 { ALT ('o'), CK_Flush_Bookmarks
, "M-o" },
852 { XCTRL ('x'), CK_Ext_Mode
, "C-x" },
854 { 0, CK_Ignore_Key
, "" }
857 /* emacs keyboard layout emulation */
858 const global_keymap_t default_editor_x_keymap
[] = {
860 { 'e', CK_Execute_Macro
, "e"},
861 { 0, CK_Ignore_Key
, "" }
863 #endif /* USE_INTERNAL_EDIT */
866 const global_keymap_t default_dialog_keymap
[] = {
867 { '\n', CK_DialogOK
, "Enter" },
868 { KEY_ENTER
, CK_DialogOK
, "Enter" },
869 { ESC_CHAR
, CK_DialogCancel
, "Esc" },
870 { XCTRL('g'), CK_DialogCancel
, "C-g" },
871 { KEY_F (10), CK_DialogCancel
, "F10" },
872 { KEY_LEFT
, CK_DialogPrevItem
, "Left" },
873 { KEY_UP
, CK_DialogPrevItem
, "Up" },
874 { KEY_RIGHT
, CK_DialogNextItem
, "Right" },
875 { KEY_DOWN
, CK_DialogNextItem
, "Down" },
876 { KEY_F(1), CK_DialogHelp
, "F1" },
877 { XCTRL('z'), CK_DialogSuspend
, "C-z" },
878 { XCTRL('l'), CK_DialogRefresh
, "C-l" },
879 { 0, CK_Ignore_Key
, "" }
883 const global_keymap_t default_tree_keymap
[] = {
884 { KEY_F (1), CK_TreeHelp
, "F1"},
885 { KEY_F (2), CK_TreeRescan
, "F2" },
886 { KEY_F (3), CK_TreeForget
, "F3" },
887 { KEY_F (4), CK_TreeToggleNav
, "F4" },
888 { KEY_F (5), CK_TreeCopy
, "F5" },
889 { KEY_F (6), CK_TreeMove
, "F6" },
891 { KEY_F (7), CK_TreeMake
, "F7" },
893 { KEY_F (8), CK_TreeRemove
, "F8" },
894 { KEY_UP
, CK_TreeMoveUp
, "Up" },
895 { XCTRL ('p'), CK_TreeMoveUp
, "C-p" },
896 { KEY_DOWN
, CK_TreeMoveDown
, "Down" },
897 { XCTRL ('n'), CK_TreeMoveDown
, "C-n" },
898 { KEY_LEFT
, CK_TreeMoveLeft
, "Left" },
899 { KEY_RIGHT
, CK_TreeMoveRight
, "Right" },
900 { KEY_HOME
, CK_TreeMoveHome
, "Home" },
901 { ALT ('<'), CK_TreeMoveHome
, "M-<" },
902 { KEY_A1
, CK_TreeMoveHome
, "A1" },
903 { KEY_END
, CK_TreeMoveEnd
, "End" },
904 { ALT ('>'), CK_TreeMoveEnd
, "M->" },
905 { KEY_C1
, CK_TreeMoveEnd
, "C1" },
906 { KEY_PPAGE
, CK_TreeMovePgUp
, "PgUp" },
907 { ALT ('v'), CK_TreeMovePgUp
, "M-v" },
908 { KEY_NPAGE
, CK_TreeMovePgDn
, "PnDn" },
909 { XCTRL ('v'), CK_TreeMovePgDn
, "C-v" },
910 { '\n', CK_TreeOpen
, "Enter" },
911 { KEY_ENTER
, CK_TreeOpen
, "Enter" },
912 { XCTRL ('r'), CK_TreeRescan
, "C-r" },
913 { XCTRL ('s'), CK_TreeStartSearch
, "C-s" },
914 { ALT ('s'), CK_TreeStartSearch
, "M-s" },
915 { KEY_DC
, CK_TreeRemove
, "Delete" },
916 { 0, CK_Ignore_Key
, ""}
920 const global_keymap_t default_help_keymap
[] = {
921 { KEY_F (1), CK_HelpHelp
, "F1" },
922 { KEY_F (2), CK_HelpIndex
, "F2" },
923 { KEY_F (3), CK_HelpBack
, "F3" },
924 { KEY_F (10), CK_HelpQuit
, "F10" },
925 { KEY_LEFT
, CK_HelpBack
, "Left" },
926 { 'l', CK_HelpBack
, "l" },
927 { KEY_DOWN
, CK_HelpMoveDown
, "Down" },
928 { XCTRL ('n'), CK_HelpMoveDown
, "C-n" },
929 { KEY_UP
, CK_HelpMoveUp
, "Up" },
930 { XCTRL ('p'), CK_HelpMoveUp
, "C-p" },
931 { KEY_NPAGE
, CK_HelpMovePgDn
, "PgDn" },
932 { XCTRL ('v'), CK_HelpMovePgDn
, "C-v" },
933 { 'f', CK_HelpMovePgDn
, "f" },
934 { ' ', CK_HelpMovePgDn
, "Space" },
935 { KEY_PPAGE
, CK_HelpMovePgUp
, "PgUp" },
936 { ALT ('v'), CK_HelpMovePgUp
, "M-v" },
937 { 'b', CK_HelpMovePgUp
, "b" },
938 { KEY_BACKSPACE
, CK_HelpMovePgUp
, "BackSpace" },
939 { 'd', CK_HelpMoveHalfPgDn
, "d" },
940 { 'u', CK_HelpMoveHalfPgUp
, "u" },
941 { KEY_HOME
, CK_HelpMoveTop
, "Home" },
942 { KEY_M_CTRL
| KEY_HOME
, CK_HelpMoveTop
, "C-Home" },
943 { KEY_M_CTRL
| KEY_PPAGE
, CK_HelpMoveTop
, "C-PgUp" },
944 { KEY_A1
, CK_HelpMoveTop
, "A1" },
945 { ALT ('<'), CK_HelpMoveTop
, "M-<" },
946 { 'g', CK_HelpMoveTop
, "g" },
947 { KEY_END
, CK_HelpMoveBottom
, "End" },
948 { KEY_M_CTRL
| KEY_END
, CK_HelpMoveBottom
, "C-End" },
949 { KEY_M_CTRL
| KEY_NPAGE
, CK_HelpMoveBottom
, "C-PgDn" },
950 { KEY_C1
, CK_HelpMoveBottom
, "C1" },
951 { ALT ('>'), CK_HelpMoveBottom
, "M->" },
952 { 'G', CK_HelpMoveBottom
, "G" },
953 { KEY_RIGHT
, CK_HelpSelectLink
, "Right" },
954 { KEY_ENTER
, CK_HelpSelectLink
, "Enter" },
955 { '\n', CK_HelpSelectLink
, "Enter" },
956 { '\t', CK_HelpNextLink
, "Tab" },
957 { ALT ('\t'), CK_HelpPrevLink
, "M-Tab" },
958 { 'n', CK_HelpNextNode
, "n" },
959 { 'p', CK_HelpPrevNode
, "p" },
960 { ESC_CHAR
, CK_HelpQuit
, "Esc" },
961 { XCTRL ('g'), CK_HelpQuit
, "C-g" },
962 { 0, CK_Ignore_Key
, "" }
966 const global_keymap_t default_panel_keymap
[] = {
967 { ALT ('o'), CK_PanelChdirOtherPanel
, "M-o" },
968 { ALT ('l'), CK_PanelChdirToReadlink
, "M-l" },
969 { KEY_F (15), CK_PanelCmdCopyLocal
, "S-F5" },
970 { KEY_F (18), CK_PanelCmdDeleteLocal
, "S-F8" },
971 { KEY_ENTER
, CK_PanelCmdDoEnter
, "Enter" },
972 { '\n', CK_PanelCmdDoEnter
, "Enter" },
973 { KEY_F (14), CK_PanelCmdEditNew
, "S-F4" },
974 { KEY_F (16), CK_PanelCmdRenameLocal
, "S-F6" },
975 { ALT ('*'), CK_PanelCmdReverseSelection
, "M-*" },
976 { KEY_KP_ADD
, CK_PanelCmdSelect
, "M-+" },
977 { KEY_KP_SUBTRACT
, CK_PanelCmdUnselect
, "M--" },
978 { KEY_F (13), CK_PanelCmdViewSimple
, "S-F3" },
979 { KEY_M_CTRL
| KEY_NPAGE
, CK_PanelCtrlNextPage
, "C-PgDn" },
980 { KEY_M_CTRL
| KEY_PPAGE
, CK_PanelCtrlPrevPage
, "C-PgUp" },
981 { ALT ('H'), CK_PanelDirectoryHistoryList
, "M-H" },
982 { ALT ('u'), CK_PanelDirectoryHistoryNext
, "M-u" },
983 { ALT ('y'), CK_PanelDirectoryHistoryPrev
, "M-y" },
984 { ALT ('j'), CK_PanelGotoBottomFile
, "M-j" },
985 { ALT ('r'), CK_PanelGotoMiddleFile
, "M-r" },
986 { ALT ('g'), CK_PanelGotoTopFile
, "M-g" },
987 { KEY_IC
, CK_PanelMarkFile
, "Insert" },
988 { KEY_UP
, CK_PanelMoveUp
, "Up" },
989 { KEY_DOWN
, CK_PanelMoveDown
, "Down" },
990 { KEY_LEFT
, CK_PanelMoveLeft
, "Left" },
991 { KEY_RIGHT
, CK_PanelMoveRight
, "Right" },
992 { KEY_END
, CK_PanelMoveEnd
, "End" },
993 { KEY_C1
, CK_PanelMoveEnd
, "C1" },
994 { KEY_HOME
, CK_PanelMoveHome
, "Home" },
995 { KEY_A1
, CK_PanelMoveHome
, "A1" },
996 { KEY_NPAGE
, CK_PanelNextPage
, "PgDn" },
997 { KEY_PPAGE
, CK_PanelPrevPage
, "PgUp" },
998 { ALT ('e'), CK_PanelSetPanelEncoding
, "M-e" },
999 { XCTRL ('s'), CK_PanelStartSearch
, "C-s" },
1000 { ALT ('s'), CK_PanelStartSearch
, "M-s" },
1001 { ALT ('i'), CK_PanelSyncOtherPanel
, "M-i" },
1002 { 0, CK_Ignore_Key
, "" }
1006 const global_keymap_t default_main_map
[] = {
1007 { KEY_F (1), CK_HelpCmd
, "F1" },
1008 { KEY_F (2), CK_UserMenuCmd
, "F2" },
1009 { KEY_F (3), CK_ViewCmd
, "F3" },
1010 { KEY_F (4), CK_EditCmd
, "F4" },
1011 { KEY_F (5), CK_CopyCmd
, "F5" },
1012 { KEY_F (6), CK_RenameCmd
, "F6" },
1013 { KEY_F (7), CK_MkdirCmd
, "F7" },
1014 { KEY_F (8), CK_DeleteCmd
, "F8" },
1015 { KEY_F (9), CK_MenuCmd
, "F9" },
1016 { KEY_F (10), CK_QuitCmd
, "F10" },
1017 { KEY_F (13), CK_ViewFileCmd
, "S-F3" },
1018 { KEY_F (19), CK_MenuLastSelectedCmd
, "S-F9" },
1019 { KEY_F (20), CK_QuietQuitCmd
, "S-10" },
1020 { ALT ('h'), CK_HistoryCmd
, "M-h" },
1021 { XCTRL ('@'), CK_SingleDirsizeCmd
, "C-Space" },
1022 /* Copy useful information to the command line */
1023 { ALT ('a'), CK_CopyCurrentPathname
, "M-a" },
1024 { ALT ('A'), CK_CopyOtherPathname
, "M-A" },
1025 { ALT ('c'), CK_QuickCdCmd
, "M-c" },
1026 /* To access the directory hotlist */
1027 { XCTRL ('\\'), CK_QuickChdirCmd
, "C-\\" },
1029 { XCTRL ('z'), CK_SuspendCmd
, "C-z" },
1030 /* The filtered view command */
1031 { ALT ('!'), CK_FilteredViewCmd
, "M-!" },
1033 { ALT ('?'), CK_FindCmd
, "M-?" },
1035 { XCTRL ('r'), CK_RereadCmd
, "C-r" },
1036 /* Toggle listing between long, user defined and full formats */
1037 { ALT ('t'), CK_ToggleListingCmd
, "M-t" },
1039 { XCTRL ('u'), CK_SwapCmd
, "C-u" },
1041 { XCTRL ('o'), CK_ShowCommandLine
, "C-o" },
1042 { ALT ('.'), CK_ToggleShowHidden
, "M-." },
1043 { ALT (','), CK_TogglePanelsSplit
, "M-," },
1044 { XCTRL ('x'), CK_StartExtMap1
, "C-x" },
1045 /* Select/unselect group */
1046 { KEY_KP_ADD
, CK_SelectCmd
, "+" },
1047 { KEY_KP_SUBTRACT
, CK_UnselectCmd
, "-" },
1048 { ALT ('*'), CK_ReverseSelectionCmd
, "*" },
1050 { ALT ('`'), CK_DialogListCmd
, "M-`"},
1051 { ALT ('}'), CK_DialogNextCmd
, "M-}"},
1052 { ALT ('{'), CK_DialogPrevCmd
, "M-{"},
1054 { 0, CK_Ignore_Key
, "" }
1057 const global_keymap_t default_main_x_map
[] = {
1058 { 'd', CK_CompareDirsCmd
, "d" },
1060 { 'a', CK_ReselectVfs
, "a"},
1061 #endif /* ENABLE_VFS */
1062 { 'p', CK_CopyCurrentPathname
, "p" },
1063 { XCTRL ('p'), CK_CopyOtherPathname
, "C-p" },
1064 { 't', CK_CopyCurrentTagged
, "t" },
1065 { XCTRL ('t'), CK_CopyOtherTagged
, "C-t" },
1066 { 'c', CK_ChmodCmd
, "c" },
1067 { 'o', CK_ChownCmd
, "o" },
1068 { 'r', CK_CopyCurrentReadlink
, "r" },
1069 { XCTRL ('r'), CK_CopyOtherReadlink
, "C-r" },
1070 { 'l', CK_LinkCmd
, "l" },
1071 { 's', CK_SymlinkCmd
, "s" },
1072 { 'v', CK_RelativeSymlinkCmd
, "v" },
1073 { XCTRL ('s'), CK_EditSymlinkCmd
, "C-s" },
1074 { 'i', CK_InfoCmd
, "i" },
1075 { 'q', CK_QuickViewCmd
, "q" },
1076 { 'h', CK_AddHotlist
, "h" },
1077 { '!', CK_ExternalPanelize
, "!" },
1078 #ifdef WITH_BACKGROUND
1079 { 'j', CK_JobsCmd
, "j" },
1080 #endif /* WITH_BACKGROUND */
1081 { 0, CK_Ignore_Key
, "" }
1084 const global_keymap_t default_input_keymap
[] = {
1086 { XCTRL ('a'), CK_InputBol
, "C-a" },
1087 { KEY_HOME
, CK_InputBol
, "Home" },
1088 { KEY_A1
, CK_InputBol
, "A1" },
1089 { ALT ('<'), CK_InputBol
, "M-<" },
1090 { XCTRL ('e'), CK_InputEol
, "C-e" },
1091 { KEY_END
, CK_InputEol
, "End" },
1092 { ALT ('>'), CK_InputEol
, "M->" },
1093 { KEY_C1
, CK_InputEol
, "C1" },
1094 { KEY_LEFT
, CK_InputMoveLeft
, "Left" },
1095 { KEY_M_CTRL
| KEY_LEFT
, CK_InputWordLeft
, "C-Left" },
1096 { KEY_RIGHT
, CK_InputMoveRight
, "Right" },
1097 { KEY_M_CTRL
| KEY_RIGHT
, CK_InputWordRight
, "C-Right" },
1099 { XCTRL ('b'), CK_InputBackwardChar
, "C-b" },
1100 { ALT ('b'), CK_InputBackwardWord
, "M-b" },
1101 { XCTRL ('f'), CK_InputForwardChar
, "C-f" },
1102 { ALT ('f'), CK_InputForwardWord
, "M-f" },
1105 { KEY_BACKSPACE
, CK_InputBackwardDelete
, "BackSpace" },
1106 { KEY_DC
, CK_InputDeleteChar
, "Delete" },
1107 { ALT ('d'), CK_InputKillWord
, "M-d" },
1108 { ALT (KEY_BACKSPACE
), CK_InputBackwardKillWord
, "M-BackSpace" },
1110 /* Region manipulation */
1111 { XCTRL ('w'), CK_InputKillRegion
, "C-w" },
1112 { ALT ('w'), CK_InputKillSave
, "M-w" },
1113 { XCTRL ('y'), CK_InputYank
, "C-y" },
1114 { XCTRL ('k'), CK_InputKillLine
, "C-k" },
1117 { ALT ('p'), CK_InputHistoryPrev
, "M-p" },
1118 { ALT ('n'), CK_InputHistoryNext
, "M-n" },
1119 { ALT ('h'), CK_InputHistoryShow
, "M-h" },
1122 { ALT ('\t'), CK_InputComplete
, "M-tab" },
1124 { 0, CK_Ignore_Key
, "" }
1127 const global_keymap_t default_listbox_keymap
[] = {
1128 { KEY_UP
, CK_ListboxMoveUp
, "Up" },
1129 { XCTRL ('p'), CK_ListboxMoveUp
, "C-p" },
1130 { KEY_DOWN
, CK_ListboxMoveDown
, "Down" },
1131 { XCTRL ('n'), CK_ListboxMoveDown
, "C-n" },
1132 { KEY_HOME
, CK_ListboxMoveHome
, "Home" },
1133 { ALT ('<'), CK_ListboxMoveHome
, "M-<" },
1134 { KEY_A1
, CK_ListboxMoveHome
, "A1" },
1135 { KEY_END
, CK_ListboxMoveEnd
, "End" },
1136 { ALT ('>'), CK_ListboxMoveEnd
, "M->" },
1137 { KEY_C1
, CK_ListboxMoveEnd
, "C1" },
1138 { KEY_PPAGE
, CK_ListboxMovePgUp
, "PgUp" },
1139 { ALT ('v'), CK_ListboxMovePgUp
, "M-v" },
1140 { KEY_NPAGE
, CK_ListboxMovePgDn
, "PgDn" },
1141 { XCTRL ('v'), CK_ListboxMovePgDn
, "C-v" },
1142 { KEY_DC
, CK_ListboxDeleteItem
, "Delete" },
1143 { 'd', CK_ListboxDeleteItem
, "d" },
1144 { KEY_M_SHIFT
| KEY_DC
, CK_ListboxDeleteAll
, "S-Delete" },
1145 { 'D', CK_ListboxDeleteAll
, "D" },
1147 { 0, CK_Ignore_Key
, "" }
1150 #ifdef USE_DIFF_VIEW
1152 const global_keymap_t default_diff_keymap
[] = {
1154 { 's', CK_DiffDisplaySymbols
, "s" },
1155 { 'l', CK_DiffDisplayNumbers
, "l" },
1156 { 'f', CK_DiffFull
, "f" },
1157 { '=', CK_DiffEqual
, "=" },
1158 { '>', CK_DiffSplitMore
, ">" },
1159 { '<', CK_DiffSplitLess
, "<" },
1160 { '2', CK_DiffSetTab2
, "2" },
1161 { '3', CK_DiffSetTab3
, "3" },
1162 { '4', CK_DiffSetTab4
, "4" },
1163 { '8', CK_DiffSetTab8
, "8" },
1164 { XCTRL ('u'), CK_DiffSwapPanel
, "C-u" },
1165 { XCTRL ('r'), CK_DiffRedo
, "C-r" },
1166 { XCTRL ('o'), CK_ShowCommandLine
, "C-o" },
1167 { 'n', CK_DiffNextHunk
, "n" },
1168 { 'p', CK_DiffPrevHunk
, "p" },
1169 { 'g', CK_DiffGoto
, "g" },
1170 { 'G', CK_DiffGoto
, "G" },
1171 { KEY_M_CTRL
| KEY_HOME
, CK_DiffBOF
, "C-Home" },
1172 { KEY_M_CTRL
| KEY_END
, CK_DiffEOF
, "C-End" },
1173 { KEY_DOWN
, CK_DiffDown
, "Down" },
1174 { KEY_UP
, CK_DiffUp
, "Up" },
1175 { KEY_M_CTRL
| KEY_LEFT
, CK_DiffQuickLeft
, "C-Left" },
1176 { KEY_M_CTRL
| KEY_RIGHT
, CK_DiffQuickRight
, "C-Right" },
1177 { KEY_LEFT
, CK_DiffLeft
, "Left" },
1178 { KEY_RIGHT
, CK_DiffRight
, "Right" },
1179 { KEY_NPAGE
, CK_DiffPageDown
, "Down" },
1180 { KEY_PPAGE
, CK_DiffPageUp
, "Up" },
1181 { KEY_HOME
, CK_DiffHome
, "Home" },
1182 { KEY_END
, CK_DiffEnd
, "End" },
1183 { 'q', CK_DiffQuit
, "q" },
1184 { 'Q', CK_DiffQuit
, "Q" },
1185 { XCTRL ('g'), CK_DiffQuit
, "C-g" },
1186 { ESC_CHAR
, CK_DiffQuit
, "Esc" },
1188 { KEY_F (1), CK_DiffHelp
, "F1" },
1189 { KEY_F (4), CK_DiffEditCurrent
, "F4" },
1190 { KEY_F (5), CK_DiffMergeCurrentHunk
, "F5" },
1191 { KEY_F (7), CK_DiffSearch
, "F7" },
1192 { KEY_F (17), CK_DiffContinueSearch
, "S-F7" },
1193 { KEY_F (9), CK_DiffOptions
, "F9" },
1194 { KEY_F (10), CK_DiffQuit
, "F10" },
1195 { KEY_F (14), CK_DiffEditOther
, "S-F4" },
1197 { 0, CK_Ignore_Key
, "" }
1202 name_keymap_comparator (const void *p1
, const void *p2
)
1204 const name_keymap_t
*m1
= (const name_keymap_t
*) p1
;
1205 const name_keymap_t
*m2
= (const name_keymap_t
*) p2
;
1207 return str_casecmp (m1
->name
, m2
->name
);
1211 sort_command_names (void)
1213 static gboolean has_been_sorted
= FALSE
;
1215 if (!has_been_sorted
) {
1216 qsort (command_names
, num_command_names
,
1217 sizeof (command_names
[0]), &name_keymap_comparator
);
1218 has_been_sorted
= TRUE
;
1223 keymap_add (GArray
*keymap
, long key
, unsigned long cmd
, const char *caption
)
1225 if (key
!= 0 && cmd
!= CK_Ignore_Key
) {
1226 global_keymap_t new_bind
;
1229 new_bind
.command
= cmd
;
1230 g_snprintf (new_bind
.caption
, sizeof (new_bind
.caption
), "%s", caption
);
1231 g_array_append_val (keymap
, new_bind
);
1236 keybind_cmd_bind (GArray
*keymap
, const char *keybind
, unsigned long action
)
1238 char *caption
= NULL
;
1241 key
= lookup_key (keybind
, &caption
);
1242 keymap_add (keymap
, key
, action
, caption
);
1247 lookup_action (const char *name
)
1249 const name_keymap_t key
= { name
, 0 };
1252 sort_command_names ();
1254 res
= bsearch (&key
, command_names
, num_command_names
,
1255 sizeof (command_names
[0]), name_keymap_comparator
);
1257 return (res
!= NULL
) ? res
->val
: CK_Ignore_Key
;
1261 lookup_keymap_shortcut (const global_keymap_t
*keymap
, unsigned long action
)
1265 for (i
= 0; keymap
[i
].key
!= 0; i
++)
1266 if (keymap
[i
].command
== action
)
1267 return (keymap
[i
].caption
[0] != '\0') ? keymap
[i
].caption
: NULL
;
1273 lookup_keymap_command (const global_keymap_t
*keymap
, long key
)
1277 for (i
= 0; keymap
[i
].key
!= 0; i
++)
1278 if (keymap
[i
].key
== key
)
1279 return keymap
[i
].command
;
1281 return CK_Ignore_Key
;