1
1

* add new commands into cmddef.h

* add user keybind in widgets
    * add widget keybindings

Signed-off-by: Ilia Maslakov <il.smind@google.com>
Этот коммит содержится в:
Ilia Maslakov 2009-09-14 17:13:54 +00:00 коммит произвёл Ilia Maslakov
родитель 606dce4e8b
Коммит 5a397a6b9a
11 изменённых файлов: 457 добавлений и 184 удалений

Просмотреть файл

@ -3119,7 +3119,7 @@ edit_execute_cmd (WEdit *edit, int command, int char_for_insertion)
case CK_Shell:
view_other_cmd ();
break;
case CK_Select_Codepage:
case CK_SelectCodepage:
edit_select_codepage_cmd (edit);
break;
case CK_Insert_Literal:

Просмотреть файл

@ -132,7 +132,7 @@ static const global_key_map_t common_key_map[] = {
{ XCTRL ('o'), CK_Shell },
{ XCTRL ('s'), CK_Toggle_Syntax },
{ XCTRL ('u'), CK_Undo },
{ XCTRL ('t'), CK_Select_Codepage },
{ XCTRL ('t'), CK_SelectCodepage },
{ XCTRL ('q'), CK_Insert_Literal },
{ XCTRL ('a'), CK_Execute_Macro },
{ XCTRL ('r'), CK_Begin_End_Macro },

Просмотреть файл

@ -227,7 +227,7 @@ menu_replace_cmd (void)
static void
menu_select_codepage_cmd (void)
{
menu_cmd (CK_Select_Codepage);
menu_cmd (CK_SelectCodepage);
}
static void

Просмотреть файл

@ -1,14 +1,58 @@
[editor]
XStore = ctrl g
XPaste = ctrl v
XCut = ctrl x
Delete-Line = ctrl y
EditXStore = ctrl g
EditXPaste = ctrl v
EditXCut = ctrl x
EditDeleteLine = ctrl y
[viewer:hex]
HexViewToggleNavigationMode = tab
ViewMoveToBol = ctrl a; home
ViewMoveToEol = ctrl e; end
ViewMoveLeft = b; left
ViewMoveRight = f; right
ViewMoveUp = k; y; up
ViewMoveDown = j; delete; down
[viewer]
ViewSearch = ?; /; f7
ViewContinueSearch = ctrl r; ctrl s; f17
ViewMoveToBol = home
ViewMoveToEol = end
ViewMoveLeft = h; left
ViewMoveRight = l; right
ViewMoveUp = k; y; insert; up
ViewMoveDown = j; e; delete; down
ViewMovePgDn = f; space; pgdn
ViewMovePgUp = b; pgup
ViewMoveHalfPgDn = d
ViewMoveHalfPgUp = u
ViewGotoBookmark = m
ViewNewBookmark = r
ViewNextFile = ctrl f
ViewPrevFile = ctrl b
ViewQuit = q; esc
SelectCodepage = ctrl t
ShowCommandLine = ctrl o
ViewToggleRuler = alt r
[main]
FindCmd = alt f7
ViewOtherCmd = ctrl o
CmdMenuLastSelected = f19
CmdQuietQuit = f20
CmdSingleDirsize = ctrl @
CmdCopyCurrentPathname = alt a
CmdCopyOtherPathname = alt A
CmdQuickCd = alt c
CmdQuickChdir = ctrl \\
CmdSuspend = ctrl z
CmdFilteredView = alt !
CmdFind = alt ?
CmdReread = ctrl r
CmdToggleListing = alt t
CmdSwapPanel = ctrl u
ShowCommandLine = ctrl o
[panel:xmap]
ExtMap1 = ctrl x
[main:xmap]
[panel]
@ -18,6 +62,8 @@ PanelMoveDown = down
PanelMoveUp = up
PanelMoveLeft = left
PanelMoveRight = right
PanelMoveHome = home
PanelMoveEnd = end
PanelPrevPage = pgup
PanelNextPage = pgdn
PanelDoEnter = enter
@ -42,3 +88,30 @@ PanelSyncOtherPanel = alt i
PanelGotoTopFile = alt g
PanelSetPanelEncoding = ctrl t
[panel:xmap]
[widget]
WidgetBol = ctrl a; alt <; home
WidgetEol = ctrl e; alt >;end
WidgetMoveLeft = alt left
WidgetWordLeft = ctrl left
WidgetBackwardChar = ctrl b
WidgetBackwardWord = alt b
WidgetMoveRight = alt right
WidgetWordRight = ctrl right
WidgetForwardChar = ctrl f
WidgetForwardWord = alt f
WidgetBackwardDelete = backspace
WidgetDeleteChar = delete
WidgetKillWord = alt d
WidgetBackwardKillWord = alt backspace
WidgetSetMark =
WidgetKillRegion = ctrl w
WidgetKillSave = alt w
WidgetYank = ctrl y
WidgetKillLine = ctrl k
WidgetHistoryPrev = alt p; ctrl down
WidgetHistoryNext = alt n; ctrl up
WidgetHistoryShow = alt h
WidgetComplete = alt tab

Просмотреть файл

@ -42,7 +42,6 @@
#define CK_Paragraph_Up 25
#define CK_Paragraph_Down 26
/* file commands */
#define CK_Save 101
#define CK_Load 102
@ -174,7 +173,6 @@
#define CK_Paragraph_Up_Alt_Highlight 670
#define CK_Paragraph_Down_Alt_Highlight 671
/* X clipboard operations */
#define CK_XStore 701
#define CK_XCut 702
@ -188,129 +186,158 @@
#define CK_Ext_Mode 820
#define CK_Select_Codepage 850
#define CK_Insert_Literal 851
#define CK_Execute_Macro 852
#define CK_Begin_End_Macro 853
/* common */
#define CK_ShowCommandLine 2001
#define CK_SelectCodepage 2002
#define CK_StartExtMap1 2021
#define CK_StartExtMap2 2022
/* text fields*/
#define CK_WidgetBol 4001
#define CK_WidgetEol 4002
#define CK_WidgetMoveLeft 4003
#define CK_WidgetWordLeft 4004
#define CK_WidgetBackwardChar 4005
#define CK_WidgetBackwardWord 4006
#define CK_WidgetMoveRight 4007
#define CK_WidgetWordRight 4008
#define CK_WidgetForwardChar 4009
#define CK_WidgetForwardWord 4010
#define CK_WidgetBackwardDelete 4011
#define CK_WidgetDeleteChar 4012
#define CK_WidgetKillWord 4013
#define CK_WidgetBackwardKillWord 4014
#define CK_WidgetSetMark 4015
#define CK_WidgetKillRegion 4016
#define CK_WidgetKillSave 4017
#define CK_WidgetYank 4018
#define CK_WidgetKillLine 4020
#define CK_WidgetHistoryPrev 4021
#define CK_WidgetHistoryNext 4022
#define CK_WidgetHistoryShow 4023
#define CK_WidgetComplete 4024
/* Viewer */
#define CK_ViewSearch 5001
#define CK_ViewContinueSearch 5002
#define CK_ViewGotoBookmark 5003
#define CK_ViewNewBookmark 5004
#define CK_ViewMoveUp 5005
#define CK_ViewMoveDown 5006
#define CK_ViewMoveLeft 5007
#define CK_ViewMoveRight 5008
#define CK_ViewMovePgDn 5009
#define CK_ViewMovePgUp 5010
#define CK_ViewMoveHalfPgDn 5011
#define CK_ViewMoveHalfPgUp 5012
#define CK_ViewMoveToBol 5013
#define CK_ViewMoveToEol 5014
#define CK_ViewNextFile 5015
#define CK_ViewPrevFile 5016
#define CK_ViewToggleRuler 5017
#define CK_HexViewToggleNavigationMode 5018
#define CK_ViewQuit 5020
#define CK_ViewSearch 5001
#define CK_ViewContinueSearch 5002
#define CK_ViewGotoBookmark 5003
#define CK_ViewNewBookmark 5004
#define CK_ViewMoveUp 5005
#define CK_ViewMoveDown 5006
#define CK_ViewMoveLeft 5007
#define CK_ViewMoveRight 5008
#define CK_ViewMovePgDn 5009
#define CK_ViewMovePgUp 5010
#define CK_ViewMoveHalfPgDn 5011
#define CK_ViewMoveHalfPgUp 5012
#define CK_ViewMoveToBol 5013
#define CK_ViewMoveToEol 5014
#define CK_ViewNextFile 5015
#define CK_ViewPrevFile 5016
#define CK_ViewToggleRuler 5017
#define CK_HexViewToggleNavigationMode 5018
#define CK_ViewQuit 5020
/* main commands */
#define CK_ChmodCmd 7001
#define CK_ChownAdvancedCmd 7002
#define CK_ChownCmd 7003
#define CK_CompareDirsCmd 7004
#define CK_ConfigureBox 7005
#define CK_ConfigureVfs 7006
#define CK_ConfirmBox 7007
#define CK_CopyCmd 7008
#define CK_CopyCurrentPathname 7009
#define CK_CopyOtherPathname 7010
#define CK_DeleteCmd 7011
#define CK_DirsizesCmd 7012
#define CK_DisplayBitsBox 7013
#define CK_EditCmd 7014
#define CK_EditMcMenuCmd 7015
#define CK_EditSymlinkCmd 7016
#define CK_EditSyntaxCmd 7017
#define CK_EditUserMenuCmd 7018
#define CK_ExternalPanelize 7020
#define CK_FilterCmd 7021
#define CK_FilteredViewCmd 7022
#define CK_FindCmd 7023
#define CK_FishlinkCmd 7024
#define CK_FtplinkCmd 7025
#define CK_HistoryCmd 7026
#define CK_InfoCmd 7027
#define CK_JobsCmd 7028
#define CK_LayoutCmd 7029
#define CK_LearnKeys 7030
#define CK_LinkCmd 7031
#define CK_ListingCmd 7033
#define CK_MenuLastSelectedCmd 7034
#define CK_MkdirCmd 7035
#define CK_QuickCdCmd 7036
#define CK_QuickChdirCmd 7037
#define CK_QuickViewCmd 7038
#define CK_RenCmd 7039
#define CK_RereadCmd 7040
#define CK_ReselectVfs 7041
#define CK_ReverseSelectionCmd 7043
#define CK_SaveSetupCmd 7044
#define CK_SelectCmd 7045
#define CK_SingleDirsizeCmd 7046
#define CK_SuspendCmd 7047
#define CK_SwapCmd 7048
#define CK_SymlinkCmd 7049
#define CK_ToggleListingCmd 7050
#define CK_TreeCmd 7051
#define CK_UndeleteCmd 7052
#define CK_UnselectCmd 7053
#define CK_UserFileMenuCmd 7054
#define CK_ViewCmd 7055
#define CK_ViewFileCmd 7056
#define CK_ViewOtherCmd 7057
#define CK_QuietQuitCmd 7058
#define CK_CopyCurrentTagged 7059
#define CK_CopyCurrentReadlink 7060
#define CK_CopyOtherReadlink 7061
#define CK_AddHotlist 7062
#define CK_StartExtCmd 7063
#define CK_QuitCmd 7064
#define CK_CopyOtherTarget 7065
#define CK_CopyOthertReadlink 7066
#define CK_ChmodCmd 7001
#define CK_ChownAdvancedCmd 7002
#define CK_ChownCmd 7003
#define CK_CompareDirsCmd 7004
#define CK_ConfigureBox 7005
#define CK_ConfigureVfs 7006
#define CK_ConfirmBox 7007
#define CK_CopyCmd 7008
#define CK_CopyCurrentPathname 7009
#define CK_CopyOtherPathname 7010
#define CK_DeleteCmd 7011
#define CK_DirsizesCmd 7012
#define CK_DisplayBitsBox 7013
#define CK_EditCmd 7014
#define CK_EditMcMenuCmd 7015
#define CK_EditSymlinkCmd 7016
#define CK_EditSyntaxCmd 7017
#define CK_EditUserMenuCmd 7018
#define CK_ExternalPanelize 7020
#define CK_FilterCmd 7021
#define CK_FilteredViewCmd 7022
#define CK_FindCmd 7023
#define CK_FishlinkCmd 7024
#define CK_FtplinkCmd 7025
#define CK_HistoryCmd 7026
#define CK_InfoCmd 7027
#define CK_JobsCmd 7028
#define CK_LayoutCmd 7029
#define CK_LearnKeys 7030
#define CK_LinkCmd 7031
#define CK_ListingCmd 7033
#define CK_MenuLastSelectedCmd 7034
#define CK_MkdirCmd 7035
#define CK_QuickCdCmd 7036
#define CK_QuickChdirCmd 7037
#define CK_QuickViewCmd 7038
#define CK_RenCmd 7039
#define CK_RereadCmd 7040
#define CK_ReselectVfs 7041
#define CK_ReverseSelectionCmd 7043
#define CK_SaveSetupCmd 7044
#define CK_SelectCmd 7045
#define CK_SingleDirsizeCmd 7046
#define CK_SuspendCmd 7047
#define CK_SwapCmd 7048
#define CK_SymlinkCmd 7049
#define CK_ToggleListingCmd 7050
#define CK_TreeCmd 7051
#define CK_UndeleteCmd 7052
#define CK_UnselectCmd 7053
#define CK_UserFileMenuCmd 7054
#define CK_ViewCmd 7055
#define CK_ViewFileCmd 7056
#define CK_QuietQuitCmd 7058
#define CK_CopyCurrentTagged 7059
#define CK_CopyCurrentReadlink 7060
#define CK_CopyOtherReadlink 7061
#define CK_AddHotlist 7062
#define CK_QuitCmd 7064
#define CK_CopyOtherTarget 7065
#define CK_CopyOthertReadlink 7066
#define CK_PanelChdirOtherPanel 8001
#define CK_PanelChdirToReadlink 8002
#define CK_PanelCmdCopyLocal 8003
#define CK_PanelCmdDeleteLocal 8004
#define CK_PanelCmdDoEnter 8005
#define CK_PanelCmdEditNew 8006
#define CK_PanelCmdRenameLocal 8007
#define CK_PanelCmdReverseSelection 8008
#define CK_PanelCmdSelect 8009
#define CK_PanelCmdUnselect 8010
#define CK_PanelCmdViewSimple 8011
#define CK_PanelCtrlNextPage 8012
#define CK_PanelCtrlPrevPage 8013
#define CK_PanelDirectoryHistoryList 8014
#define CK_PanelDirectoryHistoryNext 8015
#define CK_PanelDirectoryHistoryPrev 8016
#define CK_PanelGotoBottomFile 8017
#define CK_PanelGotoMiddleFile 8018
#define CK_PanelGotoTopFile 8019
#define CK_PanelMarkFile 8020
#define CK_PanelMoveDown 8021
#define CK_PanelMoveEnd 8022
#define CK_PanelMoveHome 8023
#define CK_PanelMoveUp 8024
#define CK_PanelMoveLeft 8025
#define CK_PanelMoveRight 8026
#define CK_PanelNextPage 8027
#define CK_PanelPrevPage 8028
#define CK_PanelSetPanelEncoding 8029
#define CK_PanelStartSearch 8030
#define CK_PanelSyncOtherPanel 8031
/* panels */
#define CK_PanelChdirOtherPanel 8001
#define CK_PanelChdirToReadlink 8002
#define CK_PanelCmdCopyLocal 8003
#define CK_PanelCmdDeleteLocal 8004
#define CK_PanelCmdDoEnter 8005
#define CK_PanelCmdEditNew 8006
#define CK_PanelCmdRenameLocal 8007
#define CK_PanelCmdReverseSelection 8008
#define CK_PanelCmdSelect 8009
#define CK_PanelCmdUnselect 8010
#define CK_PanelCmdViewSimple 8011
#define CK_PanelCtrlNextPage 8012
#define CK_PanelCtrlPrevPage 8013
#define CK_PanelDirectoryHistoryList 8014
#define CK_PanelDirectoryHistoryNext 8015
#define CK_PanelDirectoryHistoryPrev 8016
#define CK_PanelGotoBottomFile 8017
#define CK_PanelGotoMiddleFile 8018
#define CK_PanelGotoTopFile 8019
#define CK_PanelMarkFile 8020
#define CK_PanelMoveDown 8021
#define CK_PanelMoveEnd 8022
#define CK_PanelMoveHome 8023
#define CK_PanelMoveUp 8024
#define CK_PanelMoveLeft 8025
#define CK_PanelMoveRight 8026
#define CK_PanelNextPage 8027
#define CK_PanelPrevPage 8028
#define CK_PanelSetPanelEncoding 8029
#define CK_PanelStartSearch 8030
#define CK_PanelSyncOtherPanel 8031
/*
Process a block through a shell command: CK_Pipe_Block(i) executes shell_cmd[i].

Просмотреть файл

@ -49,6 +49,8 @@
#include "tty/key.h" /* KEY_M_ */
#include "tty/tty.h" /* keys */
#include "wtools.h"
#include "strutil.h"
#include "keybind.h"
static const name_key_map_t command_names[] = {
@ -169,7 +171,6 @@ static const name_key_map_t command_names[] = {
{ "EditXPaste", CK_XPaste },
{ "EditSelectionHistory", CK_Selection_History },
{ "EditShell", CK_Shell },
{ "EditSelectCodepage", CK_Select_Codepage },
{ "EditInsertLiteral", CK_Insert_Literal },
{ "EditExecuteMacro", CK_Execute_Macro },
{ "EditBeginorEndMacro", CK_Begin_End_Macro },
@ -208,6 +209,12 @@ static const name_key_map_t command_names[] = {
/* main commands */
{ "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 },
@ -255,11 +262,9 @@ static const name_key_map_t command_names[] = {
{ "CmdUserFileMenu", CK_UserFileMenuCmd },
{ "CmdView", CK_ViewCmd },
{ "CmdViewFile", CK_ViewFileCmd },
{ "CmdViewOther", CK_ViewOtherCmd },
{ "CmdCmdCopyCurrentReadlink", CK_CopyCurrentReadlink },
{ "CmdCopyOtherReadlink", CK_CopyOtherReadlink },
{ "CmdAddHotlist", CK_AddHotlist },
{ "CmdStartExt", CK_StartExtCmd },
{ "CmdQuit", CK_QuitCmd },
{ "CmdCopyOtherTarget", CK_CopyOtherTarget },
{ "CmdCopyOthertReadlink", CK_CopyOthertReadlink },
@ -296,6 +301,38 @@ static const name_key_map_t command_names[] = {
{ "PanelSetPanelEncoding", CK_PanelSetPanelEncoding },
{ "PanelStartSearch", CK_PanelStartSearch },
{ "PanelSyncOtherPanel", CK_PanelSyncOtherPanel },
/* widgets */
{ "WidgetBol", CK_WidgetBol },
{ "WidgetEol", CK_WidgetEol },
{ "WidgetMoveLeft", CK_WidgetMoveLeft },
{ "WidgetWordLeft", CK_WidgetWordLeft },
{ "WidgetBackwardChar", CK_WidgetBackwardChar },
{ "WidgetBackwardWord", CK_WidgetBackwardWord },
{ "WidgetMoveRight", CK_WidgetMoveRight },
{ "WidgetWordRight", CK_WidgetWordRight },
{ "WidgetForwardChar", CK_WidgetForwardChar },
{ "WidgetForwardWord", CK_WidgetForwardWord },
{ "WidgetBackwardDelete", CK_WidgetBackwardDelete },
{ "WidgetDeleteChar", CK_WidgetDeleteChar },
{ "WidgetKillWord", CK_WidgetKillWord },
{ "WidgetBackwardKillWord", CK_WidgetBackwardKillWord },
{ "WidgetSetMark", CK_WidgetSetMark },
{ "WidgetKillRegion", CK_WidgetKillRegion },
{ "WidgetKillSave", CK_WidgetKillSave },
{ "WidgetYank", CK_WidgetYank },
{ "WidgetKillLine", CK_WidgetKillLine },
{ "WidgetHistoryPrev", CK_WidgetHistoryPrev },
{ "WidgetHistoryNext", CK_WidgetHistoryNext },
{ "WidgetHistoryShow", CK_WidgetHistoryShow },
{ "WidgetComplete", CK_WidgetComplete },
/* common */
{ "ExtMap1", CK_StartExtMap1 },
{ "ExtMap2", CK_StartExtMap2 },
{ "ShowCommandLine", CK_ShowCommandLine },
{ "SelectCodepage", CK_SelectCodepage },
{ NULL, 0 }
};
@ -314,7 +351,6 @@ void
keymap_add(GArray *keymap, int key, int cmd)
{
global_key_map_t new_bind, *map;
guint i;
map = &(g_array_index(keymap, global_key_map_t, 0));
if (key !=0 && cmd !=0) {

Просмотреть файл

@ -310,6 +310,7 @@ GArray *viewer_hex_keymap = NULL;
GArray *main_keymap = NULL;
GArray *main_x_keymap = NULL;
GArray *panel_keymap = NULL;
GArray *widget_keymap = NULL;
const global_key_map_t *main_map;
const global_key_map_t *main_x_map;
@ -337,8 +338,8 @@ static const global_key_map_t default_main_map[] = {
/* Swap panels */
{XCTRL ('u'), CK_SwapCmd},
/* View output */
{XCTRL ('o'), CK_ViewOtherCmd},
{XCTRL ('x'), CK_StartExtCmd},
{XCTRL ('o'), CK_ShowCommandLine},
{XCTRL ('x'), CK_StartExtMap1 },
{ 0, 0 }
};
@ -1299,7 +1300,7 @@ execute_cmd(int command)
case CK_SwapCmd:
swap_cmd ();
break;
case CK_ViewOtherCmd:
case CK_ShowCommandLine:
view_other_cmd ();
break;
case CK_QuitCmd:
@ -1340,7 +1341,7 @@ execute_cmd(int command)
break;
case CK_JobsCmd:
break;
case CK_StartExtCmd:
case CK_StartExtMap1:
ctl_x_cmd ();
break;
}
@ -1869,6 +1870,11 @@ do_nc (void)
panel_map = (global_key_map_t *) panel_keymap->data;
}
widget_map = default_widget_keymap;
if (widget_keymap && widget_keymap->len > 0)
widget_map = (global_key_map_t *) widget_keymap->data;
/* Check if we were invoked as an editor or file viewer */
if (!mc_maybe_editor_or_viewer ()) {
setup_panels_and_run_mc ();

Просмотреть файл

@ -80,10 +80,14 @@ extern GArray *viewer_hex_keymap;
extern GArray *main_keymap;
extern GArray *main_x_keymap;
extern GArray *panel_keymap;
extern GArray *widget_keymap;
extern const global_key_map_t *panel_map;
extern const global_key_map_t default_panel_keymap[];
extern const global_key_map_t *widget_map;
extern const global_key_map_t default_widget_keymap[];
void do_update_prompt (void);
enum cd_enum {

Просмотреть файл

@ -853,7 +853,7 @@ load_keymap_defs (void)
viewer_keymap = g_array_new(TRUE, FALSE, sizeof(global_key_map_t));
load_keymap_from_section ("viewer", viewer_keymap, mc_global_keymap);
viewer_keymap = g_array_new(TRUE, FALSE, sizeof(global_key_map_t));
viewer_hex_keymap = g_array_new(TRUE, FALSE, sizeof(global_key_map_t));
load_keymap_from_section ("viewer:hex", viewer_hex_keymap, mc_global_keymap);
main_keymap = g_array_new(TRUE, FALSE, sizeof(global_key_map_t));
@ -865,6 +865,9 @@ load_keymap_defs (void)
panel_keymap = g_array_new(TRUE, FALSE, sizeof(global_key_map_t));
load_keymap_from_section ("panel", panel_keymap, mc_global_keymap);
widget_keymap = g_array_new(TRUE, FALSE, sizeof(global_key_map_t));
load_keymap_from_section ("widget", widget_keymap, mc_global_keymap);
mc_config_deinit(mc_global_keymap);
}

Просмотреть файл

@ -109,8 +109,6 @@ const global_key_map_t default_keymap[] = {
{ 'u', CK_ViewMoveHalfPgUp },
{ XCTRL('o'), CK_ViewOtherCmd },
{ 'm', CK_ViewGotoBookmark },
{ 'r', CK_ViewNewBookmark },
@ -121,7 +119,8 @@ const global_key_map_t default_keymap[] = {
{ XCTRL ('g'), CK_ViewQuit },
{ ESC_CHAR, CK_ViewQuit },
{ XCTRL ('t'), CK_Select_Codepage },
{ XCTRL ('t'), CK_SelectCodepage },
{ XCTRL('o'), CK_ShowCommandLine },
{ 0, 0 }
};
@ -427,7 +426,7 @@ mcview_execute_cmd (mcview_t * view, int command, int key)
case CK_ViewMovePgDn:
mcview_move_down (view, view->data_area.height);
break;
case CK_ViewOtherCmd:
case CK_ShowCommandLine:
view_other_cmd ();
break;
/*
@ -459,7 +458,7 @@ mcview_execute_cmd (mcview_t * view, int command, int key)
if (mcview_ok_to_quit (view))
view->want_to_quit = TRUE;
break;
case CK_Select_Codepage:
case CK_SelectCodepage:
mcview_select_encoding (view);
view->dirty++;
mcview_update (view);

Просмотреть файл

@ -54,8 +54,56 @@
#include "wtools.h"
#include "strutil.h"
#include "cmddef.h" /* CK_ cmd name const */
#include "keybind.h" /* global_key_map_t */
#define HISTORY_FILE_NAME ".mc/history"
const global_key_map_t *widget_map;
const global_key_map_t default_widget_keymap[] = {
/* Motion */
{ XCTRL('a'), CK_WidgetBol },
{ KEY_HOME, CK_WidgetBol },
{ KEY_A1, CK_WidgetBol },
{ ALT ('<'), CK_WidgetBol },
{ XCTRL('e'), CK_WidgetEol },
{ KEY_END, CK_WidgetEol },
{ KEY_C1, CK_WidgetEol },
{ ALT ('>'), CK_WidgetEol },
{ KEY_LEFT, CK_WidgetMoveLeft },
{ KEY_LEFT | KEY_M_CTRL, CK_WidgetWordLeft },
{ KEY_RIGHT, CK_WidgetMoveRight },
{ KEY_RIGHT | KEY_M_CTRL, CK_WidgetWordRight },
{ XCTRL('b'), CK_WidgetBackwardChar },
{ ALT('b'), CK_WidgetBackwardWord },
{ XCTRL('f'), CK_WidgetForwardChar },
{ ALT('f'), CK_WidgetForwardWord },
/* Editing */
{ KEY_BACKSPACE, CK_WidgetBackwardDelete },
{ KEY_DC, CK_WidgetDeleteChar },
{ ALT('d'), CK_WidgetKillWord },
{ ALT(KEY_BACKSPACE), CK_WidgetBackwardKillWord },
/* Region manipulation */
{ 0, CK_WidgetSetMark },
{ XCTRL('w'), CK_WidgetKillRegion },
{ ALT('w'), CK_WidgetKillSave },
{ XCTRL('y'), CK_WidgetYank },
{ XCTRL('k'), CK_WidgetKillLine },
/* History */
{ ALT('p'), CK_WidgetHistoryPrev },
{ ALT('n'), CK_WidgetHistoryNext },
{ ALT('h'), CK_WidgetHistoryShow },
/* Completion */
{ ALT('\t'), CK_WidgetComplete },
{ 0, 0 }
};
static void
widget_selectcolor (Widget *w, gboolean focused, gboolean hotkey)
{
@ -1669,26 +1717,6 @@ static const struct {
{ 0, 0 }
};
/* This function is a test for a special input key used in complete.c */
/* Returns 0 if it is not a special key, 1 if it is a non-complete key
and 2 if it is a complete key */
int
is_in_input_map (WInput *in, int c_code)
{
int i;
(void) in;
for (i = 0; input_map [i].fn; i++)
if (c_code == input_map [i].key_code) {
if (input_map [i].fn == complete)
return 2;
else
return 1;
}
return 0;
}
static void
port_region_marked_for_delete (WInput *in)
{
@ -1698,39 +1726,136 @@ port_region_marked_for_delete (WInput *in)
in->charpoint = 0;
}
static void
widget_execute_cmd (WInput *in, int command, int key)
{
switch (command) {
case CK_WidgetBol:
beginning_of_line (in);
break;
case CK_WidgetEol:
end_of_line (in);
break;
case CK_WidgetMoveLeft:
key_left (in);
break;
case CK_WidgetWordLeft:
key_ctrl_left (in);
break;
case CK_WidgetMoveRight:
key_right (in);
break;
case CK_WidgetWordRight:
key_ctrl_right (in);
break;
case CK_WidgetBackwardChar:
backward_char (in);
break;
case CK_WidgetBackwardWord:
backward_word (in);
break;
case CK_WidgetForwardChar:
forward_char (in);
break;
case CK_WidgetForwardWord:
forward_word (in);
break;
case CK_WidgetBackwardDelete:
backward_delete (in);
break;
case CK_WidgetDeleteChar:
delete_char (in);
break;
case CK_WidgetKillWord:
kill_word (in);
break;
case CK_WidgetBackwardKillWord:
back_kill_word (in);
break;
case CK_WidgetSetMark:
set_mark (in);
break;
case CK_WidgetKillRegion:
kill_region (in);
break;
case CK_WidgetKillSave:
kill_save (in);
break;
case CK_WidgetYank:
yank (in);
break;
case CK_WidgetKillLine:
kill_line (in);
break;
case CK_WidgetHistoryPrev:
hist_prev (in);
break;
case CK_WidgetHistoryNext:
hist_next (in);
break;
case CK_WidgetHistoryShow:
do_show_hist (in);
break;
case CK_WidgetComplete:
complete (in);
break;
}
}
/* This function is a test for a special input key used in complete.c */
/* Returns 0 if it is not a special key, 1 if it is a non-complete key
and 2 if it is a complete key */
int
is_in_input_map (WInput *in, int key)
{
int i;
for (i = 0; widget_map[i].key; i++) {
if (key == widget_map[i].key) {
widget_execute_cmd (in, widget_map[i].command, key);
if (widget_map[i].command == CK_WidgetComplete)
return 2;
else
return 1;
}
}
return 0;
}
cb_ret_t
handle_char (WInput *in, int c_code)
handle_char (WInput *in, int key)
{
cb_ret_t v;
int i;
v = MSG_NOT_HANDLED;
if (quote){
free_completions (in);
v = insert_char (in, c_code);
update_input (in, 1);
quote = 0;
return v;
if (quote) {
free_completions (in);
v = insert_char (in, key);
update_input (in, 1);
quote = 0;
return v;
}
for (i = 0; input_map [i].fn; i++){
if (c_code == input_map [i].key_code){
if (input_map [i].fn != complete)
free_completions (in);
(*input_map [i].fn)(in);
v = MSG_HANDLED;
break;
}
for (i = 0; widget_map[i].key; i++) {
if (key == widget_map[i].key) {
if (widget_map[i].command != CK_WidgetComplete) {
free_completions (in);
widget_execute_cmd (in, widget_map[i].command, key);
update_input (in, 1);
v = MSG_HANDLED;
break;
}
}
}
if (!input_map [i].fn){
if (c_code > 255)
return MSG_NOT_HANDLED;
if (in->first){
port_region_marked_for_delete (in);
}
free_completions (in);
v = insert_char (in, c_code);
if (widget_map[i].command == 0) {
if (key > 255)
return MSG_NOT_HANDLED;
if (in->first)
port_region_marked_for_delete (in);
free_completions (in);
v = insert_char (in, key);
}
update_input (in, 1);
return v;