keybind.h 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  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. /* keymap sections */
  8. #define KEYMAP_SECTION_MAIN "main"
  9. #define KEYMAP_SECTION_MAIN_EXT "main:xmap"
  10. #define KEYMAP_SECTION_PANEL "panel"
  11. #define KEYMAP_SECTION_DIALOG "dialog"
  12. #define KEYMAP_SECTION_MENU "menu"
  13. #define KEYMAP_SECTION_INPUT "input"
  14. #define KEYMAP_SECTION_LISTBOX "listbox"
  15. #define KEYMAP_SECTION_TREE "tree"
  16. #define KEYMAP_SECTION_HELP "help"
  17. #define KEYMAP_SECTION_EDITOR "editor"
  18. #define KEYMAP_SECTION_EDITOR_EXT "editor:xmap"
  19. #define KEYMAP_SECTION_VIEWER "viewer"
  20. #define KEYMAP_SECTION_VIEWER_HEX "viewer:hex"
  21. #define KEYMAP_SECTION_DIFFVIEWER "diffviewer"
  22. #define KEYMAP_SHORTCUT_LENGTH 32 /* FIXME: is 32 bytes enough for shortcut? */
  23. #define CK_PipeBlock(i) (10000+(i))
  24. #define CK_Macro(i) (20000+(i))
  25. #define CK_MacroLast CK_Macro(0x7FFF)
  26. /*** enums ***************************************************************************************/
  27. enum
  28. {
  29. /* special commands */
  30. CK_InsertChar = -1L,
  31. CK_IgnoreKey = 0L,
  32. /* common */
  33. CK_Enter = 1L,
  34. CK_ChangePanel,
  35. CK_Up,
  36. CK_Down,
  37. CK_Left,
  38. CK_Right,
  39. CK_Home,
  40. CK_End,
  41. CK_LeftQuick,
  42. CK_RightQuick,
  43. CK_PageUp,
  44. CK_PageDown,
  45. CK_HalfPageUp,
  46. CK_HalfPageDown,
  47. CK_Top,
  48. CK_Bottom,
  49. CK_TopOnScreen,
  50. CK_MiddleOnScreen,
  51. CK_BottomOnScreen,
  52. CK_WordLeft,
  53. CK_WordRight,
  54. CK_Copy,
  55. CK_Move,
  56. CK_Delete,
  57. CK_MakeDir,
  58. CK_ChangeMode,
  59. CK_ChangeOwn,
  60. CK_ChangeOwnAdvanced,
  61. CK_Remove,
  62. CK_BackSpace,
  63. CK_Redo,
  64. CK_Clear,
  65. CK_Menu,
  66. CK_MenuLastSelected,
  67. CK_UserMenu,
  68. CK_EditUserMenu,
  69. CK_Search,
  70. CK_SearchContinue,
  71. CK_Replace,
  72. CK_ReplaceContinue,
  73. CK_SearchStop,
  74. CK_Help,
  75. CK_Edit,
  76. CK_EditNew,
  77. CK_Shell,
  78. CK_SelectCodepage,
  79. CK_EditorViewerHistory,
  80. CK_History,
  81. CK_HistoryNext,
  82. CK_HistoryPrev,
  83. CK_Complete,
  84. CK_Save,
  85. CK_SaveAs,
  86. CK_Goto,
  87. CK_Reread,
  88. CK_Refresh,
  89. CK_Suspend,
  90. CK_Swap,
  91. CK_Mark,
  92. CK_HotList,
  93. CK_ScreenList,
  94. CK_ScreenNext,
  95. CK_ScreenPrev,
  96. CK_FilePrev,
  97. CK_FileNext,
  98. CK_DeleteToHome,
  99. CK_DeleteToEnd,
  100. CK_DeleteToWordBegin,
  101. CK_DeleteToWordEnd,
  102. CK_ShowNumbers,
  103. CK_Store,
  104. CK_Cut,
  105. CK_Paste,
  106. CK_MarkLeft,
  107. CK_MarkRight,
  108. CK_MarkUp,
  109. CK_MarkDown,
  110. CK_MarkToWordBegin,
  111. CK_MarkToWordEnd,
  112. CK_MarkToHome,
  113. CK_MarkToEnd,
  114. CK_ToggleNavigation,
  115. CK_Sort,
  116. CK_Options,
  117. CK_LearnKeys,
  118. CK_Bookmark,
  119. CK_Quit,
  120. CK_QuitQuiet,
  121. /* C-x or similar */
  122. CK_ExtendedKeyMap,
  123. /* main commands */
  124. CK_EditForceInternal = 100L,
  125. CK_View,
  126. CK_ViewRaw,
  127. CK_ViewFile,
  128. CK_ViewFiltered,
  129. CK_Find,
  130. CK_DirSize,
  131. CK_HotListAdd,
  132. CK_SetupListingFormat,
  133. CK_CompareDirs,
  134. CK_OptionsVfs,
  135. CK_OptionsConfirm,
  136. CK_PutCurrentLink,
  137. CK_PutOtherLink,
  138. CK_OptionsDisplayBits,
  139. CK_EditExtensionsFile,
  140. CK_EditFileHighlightFile,
  141. CK_LinkSymbolicEdit,
  142. CK_ExternalPanelize,
  143. CK_Filter,
  144. CK_ConnectFish,
  145. CK_ConnectFtp,
  146. CK_ConnectSftp,
  147. CK_ConnectSmb,
  148. CK_PanelInfo,
  149. CK_Jobs,
  150. CK_OptionsLayout,
  151. CK_OptionsAppearance,
  152. CK_Link,
  153. CK_PanelListing,
  154. CK_ListMode,
  155. CK_CdQuick,
  156. CK_PanelQuickView,
  157. CK_VfsList,
  158. CK_SaveSetup,
  159. CK_LinkSymbolic,
  160. CK_ShowHidden,
  161. CK_PanelTree,
  162. CK_Tree,
  163. CK_Undelete,
  164. CK_SplitVertHoriz,
  165. CK_SplitEqual,
  166. CK_SplitMore,
  167. CK_SplitLess,
  168. CK_CompareFiles,
  169. CK_OptionsPanel,
  170. CK_LinkSymbolicRelative,
  171. CK_PutCurrentPath,
  172. CK_PutOtherPath,
  173. CK_PutCurrentSelected,
  174. CK_PutCurrentFullSelected,
  175. CK_PutCurrentTagged,
  176. CK_PutOtherTagged,
  177. CK_Select,
  178. CK_Unselect,
  179. CK_SelectExt,
  180. CK_SelectInvert,
  181. /* panels */
  182. CK_PanelOtherCd = 200L,
  183. CK_PanelOtherCdLink,
  184. CK_Panelize,
  185. CK_CopySingle,
  186. CK_MoveSingle,
  187. CK_DeleteSingle,
  188. CK_CdChild,
  189. CK_CdParent,
  190. CK_CdParentSmart,
  191. CK_PanelOtherSync,
  192. CK_SortNext,
  193. CK_SortPrev,
  194. CK_SortReverse,
  195. CK_SortByName,
  196. CK_SortByExt,
  197. CK_SortBySize,
  198. CK_SortByMTime,
  199. CK_ScrollLeft,
  200. CK_ScrollRight,
  201. CK_CycleListingFormat,
  202. /* dialog */
  203. CK_Ok = 300L,
  204. CK_Cancel,
  205. /* input */
  206. CK_Yank = 350L,
  207. /* help */
  208. CK_Index = 400L,
  209. CK_Back,
  210. CK_LinkNext,
  211. CK_LinkPrev,
  212. CK_NodeNext,
  213. CK_NodePrev,
  214. /* tree */
  215. CK_Forget = 450L,
  216. /* editor */
  217. /* cursor movements */
  218. CK_Tab = 500L,
  219. CK_Undo,
  220. CK_ScrollUp,
  221. CK_ScrollDown,
  222. CK_Return,
  223. CK_ParagraphUp,
  224. CK_ParagraphDown,
  225. /* file commands */
  226. CK_EditFile,
  227. CK_InsertFile,
  228. CK_EditSyntaxFile,
  229. CK_Close,
  230. /* block commands */
  231. CK_BlockSave,
  232. CK_BlockShiftLeft,
  233. CK_BlockShiftRight,
  234. CK_DeleteLine,
  235. /* bookmarks */
  236. CK_BookmarkFlush,
  237. CK_BookmarkNext,
  238. CK_BookmarkPrev,
  239. /* mark commands */
  240. CK_MarkColumn,
  241. CK_MarkWord,
  242. CK_MarkLine,
  243. CK_MarkAll,
  244. CK_Unmark,
  245. CK_MarkPageUp,
  246. CK_MarkPageDown,
  247. CK_MarkToFileBegin,
  248. CK_MarkToFileEnd,
  249. CK_MarkToPageBegin,
  250. CK_MarkToPageEnd,
  251. CK_MarkScrollUp,
  252. CK_MarkScrollDown,
  253. CK_MarkParagraphUp,
  254. CK_MarkParagraphDown,
  255. /* column mark commands */
  256. CK_MarkColumnPageUp,
  257. CK_MarkColumnPageDown,
  258. CK_MarkColumnLeft,
  259. CK_MarkColumnRight,
  260. CK_MarkColumnUp,
  261. CK_MarkColumnDown,
  262. CK_MarkColumnScrollUp,
  263. CK_MarkColumnScrollDown,
  264. CK_MarkColumnParagraphUp,
  265. CK_MarkColumnParagraphDown,
  266. /* macros */
  267. CK_MacroStartRecord,
  268. CK_MacroStopRecord,
  269. CK_MacroStartStopRecord,
  270. CK_MacroDelete,
  271. CK_RepeatStartRecord,
  272. CK_RepeatStopRecord,
  273. CK_RepeatStartStopRecord,
  274. /* window commands */
  275. CK_WindowMove,
  276. CK_WindowResize,
  277. CK_WindowFullscreen,
  278. CK_WindowList,
  279. CK_WindowNext,
  280. CK_WindowPrev,
  281. /* misc commands */
  282. CK_SpellCheck,
  283. CK_SpellCheckCurrentWord,
  284. CK_SpellCheckSelectLang,
  285. CK_InsertOverwrite,
  286. CK_ParagraphFormat,
  287. CK_MatchBracket,
  288. CK_OptionsSaveMode,
  289. CK_About,
  290. CK_ShowMargin,
  291. CK_ShowTabTws,
  292. CK_SyntaxOnOff,
  293. CK_SyntaxChoose,
  294. CK_InsertLiteral,
  295. CK_ExternalCommand,
  296. CK_Date,
  297. CK_Mail,
  298. /* viewer */
  299. CK_WrapMode = 600L,
  300. CK_MagicMode,
  301. CK_NroffMode,
  302. CK_HexMode,
  303. CK_HexEditMode,
  304. CK_BookmarkGoto,
  305. CK_Ruler,
  306. CK_SearchForward,
  307. CK_SearchBackward,
  308. CK_SearchForwardContinue,
  309. CK_SearchBackwardContinue,
  310. CK_SearchOppositeContinue,
  311. /* diff viewer */
  312. CK_ShowSymbols = 700L,
  313. CK_SplitFull,
  314. CK_Tab2,
  315. CK_Tab3,
  316. CK_Tab4,
  317. CK_Tab8,
  318. CK_HunkNext,
  319. CK_HunkPrev,
  320. CK_EditOther,
  321. CK_Merge,
  322. CK_MergeOther
  323. };
  324. /*** structures declarations (and typedefs of structures)*****************************************/
  325. typedef struct name_keymap_t
  326. {
  327. const char *name;
  328. long val;
  329. } name_keymap_t;
  330. typedef struct key_config_t
  331. {
  332. time_t mtime; /* mtime at the moment we read config file */
  333. GArray *keymap;
  334. GArray *ext_keymap;
  335. gchar *labels[10];
  336. } key_config_t;
  337. /* The global keymaps are of this type */
  338. typedef struct global_keymap_t
  339. {
  340. long key;
  341. long command;
  342. char caption[KEYMAP_SHORTCUT_LENGTH];
  343. } global_keymap_t;
  344. /*** global variables defined in .c file *********************************************************/
  345. /*** declarations of public functions ************************************************************/
  346. void keybind_cmd_bind (GArray * keymap, const char *keybind, long action);
  347. long keybind_lookup_action (const char *name);
  348. const char *keybind_lookup_actionname (long action);
  349. const char *keybind_lookup_keymap_shortcut (const global_keymap_t * keymap, long action);
  350. long keybind_lookup_keymap_command (const global_keymap_t * keymap, long key);
  351. /*** inline functions ****************************************************************************/
  352. #endif /* MC__KEYBIND_H */