keybind.h 20 KB

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