keybind.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548
  1. #ifndef MC__KEYBIND_H
  2. #define MC__KEYBIND_H
  3. #include <sys/types.h>
  4. #include <sys/time.h> /* time_t */
  5. #include "lib/global.h"
  6. /*** typedefs(not structures) and defined constants **********************************************/
  7. #define KEYMAP_SHORTCUT_LENGTH 32 /* FIXME: is 32 bytes enough for shortcut? */
  8. /* special commands */
  9. #define CK_Insert_Char -1
  10. #define CK_Ignore_Key 0
  11. /* cursor movements */
  12. #define CK_BackSpace 1
  13. #define CK_Delete 2
  14. #define CK_Enter 3
  15. #define CK_Page_Up 4
  16. #define CK_Page_Down 5
  17. #define CK_Left 6
  18. #define CK_Right 7
  19. #define CK_Word_Left 8
  20. #define CK_Word_Right 9
  21. #define CK_Up 10
  22. #define CK_Down 11
  23. #define CK_Home 12
  24. #define CK_End 13
  25. #define CK_Tab 14
  26. #define CK_Undo 15
  27. #define CK_Beginning_Of_Text 16
  28. #define CK_End_Of_Text 17
  29. #define CK_Scroll_Up 18
  30. #define CK_Scroll_Down 19
  31. #define CK_Return 20
  32. #define CK_Begin_Page 21
  33. #define CK_End_Page 22
  34. #define CK_Delete_Word_Left 23
  35. #define CK_Delete_Word_Right 24
  36. #define CK_Paragraph_Up 25
  37. #define CK_Paragraph_Down 26
  38. /* file commands */
  39. #define CK_Save 101
  40. #define CK_Load 102
  41. #define CK_New 103
  42. #define CK_Save_As 104
  43. #define CK_Load_Prev_File 111
  44. #define CK_Load_Next_File 112
  45. #define CK_Load_Syntax_File 121
  46. #define CK_Load_Menu_File 122
  47. #define CK_Menu 123
  48. /* block commands */
  49. #define CK_Mark 201
  50. #define CK_Copy 202
  51. #define CK_Move 203
  52. #define CK_Remove 204
  53. #define CK_Unmark 206
  54. #define CK_Save_Block 207
  55. #define CK_Column_Mark 208
  56. #define CK_Shift_Block_Left 211
  57. #define CK_Shift_Block_Right 212
  58. #define CK_Mark_All 213
  59. /* search and replace */
  60. #define CK_Find 301
  61. #define CK_Find_Again 302
  62. #define CK_Replace 303
  63. #define CK_Replace_Again 304
  64. #define CK_Complete_Word 305
  65. #if 0
  66. /* debugger commands */
  67. #define CK_Debug_Start 350
  68. #define CK_Debug_Stop 351
  69. #define CK_Debug_Toggle_Break 352
  70. #define CK_Debug_Clear 353
  71. #define CK_Debug_Next 354
  72. #define CK_Debug_Step 355
  73. #define CK_Debug_Back_Trace 356
  74. #define CK_Debug_Continue 357
  75. #define CK_Debug_Enter_Command 358
  76. #define CK_Debug_Until_Curser 359
  77. #endif
  78. /* misc */
  79. #define CK_Insert_File 401
  80. #define CK_Quit 402
  81. #define CK_Toggle_Insert 403
  82. #define CK_Help 404
  83. #define CK_Date 405
  84. #define CK_Refresh 406
  85. #define CK_Goto 407
  86. #define CK_Delete_Line 408
  87. #define CK_Delete_To_Line_End 409
  88. #define CK_Delete_To_Line_Begin 410
  89. #define CK_Man_Page 411
  90. #define CK_Sort 412
  91. #define CK_Mail 413
  92. #define CK_Cancel 414
  93. #define CK_Complete 415
  94. #define CK_Paragraph_Format 416
  95. #define CK_Util 417
  96. #define CK_Type_Load_Python 418
  97. #define CK_Find_File 419
  98. #define CK_Ctags 420
  99. #define CK_Match_Bracket 421
  100. #define CK_Terminal 422
  101. #define CK_Terminal_App 423
  102. #define CK_ExtCmd 424
  103. #define CK_User_Menu 425
  104. #define CK_Find_Definition 426
  105. #define CK_Edit_Options 427
  106. #define CK_Edit_Save_Mode 428
  107. #define CK_Choose_Syntax 429
  108. #define CK_About 430
  109. #if 0
  110. /* application control */
  111. #define CK_Save_Desktop 451
  112. #define CK_New_Window 452
  113. #define CK_Cycle 453
  114. #define CK_Save_And_Quit 455
  115. #define CK_Run_Another 456
  116. #define CK_Check_Save_And_Quit 457
  117. #define CK_Maximize 458
  118. #endif
  119. #define CK_Toggle_Show_Margin 460
  120. #define CK_Toggle_Tab_TWS 470
  121. #define CK_Toggle_Syntax 480
  122. #define CK_Toggle_Line_State 490
  123. /* macro */
  124. #define CK_Begin_Record_Macro 501
  125. #define CK_End_Record_Macro 502
  126. #define CK_Delete_Macro 503
  127. /* book mark */
  128. #define CK_Toggle_Bookmark 550
  129. #define CK_Flush_Bookmarks 551
  130. #define CK_Next_Bookmark 552
  131. #define CK_Prev_Bookmark 553
  132. /* highlight commands */
  133. #define CK_Page_Up_Highlight 604
  134. #define CK_Page_Down_Highlight 605
  135. #define CK_Left_Highlight 606
  136. #define CK_Right_Highlight 607
  137. #define CK_Word_Left_Highlight 608
  138. #define CK_Word_Right_Highlight 609
  139. #define CK_Up_Highlight 610
  140. #define CK_Down_Highlight 611
  141. #define CK_Home_Highlight 612
  142. #define CK_End_Highlight 613
  143. #define CK_Beginning_Of_Text_Highlight 614
  144. #define CK_End_Of_Text_Highlight 615
  145. #define CK_Begin_Page_Highlight 616
  146. #define CK_End_Page_Highlight 617
  147. #define CK_Scroll_Up_Highlight 618
  148. #define CK_Scroll_Down_Highlight 619
  149. #define CK_Paragraph_Up_Highlight 620
  150. #define CK_Paragraph_Down_Highlight 621
  151. /* alt highlight commands */
  152. #define CK_Page_Up_Alt_Highlight 654
  153. #define CK_Page_Down_Alt_Highlight 655
  154. #define CK_Left_Alt_Highlight 656
  155. #define CK_Right_Alt_Highlight 657
  156. #define CK_Word_Left_Alt_Highlight 658
  157. #define CK_Word_Right_Alt_Highlight 659
  158. #define CK_Up_Alt_Highlight 660
  159. #define CK_Down_Alt_Highlight 661
  160. #define CK_Home_Alt_Highlight 662
  161. #define CK_End_Alt_Highlight 663
  162. #define CK_Beginning_Of_Text_Alt_Highlight 664
  163. #define CK_End_Of_Text_Alt_Highlight 665
  164. #define CK_Begin_Page_Alt_Highlight 666
  165. #define CK_End_Page_Alt_Highlight 667
  166. #define CK_Scroll_Up_Alt_Highlight 668
  167. #define CK_Scroll_Down_Alt_Highlight 669
  168. #define CK_Paragraph_Up_Alt_Highlight 670
  169. #define CK_Paragraph_Down_Alt_Highlight 671
  170. /* X clipboard operations */
  171. #define CK_XStore 701
  172. #define CK_XCut 702
  173. #define CK_XPaste 703
  174. #define CK_Selection_History 704
  175. #define CK_Shell 801
  176. /* C-x or similar */
  177. #define CK_Ext_Mode 820
  178. #define CK_Insert_Literal 851
  179. #define CK_Execute_Macro 852
  180. #define CK_Begin_End_Macro 853
  181. /* help */
  182. #define CK_HelpHelp 1001
  183. #define CK_HelpIndex 1002
  184. #define CK_HelpBack 1003
  185. #define CK_HelpQuit 1004
  186. #define CK_HelpMoveUp 1005
  187. #define CK_HelpMoveDown 1006
  188. #define CK_HelpSelectLink 1007
  189. #define CK_HelpNextLink 1008
  190. #define CK_HelpPrevLink 1009
  191. #define CK_HelpNextNode 1010
  192. #define CK_HelpPrevNode 1011
  193. #define CK_HelpMovePgDn 1012
  194. #define CK_HelpMovePgUp 1013
  195. #define CK_HelpMoveHalfPgDn 1014
  196. #define CK_HelpMoveHalfPgUp 1015
  197. #define CK_HelpMoveTop 1016
  198. #define CK_HelpMoveBottom 1017
  199. /* common */
  200. #define CK_ShowCommandLine 2001
  201. #define CK_SelectCodepage 2002
  202. #define CK_StartExtMap1 2021
  203. #define CK_StartExtMap2 2022
  204. /* dialog */
  205. #define CK_DialogOK 3001
  206. #define CK_DialogCancel 3002
  207. #define CK_DialogPrevItem 3003
  208. #define CK_DialogNextItem 3004
  209. #define CK_DialogHelp 3005
  210. #define CK_DialogSuspend 3006
  211. #define CK_DialogRefresh 3007
  212. /* text fields */
  213. #define CK_InputBol 4001
  214. #define CK_InputEol 4002
  215. #define CK_InputMoveLeft 4003
  216. #define CK_InputWordLeft 4004
  217. #define CK_InputBackwardChar 4005
  218. #define CK_InputBackwardWord 4006
  219. #define CK_InputMoveRight 4007
  220. #define CK_InputWordRight 4008
  221. #define CK_InputForwardChar 4009
  222. #define CK_InputForwardWord 4010
  223. #define CK_InputBackwardDelete 4011
  224. #define CK_InputDeleteChar 4012
  225. #define CK_InputKillWord 4013
  226. #define CK_InputBackwardKillWord 4014
  227. #define CK_InputSetMark 4015
  228. #define CK_InputKillRegion 4016
  229. #define CK_InputKillSave 4017
  230. #define CK_InputYank 4018
  231. #define CK_InputCopyRegion 4019
  232. #define CK_InputKillLine 4020
  233. #define CK_InputHistoryPrev 4021
  234. #define CK_InputHistoryNext 4022
  235. #define CK_InputHistoryShow 4023
  236. #define CK_InputComplete 4024
  237. #define CK_InputPaste 4025
  238. #define CK_InputClearLine 4026
  239. #define CK_InputLeftHighlight 4027
  240. #define CK_InputRightHighlight 4028
  241. #define CK_InputWordLeftHighlight 4029
  242. #define CK_InputWordRightHighlight 4030
  243. #define CK_InputBolHighlight 4031
  244. #define CK_InputEolHighlight 4032
  245. /* listbox */
  246. #define CK_ListboxMoveUp 4500
  247. #define CK_ListboxMoveDown 4501
  248. #define CK_ListboxMoveHome 4502
  249. #define CK_ListboxMoveEnd 4503
  250. #define CK_ListboxMovePgUp 4504
  251. #define CK_ListboxMovePgDn 4505
  252. #define CK_ListboxDeleteItem 4506
  253. #define CK_ListboxDeleteAll 4507
  254. /* viewer */
  255. #define CK_ViewHelp 5001
  256. #define CK_ViewToggleWrapMode 5002
  257. #define CK_ViewToggleHexEditMode 5003
  258. #define CK_ViewToggleHexMode 5004
  259. #define CK_ViewGoto 5005
  260. #define CK_ViewHexEditSave 5006
  261. #define CK_ViewSearch 5007
  262. #define CK_ViewToggleMagicMode 5008
  263. #define CK_ViewToggleNroffMode 5009
  264. #define CK_ViewQuit 5010
  265. #define CK_ViewContinueSearch 5011
  266. #define CK_ViewGotoBookmark 5012
  267. #define CK_ViewNewBookmark 5013
  268. #define CK_ViewMoveUp 5014
  269. #define CK_ViewMoveDown 5015
  270. #define CK_ViewMoveLeft 5016
  271. #define CK_ViewMoveRight 5017
  272. #define CK_ViewMovePgDn 5018
  273. #define CK_ViewMovePgUp 5019
  274. #define CK_ViewMoveHalfPgDn 5020
  275. #define CK_ViewMoveHalfPgUp 5021
  276. #define CK_ViewMoveToBol 5022
  277. #define CK_ViewMoveToEol 5023
  278. #define CK_ViewNextFile 5024
  279. #define CK_ViewPrevFile 5025
  280. #define CK_ViewToggleRuler 5026
  281. #define CK_ViewToggleHexNavMode 5027
  282. #define CK_ViewMoveTop 5028
  283. #define CK_ViewMoveBottom 5029
  284. #define CK_ViewMoveLeft10 5030
  285. #define CK_ViewMoveRight10 5031
  286. /* tree */
  287. #define CK_TreeHelp 6001
  288. #define CK_TreeForget 6003
  289. #define CK_TreeToggleNav 6004
  290. #define CK_TreeCopy 6005
  291. #define CK_TreeMove 6006
  292. #define CK_TreeMake 6007
  293. #define CK_TreeMoveUp 6011
  294. #define CK_TreeMoveDown 6012
  295. #define CK_TreeMoveLeft 6013
  296. #define CK_TreeMoveRight 6014
  297. #define CK_TreeMoveHome 6015
  298. #define CK_TreeMoveEnd 6016
  299. #define CK_TreeMovePgUp 6017
  300. #define CK_TreeMovePgDn 6018
  301. #define CK_TreeOpen 6019
  302. #define CK_TreeRescan 6020
  303. #define CK_TreeStartSearch 6021
  304. #define CK_TreeRemove 6022
  305. /* main commands */
  306. #define CK_AddHotlist 7001
  307. #define CK_ChangeListingCmd 7002
  308. #define CK_ChmodCmd 7003
  309. #define CK_ChownAdvancedCmd 7004
  310. #define CK_ChownCmd 7005
  311. #define CK_CompareDirsCmd 7006
  312. #define CK_ConfigureBox 7007
  313. #define CK_ConfigureVfs 7008
  314. #define CK_ConfirmBox 7009
  315. #define CK_CopyCmd 7010
  316. #define CK_CopyCurrentPathname 7011
  317. #define CK_CopyCurrentReadlink 7012
  318. #define CK_CopyCurrentTagged 7013
  319. #define CK_CopyOtherPathname 7014
  320. #define CK_CopyOtherReadlink 7015
  321. #define CK_CopyOtherTagged 7016
  322. #define CK_DeleteCmd 7017
  323. #define CK_DirsizesCmd 7018
  324. #define CK_DisplayBitsBox 7019
  325. #define CK_EditCmd 7020
  326. #define CK_EditExtFileCmd 7021
  327. #define CK_EditFhlFileCmd 7022
  328. #define CK_EditMcMenuCmd 7023
  329. #define CK_EditSymlinkCmd 7024
  330. #define CK_EditSyntaxCmd 7025
  331. #define CK_EditUserMenuCmd 7026
  332. #define CK_ExternalPanelize 7027
  333. #define CK_FilterCmd 7028
  334. #define CK_FilteredViewCmd 7029
  335. #define CK_FindCmd 7030
  336. #define CK_FishlinkCmd 7031
  337. #define CK_FtplinkCmd 7032
  338. #define CK_HistoryCmd 7033
  339. #define CK_InfoCmd 7034
  340. #define CK_JobsCmd 7035
  341. #define CK_LayoutBox 7036
  342. #define CK_LearnKeys 7037
  343. #define CK_LinkCmd 7038
  344. #define CK_ListingCmd 7039
  345. #define CK_ListmodeCmd 7042
  346. #define CK_MenuLastSelectedCmd 7044
  347. #define CK_MkdirCmd 7045
  348. #define CK_QuickCdCmd 7047
  349. #define CK_QuickChdirCmd 7048
  350. #define CK_QuickViewCmd 7049
  351. #define CK_QuietQuitCmd 7050
  352. #define CK_QuitCmd 7051
  353. #define CK_RenameCmd 7052
  354. #define CK_RereadCmd 7053
  355. #define CK_ReselectVfs 7054
  356. #define CK_ReverseSelectionCmd 7055
  357. #define CK_SaveSetupCmd 7056
  358. #define CK_SelectCmd 7057
  359. #define CK_SingleDirsizeCmd 7058
  360. #define CK_SmblinkCmd 7059
  361. #define CK_SuspendCmd 7060
  362. #define CK_SwapCmd 7061
  363. #define CK_SymlinkCmd 7062
  364. #define CK_ToggleListingCmd 7063
  365. #define CK_ToggleShowHidden 7064
  366. #define CK_TreeCmd 7065
  367. #define CK_TreeBoxCmd 7066
  368. #define CK_UndeleteCmd 7067
  369. #define CK_UnselectCmd 7068
  370. #define CK_UserFileMenuCmd 7069
  371. #define CK_UserMenuCmd 7070
  372. #define CK_ViewCmd 7071
  373. #define CK_ViewFileCmd 7072
  374. #define CK_HelpCmd 7073
  375. #define CK_MenuCmd 7074
  376. #define CK_TogglePanelsSplit 7075
  377. #define CK_DiffViewCmd 7076
  378. #define CK_PanelOptionsBox 7077
  379. #define CK_RelativeSymlinkCmd 7078
  380. #define CK_DialogListCmd 7079
  381. #define CK_DialogNextCmd 7080
  382. #define CK_DialogPrevCmd 7081
  383. #define CK_EditForceInternalCmd 7082
  384. /* panels */
  385. #define CK_PanelChdirOtherPanel 8001
  386. #define CK_PanelChdirToReadlink 8002
  387. #define CK_PanelCmdCopyLocal 8003
  388. #define CK_PanelCmdDeleteLocal 8004
  389. #define CK_PanelCmdDoEnter 8005
  390. #define CK_PanelCmdEditNew 8006
  391. #define CK_PanelCmdRenameLocal 8007
  392. #define CK_PanelCmdReverseSelection 8008
  393. #define CK_PanelCmdSelect 8009
  394. #define CK_PanelCmdUnselect 8010
  395. #define CK_PanelCmdViewSimple 8011
  396. #define CK_PanelCtrlNextPage 8012
  397. #define CK_PanelCtrlPrevPage 8013
  398. #define CK_PanelDirectoryHistoryList 8014
  399. #define CK_PanelDirectoryHistoryNext 8015
  400. #define CK_PanelDirectoryHistoryPrev 8016
  401. #define CK_PanelGotoBottomFile 8017
  402. #define CK_PanelGotoMiddleFile 8018
  403. #define CK_PanelGotoTopFile 8019
  404. #define CK_PanelMarkFile 8020
  405. #define CK_PanelMarkFileUp 8021
  406. #define CK_PanelMarkFileDown 8022
  407. #define CK_PanelMoveDown 8023
  408. #define CK_PanelMoveEnd 8024
  409. #define CK_PanelMoveHome 8025
  410. #define CK_PanelMoveUp 8026
  411. #define CK_PanelMoveLeft 8027
  412. #define CK_PanelMoveRight 8028
  413. #define CK_PanelNextPage 8029
  414. #define CK_PanelPrevPage 8030
  415. #define CK_PanelSetPanelEncoding 8031
  416. #define CK_PanelStartSearch 8032
  417. #define CK_PanelStopSearch 8033
  418. #define CK_PanelSyncOtherPanel 8034
  419. #define CK_PanelToggleSortOrderNext 8035
  420. #define CK_PanelToggleSortOrderPrev 8036
  421. #define CK_PanelSelectSortOrder 8037
  422. #define CK_PanelReverseSort 8038
  423. #define CK_PanelSortOrderByName 8039
  424. #define CK_PanelSortOrderByExt 8040
  425. #define CK_PanelSortOrderBySize 8041
  426. #define CK_PanelSortOrderByMTime 8042
  427. /* diff viewer */
  428. #define CK_DiffDisplaySymbols 9001
  429. #define CK_DiffDisplayNumbers 9002
  430. #define CK_DiffFull 9003
  431. #define CK_DiffEqual 9004
  432. #define CK_DiffSplitMore 9005
  433. #define CK_DiffSplitLess 9006
  434. #define CK_DiffShowDiff 9008
  435. #define CK_DiffSetTab2 9009
  436. #define CK_DiffSetTab3 9010
  437. #define CK_DiffSetTab4 9011
  438. #define CK_DiffSetTab8 9012
  439. #define CK_DiffSwapPanel 9013
  440. #define CK_DiffRedo 9014
  441. #define CK_DiffNextHunk 9015
  442. #define CK_DiffPrevHunk 9016
  443. #define CK_DiffGoto 9017
  444. #define CK_DiffEditCurrent 9018
  445. #define CK_DiffEditOther 9019
  446. #define CK_DiffSearch 9020
  447. #define CK_DiffEOF 9021
  448. #define CK_DiffBOF 9022
  449. #define CK_DiffDown 9023
  450. #define CK_DiffUp 9024
  451. #define CK_DiffLeft 9025
  452. #define CK_DiffRight 9026
  453. #define CK_DiffQuickLeft 9027
  454. #define CK_DiffQuickRight 9028
  455. #define CK_DiffPageDown 9029
  456. #define CK_DiffPageUp 9030
  457. #define CK_DiffHome 9031
  458. #define CK_DiffEnd 9032
  459. #define CK_DiffQuit 9033
  460. #define CK_DiffHelp 9034
  461. #define CK_DiffMergeCurrentHunk 9035
  462. #define CK_DiffSave 9036
  463. #define CK_DiffContinueSearch 9037
  464. #define CK_DiffOptions 9038
  465. /*
  466. Process a block through a shell command: CK_Pipe_Block(i) executes shell_cmd[i].
  467. shell_cmd[i] must process the file ~/cooledit.block and output ~/cooledit.block
  468. which is then inserted into the text in place of the original block. shell_cmd[i] must
  469. also produce a file homedir/cooledit.error . If this file is not empty an error will
  470. have been assumed to have occured, and the block will not be replaced.
  471. TODO: bring up a viewer to display the error message instead of inserting
  472. it into the text, which is annoying.
  473. */
  474. #define CK_Pipe_Block(i) (1000+(i))
  475. #define SHELL_COMMANDS_i {"/edit.indent.rc", "/edit.spell.rc", /* and so on */ 0 }
  476. #define CK_Macro(i) (2000+(i))
  477. #define CK_Last_Macro CK_Macro(0x7FFF)
  478. /*** enums ***************************************************************************************/
  479. /*** structures declarations (and typedefs of structures)*****************************************/
  480. typedef struct name_keymap_t
  481. {
  482. const char *name;
  483. unsigned long val;
  484. } name_keymap_t;
  485. typedef struct key_config_t
  486. {
  487. time_t mtime; /* mtime at the moment we read config file */
  488. GArray *keymap;
  489. GArray *ext_keymap;
  490. gchar *labels[10];
  491. } key_config_t;
  492. /* The global keymaps are of this type */
  493. typedef struct global_keymap_t
  494. {
  495. long key;
  496. unsigned long command;
  497. char caption[KEYMAP_SHORTCUT_LENGTH];
  498. } global_keymap_t;
  499. /*** global variables defined in .c file *********************************************************/
  500. /*** declarations of public functions ************************************************************/
  501. void keybind_cmd_bind (GArray * keymap, const char *keybind, unsigned long action);
  502. unsigned long keybind_lookup_action (const char *name);
  503. const char *keybind_lookup_keymap_shortcut (const global_keymap_t * keymap, unsigned long action);
  504. unsigned long keybind_lookup_keymap_command (const global_keymap_t * keymap, long key);
  505. /*** inline functions ****************************************************************************/
  506. #endif /* MC__KEYBIND_H */