mc/src/keybind.c

1286 lines
63 KiB
C
Raw Normal View History

/*
Copyright (C) 2009 The Free Software Foundation, Inc.
Written by: 2005 Vitja Makarov
2009 Ilia Maslakov
This file is part of the Midnight Commander.
The Midnight Commander is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The Midnight Commander is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA.
*/
#include <config.h>
#include <ctype.h>
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include "lib/global.h"
#include "lib/tty/win.h"
#include "lib/tty/key.h" /* KEY_M_ */
#include "lib/tty/tty.h" /* keys */
#include "lib/strutil.h"
#include "cmddef.h" /* CK_ cmd name const */
#include "wtools.h"
#include "keybind.h"
#ifdef USE_INTERNAL_EDIT
GArray *editor_keymap = NULL;
GArray *editor_x_keymap = NULL;
const global_keymap_t *editor_map;
const global_keymap_t *editor_x_map;
#endif
GArray *main_keymap = NULL;
GArray *main_x_keymap = NULL;
GArray *viewer_keymap = NULL;
GArray *viewer_hex_keymap = NULL;
GArray *panel_keymap = NULL;
GArray *input_keymap = NULL;
GArray *listbox_keymap = NULL;
GArray *tree_keymap = NULL;
GArray *help_keymap = NULL;
GArray *dialog_keymap = NULL;
#ifdef USE_DIFF_VIEW
GArray *diff_keymap = NULL;
const global_keymap_t *diff_map;
#endif
const global_keymap_t *main_map;
const global_keymap_t *main_x_map;
const global_keymap_t *panel_map;
const global_keymap_t *input_map;
const global_keymap_t *listbox_map;
const global_keymap_t *tree_map;
const global_keymap_t *help_map;
const global_keymap_t *dialog_map;
static name_keymap_t command_names[] = {
#ifdef USE_INTERNAL_EDIT
{ "EditNoCommand", CK_Ignore_Key },
{ "EditIgnoreKey", CK_Ignore_Key },
{ "EditBackSpace", CK_BackSpace },
{ "EditDelete", CK_Delete },
{ "EditEnter", CK_Enter },
{ "EditPageUp", CK_Page_Up },
{ "EditPageDown", CK_Page_Down },
{ "EditLeft", CK_Left },
{ "EditRight", CK_Right },
{ "EditWordLeft", CK_Word_Left },
{ "EditWordRight", CK_Word_Right },
{ "EditUp", CK_Up },
{ "EditDown", CK_Down },
{ "EditHome", CK_Home },
{ "EditEnd", CK_End },
{ "EditTab", CK_Tab },
{ "EditUndo", CK_Undo },
{ "EditBeginningOfText", CK_Beginning_Of_Text },
{ "EditEndOfText", CK_End_Of_Text },
{ "EditScrollUp", CK_Scroll_Up },
{ "EditScrollDown", CK_Scroll_Down },
{ "EditReturn", CK_Return },
{ "EditBeginPage", CK_Begin_Page },
{ "EditEndPage", CK_End_Page },
{ "EditDeleteWordLeft", CK_Delete_Word_Left },
{ "EditDeleteWordRight", CK_Delete_Word_Right },
{ "EditParagraphUp", CK_Paragraph_Up },
{ "EditParagraphDown", CK_Paragraph_Down },
{ "EditMenu", CK_Menu },
{ "EditSave", CK_Save },
{ "EditLoad", CK_Load },
{ "EditNew", CK_New },
{ "EditSaveas", CK_Save_As },
{ "EditMark", CK_Mark },
{ "EditCopy", CK_Copy },
{ "EditMove", CK_Move },
{ "EditRemove", CK_Remove },
{ "EditMarkAll", CK_Mark_All },
{ "EditUnmark", CK_Unmark },
{ "EditSaveBlock", CK_Save_Block },
{ "EditColumnMark", CK_Column_Mark },
{ "EditFind", CK_Find },
{ "EditFindAgain", CK_Find_Again },
{ "EditReplace", CK_Replace },
{ "EditReplaceAgain", CK_Replace_Again },
{ "EditCompleteWord", CK_Complete_Word },
#if 0
{ "EditDebugStart", CK_Debug_Start },
{ "EditDebugStop", CK_Debug_Stop },
{ "EditDebugToggleBreak", CK_Debug_Toggle_Break },
{ "EditDebugClear", CK_Debug_Clear },
{ "EditDebugNext", CK_Debug_Next },
{ "EditDebugStep", CK_Debug_Step },
{ "EditDebugBackTrace", CK_Debug_Back_Trace },
{ "EditDebugContinue", CK_Debug_Continue },
{ "EditDebugEnterCommand", CK_Debug_Enter_Command },
{ "EditDebugUntilCurser", CK_Debug_Until_Curser },
#endif
{ "EditInsertFile", CK_Insert_File },
{ "EditQuit", CK_Quit },
{ "EditToggleInsert", CK_Toggle_Insert },
{ "EditHelp", CK_Help },
{ "EditDate", CK_Date },
{ "EditRefresh", CK_Refresh },
{ "EditGoto", CK_Goto },
{ "EditDeleteLine", CK_Delete_Line },
{ "EditDeleteToLineEnd", CK_Delete_To_Line_End },
{ "EditDeleteToLineBegin", CK_Delete_To_Line_Begin },
{ "EditManPage", CK_Man_Page },
{ "EditSort", CK_Sort },
{ "EditMail", CK_Mail },
{ "EditCancel", CK_Cancel },
{ "EditComplete", CK_Complete },
{ "EditParagraphFormat", CK_Paragraph_Format },
{ "EditUtil", CK_Util },
{ "EditTypeLoadPython", CK_Type_Load_Python },
{ "EditFindFile", CK_Find_File },
{ "EditCtags", CK_Ctags },
{ "EditMatchBracket", CK_Match_Bracket },
{ "EditTerminal", CK_Terminal },
{ "EditTerminalApp", CK_Terminal_App },
{ "EditExtCmd", CK_ExtCmd },
{ "EditUserMenu", CK_User_Menu },
{ "EditBeginRecordMacro", CK_Begin_Record_Macro },
{ "EditEndRecordMacro", CK_End_Record_Macro },
{ "EditDeleteMacro", CK_Delete_Macro },
{ "EditToggleBookmark", CK_Toggle_Bookmark },
{ "EditFlushBookmarks", CK_Flush_Bookmarks },
{ "EditNextBookmark", CK_Next_Bookmark },
{ "EditPrevBookmark", CK_Prev_Bookmark },
{ "EditPageUpHighlight", CK_Page_Up_Highlight },
{ "EditPageDownHighlight", CK_Page_Down_Highlight },
{ "EditLeftHighlight", CK_Left_Highlight },
{ "EditRightHighlight", CK_Right_Highlight },
{ "EditWordLeftHighlight", CK_Word_Left_Highlight },
{ "EditWordRightHighlight", CK_Word_Right_Highlight },
{ "EditUpHighlight", CK_Up_Highlight },
{ "EditDownHighlight", CK_Down_Highlight },
{ "EditHomeHighlight", CK_Home_Highlight },
{ "EditEndHighlight", CK_End_Highlight },
{ "EditBeginningOfTextHighlight", CK_Beginning_Of_Text_Highlight },
{ "EditEndOfTextHighlight", CK_End_Of_Text_Highlight },
{ "EditBeginPageHighlight", CK_Begin_Page_Highlight },
{ "EditEndPageHighlight", CK_End_Page_Highlight },
{ "EditScrollUpHighlight", CK_Scroll_Up_Highlight },
{ "EditScrollDownHighlight", CK_Scroll_Down_Highlight },
{ "EditParagraphUpHighlight", CK_Paragraph_Up_Highlight },
{ "EditParagraphDownHighlight", CK_Paragraph_Down_Highlight },
{ "EditPageUpAltHighlight", CK_Page_Up_Alt_Highlight },
{ "EditPageDownAltHighlight", CK_Page_Down_Alt_Highlight },
{ "EditLeftAltHighlight", CK_Left_Alt_Highlight },
{ "EditRightAltHighlight", CK_Right_Alt_Highlight },
{ "EditWordLeftAltHighlight", CK_Word_Left_Alt_Highlight },
{ "EditWordRightAltHighlight", CK_Word_Right_Alt_Highlight },
{ "EditUpAltHighlight", CK_Up_Alt_Highlight },
{ "EditDownAltHighlight", CK_Down_Alt_Highlight },
{ "EditHomeAltHighlight", CK_Home_Alt_Highlight },
{ "EditEndAltHighlight", CK_End_Alt_Highlight },
{ "EditBeginningOfTextAltHighlight", CK_Beginning_Of_Text_Alt_Highlight },
{ "EditEndOfTextAltHighlight", CK_End_Of_Text_Alt_Highlight },
{ "EditBeginPageAltHighlight", CK_Begin_Page_Alt_Highlight },
{ "EditEndPageAltHighlight", CK_End_Page_Alt_Highlight },
{ "EditScrollUpAltHighlight", CK_Scroll_Up_Alt_Highlight },
{ "EditScrollDownAltHighlight", CK_Scroll_Down_Alt_Highlight },
{ "EditParagraphUpAltHighlight", CK_Paragraph_Up_Alt_Highlight },
{ "EditParagraphDownAltHighlight", CK_Paragraph_Down_Alt_Highlight },
{ "EditShiftBlockLeft", CK_Shift_Block_Left },
{ "EditShiftBlockRight", CK_Shift_Block_Right },
{ "EditXStore", CK_XStore },
{ "EditXCut", CK_XCut },
{ "EditXPaste", CK_XPaste },
{ "EditSelectionHistory", CK_Selection_History },
{ "EditShell", CK_Shell },
{ "EditInsertLiteral", CK_Insert_Literal },
{ "EditExecuteMacro", CK_Execute_Macro },
{ "EditBeginOrEndMacro", CK_Begin_End_Macro },
{ "EditExtMode", CK_Ext_Mode },
{ "EditToggleLineState", CK_Toggle_Line_State },
{ "EditToggleTabTWS", CK_Toggle_Tab_TWS },
{ "EditToggleSyntax", CK_Toggle_Syntax },
{ "EditToggleShowMargin", CK_Toggle_Show_Margin },
{ "EditFindDefinition", CK_Find_Definition },
{ "EditLoadPrevFile", CK_Load_Prev_File },
{ "EditLoadNextFile", CK_Load_Next_File },
{ "EditOptions", CK_Edit_Options },
{ "EditSaveMode", CK_Edit_Save_Mode },
{ "EditChooseSyntax", CK_Choose_Syntax },
{ "EditAbout", CK_About },
#if 0
{ "EditFocusNext", CK_Focus_Next },
{ "EditFocusPrev", CK_Focus_Prev },
{ "EditHeightInc", CK_Height_Inc },
{ "EditHeightDec", CK_Height_Dec },
{ "EditMake", CK_Make },
{ "EditErrorNext", CK_Error_Next },
{ "EditErrorPrev", CK_Error_Prev },
#endif
#if 0
{ "EditSaveDesktop", CK_Save_Desktop },
{ "EditNewWindow", CK_New_Window },
{ "EditCycle", CK_Cycle },
{ "EditSaveAndQuit", CK_Save_And_Quit },
{ "EditRunAnother", CK_Run_Another },
{ "EditCheckSaveAndQuit", CK_Check_Save_And_Quit },
{ "EditMaximize", CK_Maximize },
#endif
#endif /* USE_INTERNAL_EDIT */
/* viewer */
{ "ViewHelp", CK_ViewHelp },
{ "ViewToggleWrapMode", CK_ViewToggleWrapMode },
{ "ViewToggleHexEditMode", CK_ViewToggleHexEditMode },
{ "ViewQuit", CK_ViewQuit },
{ "ViewToggleHexMode", CK_ViewToggleHexMode },
{ "ViewGoto", CK_ViewGoto },
{ "ViewHexEditSave", CK_ViewHexEditSave },
{ "ViewSearch", CK_ViewSearch },
{ "ViewToggleMagicMode", CK_ViewToggleMagicMode },
{ "ViewToggleNroffMode", CK_ViewToggleNroffMode },
{ "ViewContinueSearch", CK_ViewContinueSearch },
{ "ViewGotoBookmark", CK_ViewGotoBookmark },
{ "ViewNewBookmark", CK_ViewNewBookmark },
{ "ViewMoveUp", CK_ViewMoveUp },
{ "ViewMoveDown", CK_ViewMoveDown },
{ "ViewMoveLeft", CK_ViewMoveLeft },
{ "ViewMoveRight", CK_ViewMoveRight },
{ "ViewMoveLeft10", CK_ViewMoveLeft10 },
{ "ViewMoveRight10", CK_ViewMoveRight10 },
{ "ViewMovePgDn", CK_ViewMovePgDn },
{ "ViewMovePgUp", CK_ViewMovePgUp },
{ "ViewMoveHalfPgDn", CK_ViewMoveHalfPgDn },
{ "ViewMoveHalfPgUp", CK_ViewMoveHalfPgUp },
{ "ViewMoveToBol", CK_ViewMoveToBol },
{ "ViewMoveToEol", CK_ViewMoveToEol },
{ "ViewMoveTop", CK_ViewMoveTop },
{ "ViewMoveBottom", CK_ViewMoveBottom },
{ "ViewNextFile", CK_ViewNextFile },
{ "ViewPrevFile", CK_ViewPrevFile },
{ "ViewToggleRuler", CK_ViewToggleRuler },
{ "ViewToggleHexNavMode", CK_ViewToggleHexNavMode },
/* help */
{ "HelpHelp", CK_HelpHelp },
{ "HelpIndex", CK_HelpIndex },
{ "HelpBack", CK_HelpBack },
{ "HelpQuit", CK_HelpQuit },
{ "HelpMoveUp", CK_HelpMoveUp },
{ "HelpMoveDown", CK_HelpMoveDown },
{ "HelpMovePgDn", CK_HelpMovePgDn },
{ "HelpMovePgUp", CK_HelpMovePgUp },
{ "HelpMoveHalfPgDn", CK_HelpMoveHalfPgDn },
{ "HelpMoveHalfPgUp", CK_HelpMoveHalfPgUp },
{ "HelpMoveTop", CK_HelpMoveTop },
{ "HelpMoveBottom", CK_HelpMoveBottom },
{ "HelpSelectLink", CK_HelpSelectLink },
{ "HelpNextLink", CK_HelpNextLink },
{ "HelpPrevLink", CK_HelpPrevLink },
{ "HelpNextNode", CK_HelpNextNode },
{ "HelpPrevNode", CK_HelpPrevNode },
/* tree */
{ "TreeHelp", CK_TreeHelp },
{ "TreeForget", CK_TreeForget },
{ "TreeToggleNav", CK_TreeToggleNav },
{ "TreeCopy", CK_TreeCopy },
{ "TreeMove", CK_TreeMove },
{ "TreeMake", CK_TreeMake },
{ "TreeMoveUp", CK_TreeMoveUp },
{ "TreeMoveDown", CK_TreeMoveDown },
{ "TreeMoveLeft", CK_TreeMoveLeft },
{ "TreeMoveRight", CK_TreeMoveRight },
{ "TreeMoveHome", CK_TreeMoveHome },
{ "TreeMoveEnd", CK_TreeMoveEnd },
{ "TreeMovePgUp", CK_TreeMovePgUp },
{ "TreeMovePgDn", CK_TreeMovePgDn },
{ "TreeOpen", CK_TreeOpen },
{ "TreeRescan", CK_TreeRescan },
{ "TreeStartSearch", CK_TreeStartSearch },
{ "TreeRemove", CK_TreeRemove },
/* main commands */
{ "CmdHelp", CK_HelpCmd },
{ "CmdMenu", CK_MenuCmd },
{ "CmdChmod", CK_ChmodCmd },
{ "CmdMenuLastSelected", CK_MenuLastSelectedCmd },
{ "CmdSingleDirsize", CK_SingleDirsizeCmd },
{ "CmdCopyCurrentPathname", CK_CopyCurrentPathname },
{ "CmdCopyOtherPathname", CK_CopyOtherPathname },
{ "CmdSuspend", CK_SuspendCmd },
{ "CmdToggleListing", CK_ToggleListingCmd },
{ "CmdChownAdvanced", CK_ChownAdvancedCmd },
{ "CmdChown", CK_ChownCmd },
{ "CmdCompareDirs", CK_CompareDirsCmd },
{ "CmdConfigureBox", CK_ConfigureBox },
{ "CmdConfigureVfs", CK_ConfigureVfs },
{ "CmdConfirmBox", CK_ConfirmBox },
{ "CmdCopy", CK_CopyCmd },
{ "CmdDelete", CK_DeleteCmd },
{ "CmdDirsizes", CK_DirsizesCmd },
{ "CmdDisplayBitsBox", CK_DisplayBitsBox },
{ "CmdEdit", CK_EditCmd },
#ifdef USE_INTERNAL_EDIT
{ "CmdEditForceInternal", CK_EditForceInternalCmd },
#endif
{ "CmdEditExtFile", CK_EditExtFileCmd },
{ "CmdEditFhlFile", CK_EditFhlFileCmd },
{ "CmdEditMcMenu", CK_EditMcMenuCmd },
{ "CmdEditSymlink", CK_EditSymlinkCmd },
{ "CmdEditSyntax", CK_EditSyntaxCmd },
{ "CmdEditUserMenu", CK_EditUserMenuCmd },
{ "CmdExternalPanelize", CK_ExternalPanelize },
{ "CmdFilter", CK_FilterCmd },
{ "CmdFilteredView", CK_FilteredViewCmd },
{ "CmdFind", CK_FindCmd },
#ifdef ENABLE_VFS_FISH
{ "CmdFishlink", CK_FishlinkCmd },
#endif
#ifdef ENABLE_VFS_FTP
{ "CmdFtplink", CK_FtplinkCmd },
#endif
{ "CmdHistory", CK_HistoryCmd },
{ "CmdInfo", CK_InfoCmd },
#ifdef WITH_BACKGROUND
{ "CmdJobs", CK_JobsCmd },
#endif
{ "CmdLayout", CK_LayoutBox },
{ "CmdLearnKeys", CK_LearnKeys },
{ "CmdLink", CK_LinkCmd },
{ "CmdChangeListing", CK_ChangeListingCmd },
{ "CmdListing", CK_ListingCmd },
#ifdef LISTMODE_EDITOR
{ "CmdListmodeCmd", CK_ListmodeCmd }.
#endif
{ "CmdMkdir", CK_MkdirCmd },
{ "CmdPanelOptions", CK_PanelOptionsBox },
{ "CmdQuickCd", CK_QuickCdCmd },
{ "CmdQuickChdir", CK_QuickChdirCmd },
{ "CmdQuickView", CK_QuickViewCmd },
{ "CmdQuietQuit", CK_QuietQuitCmd },
{ "CmdRelativeSymlink", CK_RelativeSymlinkCmd },
{ "CmdRename", CK_RenameCmd },
{ "CmdReread", CK_RereadCmd },
{ "CmdReselectVfs", CK_ReselectVfs },
{ "CmdReverseSelection", CK_ReverseSelectionCmd },
{ "CmdSaveSetup", CK_SaveSetupCmd },
{ "CmdSelect", CK_SelectCmd },
#ifdef ENABLE_VFS_SMB
{ "CmdSmblinkCmd", CK_SmblinkCmd },
#endif
{ "CmdSwapPanel", CK_SwapCmd },
{ "CmdSymlink", CK_SymlinkCmd },
{ "CmdTree", CK_TreeCmd },
{ "CmdTreeBox", CK_TreeBoxCmd },
#ifdef ENABLE_VFS_UNDELFS
{ "CmdUndelete", CK_UndeleteCmd },
#endif
{ "CmdUnselect", CK_UnselectCmd },
{ "CmdUserMenu", CK_UserMenuCmd },
{ "CmdUserFileMenu", CK_UserFileMenuCmd },
{ "CmdView", CK_ViewCmd },
{ "CmdViewFile", CK_ViewFileCmd },
{ "CmdCopyCurrentReadlink", CK_CopyCurrentReadlink },
{ "CmdCopyOtherReadlink", CK_CopyOtherReadlink },
{ "CmdAddHotlist", CK_AddHotlist },
{ "CmdQuit", CK_QuitCmd },
{ "CmdCopyCurrentTagged", CK_CopyCurrentTagged },
{ "CmdCopyOtherTagged", CK_CopyOtherTagged },
{ "CmdToggleShowHidden", CK_ToggleShowHidden },
{ "CmdTogglePanelsSplit", CK_TogglePanelsSplit },
#ifdef USE_DIFF_VIEW
{ "CmdDiffView", CK_DiffViewCmd},
#endif
{ "CmdDialogList", CK_DialogListCmd },
{ "CmdDialogNext", CK_DialogNextCmd },
{ "CmdDialogPrev", CK_DialogPrevCmd },
/* panel */
{ "PanelChdirOtherPanel", CK_PanelChdirOtherPanel },
{ "PanelChdirToReadlink", CK_PanelChdirToReadlink },
{ "PanelCopyLocal", CK_PanelCmdCopyLocal },
{ "PanelDeleteLocal", CK_PanelCmdDeleteLocal },
{ "PanelDoEnter", CK_PanelCmdDoEnter },
{ "PanelEditNew", CK_PanelCmdEditNew },
{ "PanelRenameLocal", CK_PanelCmdRenameLocal },
{ "PanelReverseSelection", CK_PanelCmdReverseSelection },
{ "PanelSelect", CK_PanelCmdSelect },
{ "PanelUnselect", CK_PanelCmdUnselect },
{ "PanelViewSimple", CK_PanelCmdViewSimple },
{ "PanelCtrlNextPage", CK_PanelCtrlNextPage },
{ "PanelCtrlPrevPage", CK_PanelCtrlPrevPage },
{ "PanelDirectoryHistoryList", CK_PanelDirectoryHistoryList },
{ "PanelDirectoryHistoryNext", CK_PanelDirectoryHistoryNext },
{ "PanelDirectoryHistoryPrev", CK_PanelDirectoryHistoryPrev },
{ "PanelGotoBottomFile", CK_PanelGotoBottomFile },
{ "PanelGotoMiddleFile", CK_PanelGotoMiddleFile },
{ "PanelGotoTopFile", CK_PanelGotoTopFile },
{ "PanelMarkFile", CK_PanelMarkFile },
{ "PanelMarkFileDown", CK_PanelMarkFileDown },
{ "PanelMarkFileUp", CK_PanelMarkFileUp },
{ "PanelMoveUp", CK_PanelMoveUp },
{ "PanelMoveDown", CK_PanelMoveDown },
{ "PanelMoveLeft", CK_PanelMoveLeft },
{ "PanelMoveRight", CK_PanelMoveRight },
{ "PanelMoveEnd", CK_PanelMoveEnd },
{ "PanelMoveHome", CK_PanelMoveHome },
{ "PanelNextPage", CK_PanelNextPage },
{ "PanelPrevPage", CK_PanelPrevPage },
#ifdef HAVE_CHARSET
{ "PanelSetPanelEncoding", CK_PanelSetPanelEncoding },
#endif
{ "PanelStartSearch", CK_PanelStartSearch },
{ "PanelSyncOtherPanel", CK_PanelSyncOtherPanel },
{ "PanelToggleSortOrderNext", CK_PanelToggleSortOrderNext },
{ "PanelToggleSortOrderPrev", CK_PanelToggleSortOrderPrev },
{ "PanelSelectSortOrder", CK_PanelSelectSortOrder },
{ "PanelReverseSort", CK_PanelReverseSort },
{ "PanelSortOrderByName", CK_PanelSortOrderByName },
{ "PanelSortOrderByExt", CK_PanelSortOrderByExt },
{ "PanelSortOrderBySize", CK_PanelSortOrderBySize },
{ "PanelSortOrderByMTime", CK_PanelSortOrderByMTime },
/* input line */
{ "InputBol", CK_InputBol },
{ "InputEol", CK_InputEol },
{ "InputMoveLeft", CK_InputMoveLeft },
{ "InputWordLeft", CK_InputWordLeft },
{ "InputBackwardChar", CK_InputBackwardChar },
{ "InputBackwardWord", CK_InputBackwardWord },
{ "InputMoveRight", CK_InputMoveRight },
{ "InputWordRight", CK_InputWordRight },
{ "InputForwardChar", CK_InputForwardChar },
{ "InputForwardWord", CK_InputForwardWord },
{ "InputBackwardDelete", CK_InputBackwardDelete },
{ "InputDeleteChar", CK_InputDeleteChar },
{ "InputKillWord", CK_InputKillWord },
{ "InputBackwardKillWord", CK_InputBackwardKillWord },
{ "InputSetMark", CK_InputSetMark },
{ "InputKillRegion", CK_InputKillRegion },
{ "InputYank", CK_InputYank },
{ "InputKillLine", CK_InputKillLine },
{ "InputHistoryPrev", CK_InputHistoryPrev },
{ "InputHistoryNext", CK_InputHistoryNext },
{ "InputHistoryShow", CK_InputHistoryShow },
{ "InputComplete", CK_InputComplete },
{ "InputXStore", CK_InputKillSave },
{ "InputXPaste", CK_InputPaste },
{ "InputClearLine", CK_InputClearLine },
{ "InputLeftHighlight", CK_InputLeftHighlight },
{ "InputRightHighlight", CK_InputRightHighlight },
{ "InputWordLeftHighlight", CK_InputWordLeftHighlight },
{ "InputWordRightHighlight", CK_InputWordRightHighlight },
{ "InputBolHighlight", CK_InputBolHighlight },
{ "InputEolHighlight", CK_InputEolHighlight },
/* listbox */
{ "ListboxMoveUp", CK_ListboxMoveUp },
{ "ListboxMoveDown", CK_ListboxMoveDown },
{ "ListboxMoveHome", CK_ListboxMoveHome },
{ "ListboxMoveEnd", CK_ListboxMoveEnd },
{ "ListboxMovePgUp", CK_ListboxMovePgUp },
{ "ListboxMovePgDn", CK_ListboxMovePgDn },
{ "ListboxDeleteItem", CK_ListboxDeleteItem },
{ "ListboxDeleteAll", CK_ListboxDeleteAll },
/* common */
{ "ExtMap1", CK_StartExtMap1 },
{ "ExtMap2", CK_StartExtMap2 },
{ "ShowCommandLine", CK_ShowCommandLine },
{ "SelectCodepage", CK_SelectCodepage },
/* dialog */
{ "DialogOK", CK_DialogOK },
{ "DialogCancel", CK_DialogCancel },
{ "DialogPrevItem", CK_DialogPrevItem },
{ "DialogNextItem", CK_DialogNextItem },
{ "DialogHelp", CK_DialogHelp },
{ "DialogSuspend", CK_DialogSuspend },
{ "DialogRefresh", CK_DialogRefresh },
#ifdef USE_DIFF_VIEW
/* diff viewer */
{ "DiffDisplaySymbols", CK_DiffDisplaySymbols},
{ "DiffDisplayNumbers", CK_DiffDisplayNumbers},
{ "DiffFull", CK_DiffFull},
{ "DiffEqual", CK_DiffEqual},
{ "DiffSplitMore", CK_DiffSplitMore},
{ "DiffSplitLess", CK_DiffSplitLess},
{ "DiffShowDiff", CK_DiffShowDiff},
{ "DiffSetTab2", CK_DiffSetTab2},
{ "DiffSetTab3", CK_DiffSetTab3},
{ "DiffSetTab4", CK_DiffSetTab4},
{ "DiffSetTab8", CK_DiffSetTab8},
{ "DiffSwapPanel", CK_DiffSwapPanel},
{ "DiffRedo", CK_DiffRedo},
{ "DiffNextHunk", CK_DiffNextHunk},
{ "DiffPrevHunk", CK_DiffPrevHunk},
{ "DiffGoto", CK_DiffGoto},
{ "DiffEditCurrent", CK_DiffEditCurrent},
{ "DiffEditOther", CK_DiffEditOther},
{ "DiffSearch", CK_DiffSearch},
{ "DiffContinueSearch", CK_DiffContinueSearch},
{ "DiffEOF", CK_DiffEOF},
{ "DiffBOF", CK_DiffBOF},
{ "DiffDown", CK_DiffDown},
{ "DiffUp", CK_DiffUp},
{ "DiffLeft", CK_DiffLeft},
{ "DiffRight", CK_DiffRight},
{ "DiffPageDown", CK_DiffPageDown},
{ "DiffPageUp", CK_DiffPageUp},
{ "DiffHome", CK_DiffHome},
{ "DiffEnd", CK_DiffEnd},
{ "DiffQuit", CK_DiffQuit},
{ "DiffHelp", CK_DiffHelp},
{ "SelectCodepage", CK_SelectCodepage},
{ "DiffMergeCurrentHunk", CK_DiffMergeCurrentHunk},
{ "DiffSave", CK_DiffSave},
{ "DiffOptions", CK_DiffOptions},
#endif
{ NULL, CK_Ignore_Key }
};
static const size_t num_command_names = sizeof (command_names) /
sizeof (command_names[0]) - 1;
/*** global variables ****************************************************************************/
/* viewer/actions_cmd.c */
const global_keymap_t default_viewer_keymap[] = {
{ KEY_F (1), CK_ViewHelp, "F1" },
{ KEY_F (2), CK_ViewToggleWrapMode, "F2" },
{ KEY_F (3), CK_ViewQuit, "F3" },
{ KEY_F (4), CK_ViewToggleHexMode, "F4" },
{ KEY_F (5), CK_ViewGoto, "F5" },
{ KEY_F (7), CK_ViewSearch, "F7" },
{ KEY_F (8), CK_ViewToggleMagicMode, "F8" },
{ KEY_F (9), CK_ViewToggleNroffMode, "F9" },
{ KEY_F (10), CK_ViewQuit, "F10" },
{ '?', CK_ViewSearch, "?" },
{ '/', CK_ViewSearch, "/" },
{ XCTRL ('r'), CK_ViewContinueSearch, "C-r" },
{ XCTRL ('s'), CK_ViewContinueSearch, "C-s" },
{ KEY_F (17), CK_ViewContinueSearch, "S-F7" },
{ 'n', CK_ViewContinueSearch, "n" },
{ ALT ('r'), CK_ViewToggleRuler, "M-r" },
{ XCTRL ('a'), CK_ViewMoveToBol, "C-a" },
{ XCTRL ('e'), CK_ViewMoveToEol, "C-e" },
{ 'h', CK_ViewMoveLeft, "h" },
{ KEY_LEFT, CK_ViewMoveLeft, "Left" },
{ 'l', CK_ViewMoveRight, "l" },
{ KEY_RIGHT, CK_ViewMoveRight, "Right" },
{ KEY_M_CTRL | KEY_LEFT, CK_ViewMoveLeft10, "C-Left" },
{ KEY_M_CTRL | KEY_RIGHT, CK_ViewMoveRight10, "C-Right" },
{ 'k', CK_ViewMoveUp, "k" },
{ 'y', CK_ViewMoveUp, "y" },
{ XCTRL ('p'), CK_ViewMoveUp, "C-p" },
{ KEY_IC, CK_ViewMoveUp, "Insert" },
{ KEY_UP, CK_ViewMoveUp, "Up" },
{ 'j', CK_ViewMoveDown, "j" },
{ 'e', CK_ViewMoveDown, "e" },
{ XCTRL ('n'), CK_ViewMoveUp, "C-n" },
{ KEY_DOWN, CK_ViewMoveDown, "Down" },
{ KEY_DC, CK_ViewMoveDown, "Delete" },
{ '\n', CK_ViewMoveDown, "Endter" },
{ ' ', CK_ViewMovePgDn, "Space" },
{ 'f', CK_ViewMovePgDn, "f" },
{ KEY_NPAGE, CK_ViewMovePgDn, "PgDn" },
{ XCTRL ('v'), CK_ViewMovePgDn, "C-v" },
{ 'b', CK_ViewMovePgUp, "b" },
{ KEY_PPAGE, CK_ViewMovePgUp, "PgUp" },
{ ALT ('v'), CK_ViewMovePgUp, "M-v" },
{ KEY_BACKSPACE, CK_ViewMovePgUp, "BackSpace" },
{ 'd', CK_ViewMoveHalfPgDn, "d" },
{ 'u', CK_ViewMoveHalfPgUp, "u" },
{ KEY_HOME, CK_ViewMoveTop, "Home" },
{ KEY_M_CTRL | KEY_HOME, CK_ViewMoveTop, "C-Home" },
{ KEY_M_CTRL | KEY_PPAGE, CK_ViewMoveTop, "C-PgUp" },
{ KEY_A1, CK_ViewMoveTop, "A1" },
{ ALT ('<'), CK_ViewMoveTop, "M-<" },
{ 'g', CK_ViewMoveTop, "g" },
{ KEY_END, CK_ViewMoveBottom, "End" },
{ KEY_M_CTRL | KEY_END, CK_ViewMoveBottom, "C-End" },
{ KEY_M_CTRL | KEY_NPAGE, CK_ViewMoveBottom, "C-PgDn" },
{ KEY_C1, CK_ViewMoveBottom, "C1" },
{ ALT ('>'), CK_ViewMoveBottom, "M->" },
{ 'G', CK_ViewMoveBottom, "G" },
{ 'm', CK_ViewGotoBookmark, "m" },
{ 'r', CK_ViewNewBookmark, "r" },
{ XCTRL ('f'), CK_ViewNextFile, "C-f" },
{ XCTRL ('b'), CK_ViewPrevFile, "C-b" },
{ 'q', CK_ViewQuit, "q" },
{ XCTRL ('g'), CK_ViewQuit, "C-g" },
{ ESC_CHAR, CK_ViewQuit, "Esc" },
{ ALT ('e'), CK_SelectCodepage, "M-e" },
{ XCTRL ('o'), CK_ShowCommandLine, "C-o" },
{ 0, CK_Ignore_Key, "" }
};
const global_keymap_t default_viewer_hex_keymap[] = {
{ KEY_F (1), CK_ViewHelp, "F1" },
{ KEY_F (2), CK_ViewToggleHexEditMode, "F2" },
{ KEY_F (3), CK_ViewQuit, "F3" },
{ KEY_F (4), CK_ViewToggleHexMode, "F4" },
{ KEY_F (5), CK_ViewGoto, "F5" },
{ KEY_F (6), CK_ViewHexEditSave, "F6" },
{ KEY_F (7), CK_ViewSearch, "F7" },
{ KEY_F (8), CK_ViewToggleMagicMode, "F8" },
{ KEY_F (9), CK_ViewToggleNroffMode, "F9" },
{ KEY_F (10), CK_ViewQuit, "F10" },
{ '?', CK_ViewSearch, "?" },
{ '/', CK_ViewSearch, "/" },
{ XCTRL ('r'), CK_ViewContinueSearch, "C-r" },
{ XCTRL ('s'), CK_ViewContinueSearch, "C-s" },
{ KEY_F (17), CK_ViewContinueSearch, "S-F7" },
{ 'n', CK_ViewContinueSearch, "n" },
{ '\t', CK_ViewToggleHexNavMode, "Tab" },
{ XCTRL ('a'), CK_ViewMoveToBol, "C-a" },
{ XCTRL ('e'), CK_ViewMoveToEol, "C-e" },
{ 'b', CK_ViewMoveLeft, "b" },
{ KEY_LEFT, CK_ViewMoveLeft, "Left" },
{ 'f', CK_ViewMoveRight, "f" },
{ KEY_RIGHT, CK_ViewMoveRight, "Right" },
{ 'k', CK_ViewMoveUp, "k" },
{ 'y', CK_ViewMoveUp, "y" },
{ KEY_UP, CK_ViewMoveUp, "Up" },
{ 'j', CK_ViewMoveDown, "j" },
{ KEY_DOWN, CK_ViewMoveDown, "Down" },
{ KEY_DC, CK_ViewMoveDown, "Delete" },
{ KEY_NPAGE, CK_ViewMovePgDn, "PgDn" },
{ XCTRL ('v'), CK_ViewMovePgDn, "C-v" },
{ KEY_PPAGE, CK_ViewMovePgUp, "PgUp" },
{ ALT ('v'), CK_ViewMovePgUp, "M-v" },
{ KEY_HOME, CK_ViewMoveTop, "Home" },
{ KEY_M_CTRL | KEY_HOME, CK_ViewMoveTop, "C-Home" },
{ KEY_M_CTRL | KEY_PPAGE, CK_ViewMoveTop, "C-PgUp" },
{ KEY_A1, CK_ViewMoveTop, "A1" },
{ ALT ('<'), CK_ViewMoveTop, "M-<" },
{ 'g', CK_ViewMoveTop, "g" },
{ KEY_END, CK_ViewMoveBottom, "End" },
{ KEY_M_CTRL | KEY_END, CK_ViewMoveBottom, "C-End" },
{ KEY_M_CTRL | KEY_NPAGE, CK_ViewMoveBottom, "C-PgDn" },
{ KEY_C1, CK_ViewMoveBottom, "C1" },
{ ALT ('>'), CK_ViewMoveBottom, "M->" },
{ 'G', CK_ViewMoveBottom, "G" },
{ 'q', CK_ViewQuit, "q" },
{ XCTRL ('g'), CK_ViewQuit, "C-g" },
{ ESC_CHAR, CK_ViewQuit, "Esc" },
{ ALT ('e'), CK_SelectCodepage, "M-e" },
{ XCTRL ('o'), CK_ShowCommandLine, "C-o" },
{ 0, CK_Ignore_Key, "" }
};
#ifdef USE_INTERNAL_EDIT
/* ../edit/editkeys.c */
const global_keymap_t default_editor_keymap[] = {
{ '\n', CK_Enter, "Enter" },
{ '\t', CK_Tab, "Tab" },
{ KEY_F (1), CK_Help, "F1" },
{ KEY_F (2), CK_Save, "F2" },
{ KEY_F (3), CK_Mark, "F3" },
{ KEY_F (4), CK_Replace, "F4" },
{ KEY_F (5), CK_Copy, "F5" },
{ KEY_F (6), CK_Move, "F6" },
{ KEY_F (7), CK_Find, "F7" },
{ KEY_F (8), CK_Remove, "F8" },
{ KEY_F (9), CK_Menu, "F9" },
{ KEY_F (10), CK_Quit, "F10" },
/* edit user menu */
{ KEY_F (11), CK_User_Menu, "S-F1" },
{ KEY_F (12), CK_Save_As, "S-F2" },
{ KEY_F (13), CK_Column_Mark, "S-F3" },
{ KEY_F (14), CK_Replace_Again, "S-F4" },
{ KEY_F (15), CK_Insert_File, "S-F5" },
{ KEY_F (17), CK_Find_Again, "S-F7" },
/* C formatter */
{ KEY_F (19), CK_Pipe_Block (0), "S-F9" },
{ ESC_CHAR, CK_Quit, "Esc" },
{ KEY_BACKSPACE, CK_BackSpace, "BackSpace" },
{ KEY_DC, CK_Delete, "Delete" },
{ KEY_DOWN, CK_Down, "Down" },
{ KEY_END, CK_End, "End" },
{ KEY_HOME, CK_Home, "Home" },
{ KEY_IC, CK_Toggle_Insert, "Insert" },
{ KEY_LEFT, CK_Left, "Left" },
{ KEY_NPAGE, CK_Page_Down, "PgDn" },
{ KEY_PPAGE, CK_Page_Up, "PgUp" },
{ KEY_RIGHT, CK_Right, "Right" },
{ KEY_UP, CK_Up, "Up" },
/* Ctrl */
{ KEY_M_CTRL | (KEY_F (2)), CK_Save_As, "C-F2" },
{ KEY_M_CTRL | (KEY_F (4)), CK_Replace_Again, "C-F4" },
{ KEY_M_CTRL | (KEY_F (7)), CK_Find_Again, "C-F7" },
{ KEY_M_CTRL | KEY_BACKSPACE, CK_Undo, "C-BackSpace" },
{ KEY_M_CTRL | KEY_NPAGE, CK_End_Of_Text, "C-PgDn" },
{ KEY_M_CTRL | KEY_PPAGE, CK_Beginning_Of_Text, "C-PgUp" },
{ KEY_M_CTRL | KEY_HOME, CK_Beginning_Of_Text, "C-Home" },
{ KEY_M_CTRL | KEY_END, CK_End_Of_Text, "C-End" },
{ KEY_M_CTRL | KEY_UP, CK_Scroll_Up, "C-Up" },
{ KEY_M_CTRL | KEY_DOWN, CK_Scroll_Down, "C-Down" },
{ KEY_M_CTRL | KEY_LEFT, CK_Word_Left, "C-Left" },
{ KEY_M_CTRL | KEY_RIGHT, CK_Word_Right, "C-Right" },
{ KEY_M_CTRL | KEY_IC, CK_XStore, "C-Insert" },
{ KEY_M_CTRL | KEY_DC, CK_Remove, "C-Delete" },
{ XCTRL ('n'), CK_New, "C-n" },
{ XCTRL ('k'), CK_Delete_To_Line_End, "C-k" },
{ XCTRL ('l'), CK_Refresh, "C-l" },
{ XCTRL ('o'), CK_Shell, "C-o" },
{ XCTRL ('s'), CK_Toggle_Syntax, "C-s" },
{ XCTRL ('u'), CK_Undo, "C-u" },
{ ALT ('e'), CK_SelectCodepage, "M-e" },
{ XCTRL ('q'), CK_Insert_Literal, "C-q" },
{ XCTRL ('r'), CK_Begin_End_Macro, "C-r" },
{ XCTRL ('r'), CK_Begin_Record_Macro, "C-r" },
{ XCTRL ('r'), CK_End_Record_Macro, "C-r" },
{ XCTRL ('a'), CK_Execute_Macro, "C-a" },
/* Shift */
{ KEY_M_SHIFT | KEY_NPAGE, CK_Page_Down_Highlight, "S-PgDn" },
{ KEY_M_SHIFT | KEY_PPAGE, CK_Page_Up_Highlight, "S-PgUp" },
{ KEY_M_SHIFT | KEY_LEFT, CK_Left_Highlight, "S-Left" },
{ KEY_M_SHIFT | KEY_RIGHT, CK_Right_Highlight, "S-Right" },
{ KEY_M_SHIFT | KEY_UP, CK_Up_Highlight, "S-Up" },
{ KEY_M_SHIFT | KEY_DOWN, CK_Down_Highlight, "S-Down" },
{ KEY_M_SHIFT | KEY_HOME, CK_Home_Highlight, "S-Home" },
{ KEY_M_SHIFT | KEY_END, CK_End_Highlight, "S-End" },
{ KEY_M_SHIFT | KEY_IC, CK_XPaste, "S-Insert" },
{ KEY_M_SHIFT | KEY_DC, CK_XCut, "S-Delete" },
/* useful for pasting multiline text */
{ KEY_M_SHIFT | '\n', CK_Return, "S-Enter" },
/* Ctrl + Shift */
{ KEY_M_SHIFT | KEY_M_CTRL | KEY_NPAGE, CK_End_Of_Text_Highlight, "C-S-PgDn" },
{ KEY_M_SHIFT | KEY_M_CTRL | KEY_PPAGE, CK_Beginning_Of_Text_Highlight, "C-S-PgUp" },
{ KEY_M_SHIFT | KEY_M_CTRL | KEY_LEFT, CK_Word_Left_Highlight, "C-S-Left" },
{ KEY_M_SHIFT | KEY_M_CTRL | KEY_RIGHT, CK_Word_Right_Highlight, "C-S-Right" },
{ KEY_M_SHIFT | KEY_M_CTRL | KEY_UP, CK_Scroll_Up_Highlight, "C-S-Up" },
{ KEY_M_SHIFT | KEY_M_CTRL | KEY_DOWN, CK_Scroll_Down_Highlight, "C-S-Down" },
/* Alt */
{ KEY_M_ALT | KEY_NPAGE, CK_Page_Down_Alt_Highlight, "M-PgDn" },
{ KEY_M_ALT | KEY_PPAGE, CK_Page_Up_Alt_Highlight, "M-PgUp" },
{ KEY_M_ALT | KEY_LEFT, CK_Left_Alt_Highlight, "M-Left" },
{ KEY_M_ALT | KEY_RIGHT, CK_Right_Alt_Highlight, "M-Right" },
{ KEY_M_ALT | KEY_UP, CK_Up_Alt_Highlight, "M-Up" },
{ KEY_M_ALT | KEY_DOWN, CK_Down_Alt_Highlight, "M-Down" },
{ KEY_M_ALT | KEY_HOME, CK_Home_Highlight, "M-Home" },
{ KEY_M_ALT | KEY_END, CK_End_Alt_Highlight, "M-End" },
{ ALT ('\n'), CK_Find_Definition, "M-Enter" },
{ ALT ('\t'), CK_Complete_Word, "M-Tab" },
{ ALT ('l'), CK_Goto, "M-l" },
{ ALT ('L'), CK_Goto, "M-L" },
{ ALT ('p'), CK_Paragraph_Format, "M-p" },
{ ALT ('t'), CK_Sort, "M-t" },
{ ALT ('u'), CK_ExtCmd, "M-u" },
{ ALT ('<'), CK_Beginning_Of_Text, "M-<" },
{ ALT ('>'), CK_End_Of_Text, "M->" },
{ ALT ('-'), CK_Load_Prev_File, "M--" },
{ ALT ('+'), CK_Load_Next_File, "M-+" },
{ ALT ('d'), CK_Delete_Word_Right, "M-d" },
{ ALT (KEY_BACKSPACE), CK_Delete_Word_Left, "M-BackSpace" },
{ ALT ('n'), CK_Toggle_Line_State, "M-n" },
{ ALT ('_'), CK_Toggle_Tab_TWS, "M-_" },
{ ALT ('k'), CK_Toggle_Bookmark, "M-k" },
{ ALT ('i'), CK_Prev_Bookmark, "M-i" },
{ ALT ('j'), CK_Next_Bookmark, "M-j" },
{ ALT ('o'), CK_Flush_Bookmarks, "M-o" },
{ XCTRL ('x'), CK_Ext_Mode, "C-x" },
{ 0, CK_Ignore_Key, "" }
};
/* emacs keyboard layout emulation */
const global_keymap_t default_editor_x_keymap[] = {
{ 'k', CK_New, "k"},
{ 'e', CK_Execute_Macro, "e"},
{ 0, CK_Ignore_Key, "" }
};
#endif /* USE_INTERNAL_EDIT */
/* dialog */
const global_keymap_t default_dialog_keymap[] = {
{ '\n', CK_DialogOK, "Enter" },
{ KEY_ENTER, CK_DialogOK, "Enter" },
{ ESC_CHAR, CK_DialogCancel, "Esc" },
{ XCTRL('g'), CK_DialogCancel, "C-g" },
{ KEY_F (10), CK_DialogCancel, "F10" },
{ KEY_LEFT, CK_DialogPrevItem, "Left" },
{ KEY_UP, CK_DialogPrevItem, "Up" },
{ KEY_RIGHT, CK_DialogNextItem, "Right" },
{ KEY_DOWN, CK_DialogNextItem, "Down" },
{ KEY_F(1), CK_DialogHelp, "F1" },
{ XCTRL('z'), CK_DialogSuspend, "C-z" },
{ XCTRL('l'), CK_DialogRefresh, "C-l" },
{ 0, CK_Ignore_Key, "" }
};
/* tree */
const global_keymap_t default_tree_keymap[] = {
{ KEY_F (1), CK_TreeHelp, "F1"},
{ KEY_F (2), CK_TreeRescan, "F2" },
{ KEY_F (3), CK_TreeForget, "F3" },
{ KEY_F (4), CK_TreeToggleNav, "F4" },
{ KEY_F (5), CK_TreeCopy, "F5" },
{ KEY_F (6), CK_TreeMove, "F6" },
#if 0
{ KEY_F (7), CK_TreeMake, "F7" },
#endif
{ KEY_F (8), CK_TreeRemove, "F8" },
{ KEY_UP, CK_TreeMoveUp, "Up" },
{ XCTRL ('p'), CK_TreeMoveUp, "C-p" },
{ KEY_DOWN, CK_TreeMoveDown, "Down" },
{ XCTRL ('n'), CK_TreeMoveDown, "C-n" },
{ KEY_LEFT, CK_TreeMoveLeft, "Left" },
{ KEY_RIGHT, CK_TreeMoveRight, "Right" },
{ KEY_HOME, CK_TreeMoveHome, "Home" },
{ ALT ('<'), CK_TreeMoveHome, "M-<" },
{ KEY_A1, CK_TreeMoveHome, "A1" },
{ KEY_END, CK_TreeMoveEnd , "End" },
{ ALT ('>'), CK_TreeMoveEnd , "M->" },
{ KEY_C1, CK_TreeMoveEnd , "C1" },
{ KEY_PPAGE, CK_TreeMovePgUp, "PgUp" },
{ ALT ('v'), CK_TreeMovePgUp, "M-v" },
{ KEY_NPAGE, CK_TreeMovePgDn, "PnDn" },
{ XCTRL ('v'), CK_TreeMovePgDn, "C-v" },
{ '\n', CK_TreeOpen, "Enter" },
{ KEY_ENTER, CK_TreeOpen, "Enter" },
{ XCTRL ('r'), CK_TreeRescan, "C-r" },
{ XCTRL ('s'), CK_TreeStartSearch, "C-s" },
{ ALT ('s'), CK_TreeStartSearch, "M-s" },
{ KEY_DC, CK_TreeRemove, "Delete" },
{ 0, CK_Ignore_Key, ""}
};
/* help */
const global_keymap_t default_help_keymap[] = {
{ KEY_F (1), CK_HelpHelp, "F1" },
{ KEY_F (2), CK_HelpIndex, "F2" },
{ KEY_F (3), CK_HelpBack, "F3" },
{ KEY_F (10), CK_HelpQuit, "F10" },
{ KEY_LEFT, CK_HelpBack, "Left" },
{ 'l', CK_HelpBack, "l" },
{ KEY_DOWN, CK_HelpMoveDown, "Down" },
{ XCTRL ('n'), CK_HelpMoveDown, "C-n" },
{ KEY_UP, CK_HelpMoveUp, "Up" },
{ XCTRL ('p'), CK_HelpMoveUp, "C-p" },
{ KEY_NPAGE, CK_HelpMovePgDn, "PgDn" },
{ XCTRL ('v'), CK_HelpMovePgDn, "C-v" },
{ 'f', CK_HelpMovePgDn, "f" },
{ ' ', CK_HelpMovePgDn, "Space" },
{ KEY_PPAGE, CK_HelpMovePgUp, "PgUp" },
{ ALT ('v'), CK_HelpMovePgUp, "M-v" },
{ 'b', CK_HelpMovePgUp, "b" },
{ KEY_BACKSPACE, CK_HelpMovePgUp, "BackSpace" },
{ 'd', CK_HelpMoveHalfPgDn, "d" },
{ 'u', CK_HelpMoveHalfPgUp, "u" },
{ KEY_HOME, CK_HelpMoveTop, "Home" },
{ KEY_M_CTRL | KEY_HOME, CK_HelpMoveTop, "C-Home" },
{ KEY_M_CTRL | KEY_PPAGE, CK_HelpMoveTop, "C-PgUp" },
{ KEY_A1, CK_HelpMoveTop, "A1" },
{ ALT ('<'), CK_HelpMoveTop, "M-<" },
{ 'g', CK_HelpMoveTop, "g" },
{ KEY_END, CK_HelpMoveBottom, "End" },
{ KEY_M_CTRL | KEY_END, CK_HelpMoveBottom, "C-End" },
{ KEY_M_CTRL | KEY_NPAGE, CK_HelpMoveBottom, "C-PgDn" },
{ KEY_C1, CK_HelpMoveBottom, "C1" },
{ ALT ('>'), CK_HelpMoveBottom, "M->" },
{ 'G', CK_HelpMoveBottom, "G" },
{ KEY_RIGHT, CK_HelpSelectLink, "Right" },
{ KEY_ENTER, CK_HelpSelectLink, "Enter" },
{ '\n', CK_HelpSelectLink, "Enter" },
{ '\t', CK_HelpNextLink, "Tab" },
{ ALT ('\t'), CK_HelpPrevLink, "M-Tab" },
{ 'n', CK_HelpNextNode, "n" },
{ 'p', CK_HelpPrevNode, "p" },
{ ESC_CHAR, CK_HelpQuit, "Esc" },
{ XCTRL ('g'), CK_HelpQuit, "C-g" },
{ 0, CK_Ignore_Key, "" }
};
/* panel */
const global_keymap_t default_panel_keymap[] = {
{ ALT ('o'), CK_PanelChdirOtherPanel, "M-o" },
{ ALT ('l'), CK_PanelChdirToReadlink, "M-l" },
{ KEY_F (15), CK_PanelCmdCopyLocal, "S-F5" },
{ KEY_F (18), CK_PanelCmdDeleteLocal, "S-F8" },
{ KEY_ENTER, CK_PanelCmdDoEnter, "Enter" },
{ '\n', CK_PanelCmdDoEnter, "Enter" },
{ KEY_F (14), CK_PanelCmdEditNew, "S-F4" },
{ KEY_F (16), CK_PanelCmdRenameLocal, "S-F6" },
{ ALT ('*'), CK_PanelCmdReverseSelection, "M-*" },
{ KEY_KP_ADD, CK_PanelCmdSelect, "M-+" },
{ KEY_KP_SUBTRACT, CK_PanelCmdUnselect, "M--" },
{ KEY_F (13), CK_PanelCmdViewSimple, "S-F3" },
{ KEY_M_CTRL | KEY_NPAGE, CK_PanelCtrlNextPage, "C-PgDn" },
{ KEY_M_CTRL | KEY_PPAGE, CK_PanelCtrlPrevPage, "C-PgUp" },
{ ALT ('H'), CK_PanelDirectoryHistoryList, "M-H" },
{ ALT ('u'), CK_PanelDirectoryHistoryNext, "M-u" },
{ ALT ('y'), CK_PanelDirectoryHistoryPrev, "M-y" },
{ ALT ('j'), CK_PanelGotoBottomFile, "M-j" },
{ ALT ('r'), CK_PanelGotoMiddleFile, "M-r" },
{ ALT ('g'), CK_PanelGotoTopFile, "M-g" },
{ KEY_IC, CK_PanelMarkFile, "Insert" },
{ KEY_UP, CK_PanelMoveUp, "Up" },
{ KEY_DOWN, CK_PanelMoveDown, "Down" },
{ KEY_LEFT, CK_PanelMoveLeft, "Left" },
{ KEY_RIGHT, CK_PanelMoveRight, "Right" },
{ KEY_END, CK_PanelMoveEnd, "End" },
{ KEY_C1, CK_PanelMoveEnd, "C1" },
{ KEY_HOME, CK_PanelMoveHome, "Home" },
{ KEY_A1, CK_PanelMoveHome, "A1" },
{ KEY_NPAGE, CK_PanelNextPage, "PgDn" },
{ KEY_PPAGE, CK_PanelPrevPage, "PgUp" },
{ ALT ('e'), CK_PanelSetPanelEncoding, "M-e" },
{ XCTRL ('s'), CK_PanelStartSearch, "C-s" },
{ ALT ('s'), CK_PanelStartSearch, "M-s" },
{ ALT ('i'), CK_PanelSyncOtherPanel, "M-i" },
{ 0, CK_Ignore_Key , "" }
};
/* main.c */
const global_keymap_t default_main_map[] = {
{ KEY_F (1), CK_HelpCmd, "F1" },
{ KEY_F (2), CK_UserMenuCmd, "F2" },
{ KEY_F (3), CK_ViewCmd, "F3" },
{ KEY_F (4), CK_EditCmd, "F4" },
{ KEY_F (5), CK_CopyCmd, "F5" },
{ KEY_F (6), CK_RenameCmd, "F6" },
{ KEY_F (7), CK_MkdirCmd, "F7" },
{ KEY_F (8), CK_DeleteCmd, "F8" },
{ KEY_F (9), CK_MenuCmd, "F9" },
{ KEY_F (10), CK_QuitCmd, "F10" },
{ KEY_F (13), CK_ViewFileCmd, "S-F3" },
{ KEY_F (19), CK_MenuLastSelectedCmd, "S-F9" },
{ KEY_F (20), CK_QuietQuitCmd, "S-10" },
{ ALT ('h'), CK_HistoryCmd, "M-h" },
{ XCTRL ('@'), CK_SingleDirsizeCmd, "C-Space" },
/* Copy useful information to the command line */
{ ALT ('a'), CK_CopyCurrentPathname, "M-a" },
{ ALT ('A'), CK_CopyOtherPathname, "M-A" },
{ ALT ('c'), CK_QuickCdCmd, "M-c" },
/* To access the directory hotlist */
{ XCTRL ('\\'), CK_QuickChdirCmd, "C-\\" },
/* Suspend */
{ XCTRL ('z'), CK_SuspendCmd, "C-z" },
/* The filtered view command */
{ ALT ('!'), CK_FilteredViewCmd, "M-!" },
/* Find file */
{ ALT ('?'), CK_FindCmd, "M-?" },
/* Panel refresh */
{ XCTRL ('r'), CK_RereadCmd, "C-r" },
/* Toggle listing between long, user defined and full formats */
{ ALT ('t'), CK_ToggleListingCmd, "M-t" },
/* Swap panels */
{ XCTRL ('u'), CK_SwapCmd, "C-u" },
/* View output */
{ XCTRL ('o'), CK_ShowCommandLine, "C-o" },
{ ALT ('.'), CK_ToggleShowHidden, "M-." },
{ ALT (','), CK_TogglePanelsSplit, "M-," },
{ XCTRL ('x'), CK_StartExtMap1, "C-x" },
/* Select/unselect group */
{ KEY_KP_ADD, CK_SelectCmd, "+" },
{ KEY_KP_SUBTRACT, CK_UnselectCmd, "-" },
{ ALT ('*'), CK_ReverseSelectionCmd, "*" },
{ ALT ('`'), CK_DialogListCmd, "M-`"},
{ ALT ('}'), CK_DialogNextCmd, "M-}"},
{ ALT ('{'), CK_DialogPrevCmd, "M-{"},
{ 0, CK_Ignore_Key, "" }
};
const global_keymap_t default_main_x_map[] = {
{ 'd', CK_CompareDirsCmd, "d" },
#ifdef USE_DIFF_VIEW
{ XCTRL ('d'), CK_DiffViewCmd, "C-d" },
#endif /* USE_DIFF_VIEW */
2009-12-29 14:39:13 +03:00
#ifdef ENABLE_VFS
{ 'a', CK_ReselectVfs, "a"},
2009-12-29 14:39:13 +03:00
#endif /* ENABLE_VFS */
{ 'p', CK_CopyCurrentPathname, "p" },
{ XCTRL ('p'), CK_CopyOtherPathname, "C-p" },
{ 't', CK_CopyCurrentTagged, "t" },
{ XCTRL ('t'), CK_CopyOtherTagged, "C-t" },
{ 'c', CK_ChmodCmd, "c" },
{ 'o', CK_ChownCmd, "o" },
{ 'r', CK_CopyCurrentReadlink, "r" },
{ XCTRL ('r'), CK_CopyOtherReadlink, "C-r" },
{ 'l', CK_LinkCmd, "l" },
{ 's', CK_SymlinkCmd, "s" },
{ 'v', CK_RelativeSymlinkCmd, "v" },
{ XCTRL ('s'), CK_EditSymlinkCmd, "C-s" },
{ 'i', CK_InfoCmd, "i" },
{ 'q', CK_QuickViewCmd, "q" },
{ 'h', CK_AddHotlist, "h" },
{ '!', CK_ExternalPanelize, "!" },
#ifdef WITH_BACKGROUND
{ 'j', CK_JobsCmd, "j" },
#endif /* WITH_BACKGROUND */
{ 0, CK_Ignore_Key, "" }
};
const global_keymap_t default_input_keymap[] = {
/* Motion */
{ XCTRL ('a'), CK_InputBol, "C-a" },
{ KEY_HOME, CK_InputBol, "Home" },
{ KEY_A1, CK_InputBol, "A1" },
{ ALT ('<'), CK_InputBol, "M-<" },
{ XCTRL ('e'), CK_InputEol, "C-e" },
{ KEY_END, CK_InputEol, "End" },
{ ALT ('>'), CK_InputEol, "M->" },
{ KEY_C1, CK_InputEol, "C1" },
{ KEY_LEFT, CK_InputMoveLeft, "Left" },
{ KEY_M_CTRL | KEY_LEFT, CK_InputWordLeft, "C-Left" },
{ KEY_RIGHT, CK_InputMoveRight, "Right" },
{ KEY_M_CTRL | KEY_RIGHT, CK_InputWordRight, "C-Right" },
{ XCTRL ('b'), CK_InputBackwardChar, "C-b" },
{ ALT ('b'), CK_InputBackwardWord, "M-b" },
{ XCTRL ('f'), CK_InputForwardChar, "C-f" },
{ ALT ('f'), CK_InputForwardWord, "M-f" },
/* Editing */
{ KEY_BACKSPACE, CK_InputBackwardDelete, "BackSpace" },
{ KEY_DC, CK_InputDeleteChar, "Delete" },
{ ALT ('d'), CK_InputKillWord, "M-d" },
{ ALT (KEY_BACKSPACE), CK_InputBackwardKillWord, "M-BackSpace" },
/* Region manipulation */
{ XCTRL ('w'), CK_InputKillRegion, "C-w" },
{ ALT ('w'), CK_InputKillSave, "M-w" },
{ XCTRL ('y'), CK_InputYank, "C-y" },
{ XCTRL ('k'), CK_InputKillLine, "C-k" },
/* History */
{ ALT ('p'), CK_InputHistoryPrev, "M-p" },
{ ALT ('n'), CK_InputHistoryNext, "M-n" },
{ ALT ('h'), CK_InputHistoryShow, "M-h" },
/* Completion */
{ ALT ('\t'), CK_InputComplete, "M-tab" },
{ 0, CK_Ignore_Key, "" }
};
const global_keymap_t default_listbox_keymap[] = {
{ KEY_UP, CK_ListboxMoveUp, "Up" },
{ XCTRL ('p'), CK_ListboxMoveUp, "C-p" },
{ KEY_DOWN, CK_ListboxMoveDown, "Down" },
{ XCTRL ('n'), CK_ListboxMoveDown, "C-n" },
{ KEY_HOME, CK_ListboxMoveHome, "Home" },
{ ALT ('<'), CK_ListboxMoveHome, "M-<" },
{ KEY_A1, CK_ListboxMoveHome, "A1" },
{ KEY_END, CK_ListboxMoveEnd, "End" },
{ ALT ('>'), CK_ListboxMoveEnd, "M->" },
{ KEY_C1, CK_ListboxMoveEnd, "C1" },
{ KEY_PPAGE, CK_ListboxMovePgUp, "PgUp" },
{ ALT ('v'), CK_ListboxMovePgUp, "M-v" },
{ KEY_NPAGE, CK_ListboxMovePgDn, "PgDn" },
{ XCTRL ('v'), CK_ListboxMovePgDn, "C-v" },
{ KEY_DC, CK_ListboxDeleteItem, "Delete" },
{ 'd', CK_ListboxDeleteItem, "d" },
{ KEY_M_SHIFT | KEY_DC, CK_ListboxDeleteAll, "S-Delete" },
{ 'D', CK_ListboxDeleteAll, "D" },
{ 0, CK_Ignore_Key, "" }
};
#ifdef USE_DIFF_VIEW
/* diff viewer */
const global_keymap_t default_diff_keymap[] = {
{ 's', CK_DiffDisplaySymbols, "s" },
{ 'l', CK_DiffDisplayNumbers, "l" },
{ 'f', CK_DiffFull, "f" },
{ '=', CK_DiffEqual, "=" },
{ '>', CK_DiffSplitMore, ">" },
{ '<', CK_DiffSplitLess, "<" },
{ '2', CK_DiffSetTab2, "2" },
{ '3', CK_DiffSetTab3, "3" },
{ '4', CK_DiffSetTab4, "4" },
{ '8', CK_DiffSetTab8, "8" },
{ XCTRL ('u'), CK_DiffSwapPanel, "C-u" },
{ XCTRL ('r'), CK_DiffRedo, "C-r" },
{ XCTRL ('o'), CK_ShowCommandLine, "C-o" },
{ 'n', CK_DiffNextHunk, "n" },
{ 'p', CK_DiffPrevHunk, "p" },
{ 'g', CK_DiffGoto, "g" },
{ 'G', CK_DiffGoto, "G" },
{ KEY_M_CTRL | KEY_HOME, CK_DiffBOF, "C-Home" },
{ KEY_M_CTRL | KEY_END, CK_DiffEOF, "C-End" },
{ KEY_DOWN, CK_DiffDown, "Down" },
{ KEY_UP, CK_DiffUp, "Up" },
{ KEY_M_CTRL | KEY_LEFT, CK_DiffQuickLeft, "C-Left" },
{ KEY_M_CTRL | KEY_RIGHT, CK_DiffQuickRight, "C-Right" },
{ KEY_LEFT, CK_DiffLeft, "Left" },
{ KEY_RIGHT, CK_DiffRight, "Right" },
{ KEY_NPAGE, CK_DiffPageDown, "Down" },
{ KEY_PPAGE, CK_DiffPageUp, "Up" },
{ KEY_HOME, CK_DiffHome, "Home" },
{ KEY_END, CK_DiffEnd, "End" },
{ 'q', CK_DiffQuit, "q" },
{ 'Q', CK_DiffQuit, "Q" },
{ XCTRL ('g'), CK_DiffQuit, "C-g" },
{ ESC_CHAR, CK_DiffQuit, "Esc" },
{ KEY_F (1), CK_DiffHelp, "F1" },
{ KEY_F (4), CK_DiffEditCurrent, "F4" },
{ KEY_F (5), CK_DiffMergeCurrentHunk, "F5" },
{ KEY_F (7), CK_DiffSearch, "F7" },
{ KEY_F (17), CK_DiffContinueSearch, "S-F7" },
{ KEY_F (9), CK_DiffOptions, "F9" },
{ KEY_F (10), CK_DiffQuit, "F10" },
{ KEY_F (14), CK_DiffEditOther, "S-F4" },
{ 0, CK_Ignore_Key, "" }
};
#endif
static int
name_keymap_comparator (const void *p1, const void *p2)
{
const name_keymap_t *m1 = (const name_keymap_t *) p1;
const name_keymap_t *m2 = (const name_keymap_t *) p2;
return str_casecmp (m1->name, m2->name);
}
static inline void
sort_command_names (void)
{
static gboolean has_been_sorted = FALSE;
if (!has_been_sorted) {
qsort (command_names, num_command_names,
sizeof (command_names[0]), &name_keymap_comparator);
has_been_sorted = TRUE;
}
}
static void
keymap_add (GArray *keymap, long key, unsigned long cmd, const char *caption)
{
if (key != 0 && cmd != CK_Ignore_Key) {
global_keymap_t new_bind;
new_bind.key = key;
new_bind.command = cmd;
g_snprintf (new_bind.caption, sizeof (new_bind.caption), "%s", caption);
g_array_append_val (keymap, new_bind);
}
}
void
keybind_cmd_bind (GArray *keymap, const char *keybind, unsigned long action)
{
char *caption = NULL;
long key;
key = lookup_key (keybind, &caption);
keymap_add (keymap, key, action, caption);
g_free (caption);
}
unsigned long
lookup_action (const char *name)
{
const name_keymap_t key = { name, 0 };
name_keymap_t *res;
sort_command_names ();
res = bsearch (&key, command_names, num_command_names,
sizeof (command_names[0]), name_keymap_comparator);
return (res != NULL) ? res->val : CK_Ignore_Key;
}
const char *
lookup_keymap_shortcut (const global_keymap_t *keymap, unsigned long action)
{
size_t i;
for (i = 0; keymap[i].key != 0; i++)
if (keymap[i].command == action)
return (keymap[i].caption[0] != '\0') ? keymap[i].caption : NULL;
return NULL;
}
2009-11-07 14:17:38 +03:00
unsigned long
lookup_keymap_command (const global_keymap_t *keymap, long key)
{
size_t i;
for (i = 0; keymap[i].key != 0; i++)
if (keymap[i].key == key)
return keymap[i].command;
return CK_Ignore_Key;
}