#define defgMouseWinMove                XK_Pointer_Button1, kfAlt, "Alt+Pointer_Button1"
#define defgMouseWinSize                XK_Pointer_Button3, kfAlt, "Alt+Pointer_Button3"
#define defgMouseWinRaise               XK_Pointer_Button1, kfCtrl+kfAlt, "Ctrl+Alt+Pointer_Button1"

#define defgKeyWinRaise                 XK_F1, kfAlt, "Alt+F1"
#define defgKeyWinOccupyAll             XK_F2, kfAlt, "Alt+F2"
#define defgKeyWinLower                 XK_F3, kfAlt, "Alt+F3"
#define defgKeyWinClose                 XK_F4, kfAlt, "Alt+F4"
#define defgKeyWinKill                  0, 0, ""
#define defgKeyWinRestore               XK_F5, kfAlt, "Alt+F5"
#define defgKeyWinNext                  XK_F6, kfAlt, "Alt+F6"
#define defgKeyWinPrev                  XK_F6, kfAlt+kfShift, "Alt+Shift+F6"
#define defgKeyWinMove                  XK_F7, kfAlt, "Alt+F7"
#define defgKeyWinSize                  XK_F8, kfAlt, "Alt+F8"
#define defgKeyWinMinimize              XK_F9, kfAlt, "Alt+F9"
#define defgKeyWinMaximize              XK_F10, kfAlt, "Alt+F10"
#define defgKeyWinMaximizeVert          XK_F10, kfAlt+kfShift, "Alt+Shift+F10"
#define defgKeyWinMaximizeHoriz         0, 0, ""
#define defgKeyWinFullscreen            XK_F11, kfAlt, "Alt+F11"
#define defgKeyWinHide                  XK_F12, kfAlt+kfShift, "Alt+Shift+F12"
#define defgKeyWinRollup                XK_F12, kfAlt, "Alt+F12"
#define defgKeyWinArrangeN              XK_KP_Up, kfCtrl+kfAlt, "Ctrl+Alt+KP_8"
#define defgKeyWinArrangeNE             XK_KP_Prior, kfCtrl+kfAlt, "Ctrl+Alt+KP_9"
#define defgKeyWinArrangeE              XK_KP_Right, kfCtrl+kfAlt, "Ctrl+Alt+KP_6"
#define defgKeyWinArrangeSE             XK_KP_Next, kfCtrl+kfAlt, "Ctrl+Alt+KP_3"
#define defgKeyWinArrangeS              XK_KP_Down, kfCtrl+kfAlt, "Ctrl+Alt+KP_2"
#define defgKeyWinArrangeSW             XK_KP_End, kfCtrl+kfAlt, "Ctrl+Alt+KP_1"
#define defgKeyWinArrangeW              XK_KP_Left, kfCtrl+kfAlt, "Ctrl+Alt+KP_4"
#define defgKeyWinArrangeNW             XK_KP_Home, kfCtrl+kfAlt, "Ctrl+Alt+KP_7"
#define defgKeyWinArrangeC              XK_KP_Begin, kfCtrl+kfAlt, "Ctrl+Alt+KP_5"
#define defgKeyWinSnapMoveN             XK_KP_Up, kfCtrl+kfAlt+kfShift, "Ctrl+Alt+Shift+KP_8"
#define defgKeyWinSnapMoveNE            XK_KP_Prior, kfCtrl+kfAlt+kfShift, "Ctrl+Alt+Shift+KP_9"
#define defgKeyWinSnapMoveE             XK_KP_Right, kfCtrl+kfAlt+kfShift, "Ctrl+Alt+Shift+KP_6"
#define defgKeyWinSnapMoveSE            XK_KP_Next, kfCtrl+kfAlt+kfShift, "Ctrl+Alt+Shift+KP_3"
#define defgKeyWinSnapMoveS             XK_KP_Down, kfCtrl+kfAlt+kfShift, "Ctrl+Alt+Shift+KP_2"
#define defgKeyWinSnapMoveSW            XK_KP_End, kfCtrl+kfAlt+kfShift, "Ctrl+Alt+Shift+KP_1"
#define defgKeyWinSnapMoveW             XK_KP_Left, kfCtrl+kfAlt+kfShift, "Ctrl+Alt+Shift+KP_4"
#define defgKeyWinSnapMoveNW            XK_KP_Home, kfCtrl+kfAlt+kfShift, "Ctrl+Alt+Shift+KP_7"
#define defgKeyWinSmartPlace            XK_KP_Begin, kfCtrl+kfAlt+kfShift, "Ctrl+Alt+Shift+KP_5"
#define defgKeySysSwitchNext            XK_Tab, kfAlt, "Alt+Tab"
#define defgKeySysSwitchLast            XK_Tab, kfAlt+kfShift, "Alt+Shift+Tab"
#define defgKeySysWinNext               XK_Escape, kfAlt, "Alt+Esc"
#define defgKeySysWinPrev               XK_Escape, kfAlt+kfShift, "Alt+Shift+Esc"
#define defgKeySysWinMenu               XK_Escape, kfShift, "Shift+Esc"
#define defgKeySysDialog                XK_Delete, kfAlt+kfCtrl, "Alt+Ctrl+Del"
#define defgKeySysMenu                  XK_Escape, kfCtrl, "Ctrl+Esc"
#define defgKeySysWindowList            XK_Escape, kfCtrl+kfAlt, "Alt+Ctrl+Esc"
#define defgKeySysWinListMenu           0, 0, ""
///#define defgKeySysRun                   'r', kfAlt+kfCtrl, "Alt+Ctrl+r"
#define defgKeySysAddressBar            ' ', kfAlt+kfCtrl, "Alt+Ctrl+Space"
#define defgKeyWinMenu                  ' ', kfAlt, "Alt+Space"
#define defgKeySysWorkspacePrev         XK_Left, kfAlt+kfCtrl, "Alt+Ctrl+Left"
#define defgKeySysWorkspaceNext         XK_Right, kfAlt+kfCtrl, "Alt+Ctrl+Right"
#define defgKeySysWorkspaceLast         XK_Down, kfAlt+kfCtrl, "Alt+Ctrl+Down"
#define defgKeySysWorkspacePrevTakeWin  XK_Left, kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+Left"
#define defgKeySysWorkspaceNextTakeWin  XK_Right, kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+Right"
#define defgKeySysWorkspaceLastTakeWin  XK_Down, kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+Down"
#define defgKeySysWorkspace1            '1', kfAlt+kfCtrl, "Alt+Ctrl+1"
#define defgKeySysWorkspace2            '2', kfAlt+kfCtrl, "Alt+Ctrl+2"
#define defgKeySysWorkspace3            '3', kfAlt+kfCtrl, "Alt+Ctrl+3"
#define defgKeySysWorkspace4            '4', kfAlt+kfCtrl, "Alt+Ctrl+4"
#define defgKeySysWorkspace5            '5', kfAlt+kfCtrl, "Alt+Ctrl+5"
#define defgKeySysWorkspace6            '6', kfAlt+kfCtrl, "Alt+Ctrl+6"
#define defgKeySysWorkspace7            '7', kfAlt+kfCtrl, "Alt+Ctrl+7"
#define defgKeySysWorkspace8            '8', kfAlt+kfCtrl, "Alt+Ctrl+8"
#define defgKeySysWorkspace9            '9', kfAlt+kfCtrl, "Alt+Ctrl+9"
#define defgKeySysWorkspace10           '0', kfAlt+kfCtrl, "Alt+Ctrl+0"
#define defgKeySysWorkspace11           '-', kfAlt+kfCtrl, "Alt+Ctrl+bracketleft"
#define defgKeySysWorkspace12           '=', kfAlt+kfCtrl, "Alt+Ctrl+bracketright"
#define defgKeySysWorkspace1TakeWin     '1', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+1"
#define defgKeySysWorkspace2TakeWin     '2', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+2"
#define defgKeySysWorkspace3TakeWin     '3', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+3"
#define defgKeySysWorkspace4TakeWin     '4', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+4"
#define defgKeySysWorkspace5TakeWin     '5', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+5"
#define defgKeySysWorkspace6TakeWin     '6', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+6"
#define defgKeySysWorkspace7TakeWin     '7', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+7"
#define defgKeySysWorkspace8TakeWin     '8', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+8"
#define defgKeySysWorkspace9TakeWin     '9', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+9"
#define defgKeySysWorkspace10TakeWin    '0', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+0"
#define defgKeySysWorkspace11TakeWin    '-', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+bracketleft"
#define defgKeySysWorkspace12TakeWin    '=', kfAlt+kfCtrl+kfShift, "Alt+Ctrl+Shift+bracketright"
#define defgKeySysTileVertical          XK_F2, kfAlt+kfShift, "Alt+Shift+F2"
#define defgKeySysTileHorizontal        XK_F3, kfAlt+kfShift, "Alt+Shift+F3"
#define defgKeySysCascade               XK_F4, kfAlt+kfShift, "Alt+Shift+F4"
#define defgKeySysArrange               XK_F5, kfAlt+kfShift, "Alt+Shift+F5"
#define defgKeySysArrangeIcons          XK_F6, kfAlt+kfShift, "Alt+Shift+F8"
#define defgKeySysMinimizeAll           XK_F9, kfAlt+kfShift, "Alt+Shift+F9"
#define defgKeySysHideAll               XK_F11, kfAlt+kfShift, "Alt+Shift+F11"
#define defgKeySysUndoArrange           XK_F7, kfAlt+kfShift, "Alt+Shift+F7"
#define defgKeySysShowDesktop           'd', kfAlt+kfCtrl, "Alt+Ctrl+d"
#define defgKeySysCollapseTaskBar       'h', kfAlt+kfCtrl, "Alt+Ctrl+h"

#ifdef NO_KEYBIND

#define IS_WMKEYx2(k,vm,k1,vm1,d) ((k) == (k1) && ((vm) == (vm1)))
#define IS_WMKEYx(k,vm,b) IS_WMKEYx2(k,vm,b)
#define IS_WMKEY(k,vm,b) IS_WMKEYx(k,vm,def##b)
#define GRAB_WMKEYx2(k,vm,d) grabVKey(k,vm)
#define GRAB_WMKEYx(k) GRAB_WMKEYx2(k)
#define GRAB_WMKEY(k) GRAB_WMKEYx(def##k)
#define KEY_NAMEx2(k,m,s) (s)
#define KEY_NAMEx(k) KEY_NAMEx2(k)
#define KEY_NAME(k) KEY_NAMEx(def##k)

#else

#ifdef CFGDEF
#define DEF_WMKEY(k) WMKey k = { def##k, true }
#else

#define DEF_WMKEY(k) extern WMKey k
#define IS_WMKEY(k,m,b) k == b.key && m == b.mod
#define GRAB_WMKEY(k) GRAB_WMKEYx(k);
#define GRAB_WMKEYx(k) grabVKey(k.key, k.mod)
#define KEY_NAME(k) (k.name ? k.name : "")
#endif

DEF_WMKEY(gMouseWinMove);
DEF_WMKEY(gMouseWinSize);
DEF_WMKEY(gMouseWinRaise);

DEF_WMKEY(gKeyWinRaise);
DEF_WMKEY(gKeyWinOccupyAll);
DEF_WMKEY(gKeyWinLower);
DEF_WMKEY(gKeyWinClose);
DEF_WMKEY(gKeyWinKill);
DEF_WMKEY(gKeyWinRestore);
DEF_WMKEY(gKeyWinPrev);
DEF_WMKEY(gKeyWinNext);
DEF_WMKEY(gKeyWinMove);
DEF_WMKEY(gKeyWinSize);
DEF_WMKEY(gKeyWinMinimize);
DEF_WMKEY(gKeyWinMaximize);
DEF_WMKEY(gKeyWinMaximizeVert);
DEF_WMKEY(gKeyWinMaximizeHoriz);
DEF_WMKEY(gKeyWinFullscreen);
DEF_WMKEY(gKeyWinHide);
DEF_WMKEY(gKeyWinRollup);
DEF_WMKEY(gKeyWinArrangeN);
DEF_WMKEY(gKeyWinArrangeNE);
DEF_WMKEY(gKeyWinArrangeE);
DEF_WMKEY(gKeyWinArrangeSE);
DEF_WMKEY(gKeyWinArrangeS);
DEF_WMKEY(gKeyWinArrangeSW);
DEF_WMKEY(gKeyWinArrangeW);
DEF_WMKEY(gKeyWinArrangeNW);
DEF_WMKEY(gKeyWinArrangeC);
DEF_WMKEY(gKeyWinSnapMoveN);
DEF_WMKEY(gKeyWinSnapMoveNE);
DEF_WMKEY(gKeyWinSnapMoveE);
DEF_WMKEY(gKeyWinSnapMoveSE);
DEF_WMKEY(gKeyWinSnapMoveS);
DEF_WMKEY(gKeyWinSnapMoveSW);
DEF_WMKEY(gKeyWinSnapMoveW);
DEF_WMKEY(gKeyWinSnapMoveNW);
DEF_WMKEY(gKeyWinSmartPlace);
DEF_WMKEY(gKeyWinMenu);
DEF_WMKEY(gKeySysSwitchNext);
DEF_WMKEY(gKeySysSwitchLast);
DEF_WMKEY(gKeySysWinNext);
DEF_WMKEY(gKeySysWinPrev);
DEF_WMKEY(gKeySysWinMenu);
DEF_WMKEY(gKeySysDialog);
DEF_WMKEY(gKeySysMenu);
DEF_WMKEY(gKeySysWindowList);
DEF_WMKEY(gKeySysWinListMenu);
///DEF_WMKEY(gKeySysRun);
DEF_WMKEY(gKeySysAddressBar);
DEF_WMKEY(gKeySysWorkspacePrev);
DEF_WMKEY(gKeySysWorkspaceNext);
DEF_WMKEY(gKeySysWorkspaceLast);
DEF_WMKEY(gKeySysWorkspacePrevTakeWin);
DEF_WMKEY(gKeySysWorkspaceNextTakeWin);
DEF_WMKEY(gKeySysWorkspaceLastTakeWin);
DEF_WMKEY(gKeySysWorkspace1);
DEF_WMKEY(gKeySysWorkspace2);
DEF_WMKEY(gKeySysWorkspace3);
DEF_WMKEY(gKeySysWorkspace4);
DEF_WMKEY(gKeySysWorkspace5);
DEF_WMKEY(gKeySysWorkspace6);
DEF_WMKEY(gKeySysWorkspace7);
DEF_WMKEY(gKeySysWorkspace8);
DEF_WMKEY(gKeySysWorkspace9);
DEF_WMKEY(gKeySysWorkspace10);
DEF_WMKEY(gKeySysWorkspace11);
DEF_WMKEY(gKeySysWorkspace12);
DEF_WMKEY(gKeySysWorkspace1TakeWin);
DEF_WMKEY(gKeySysWorkspace2TakeWin);
DEF_WMKEY(gKeySysWorkspace3TakeWin);
DEF_WMKEY(gKeySysWorkspace4TakeWin);
DEF_WMKEY(gKeySysWorkspace5TakeWin);
DEF_WMKEY(gKeySysWorkspace6TakeWin);
DEF_WMKEY(gKeySysWorkspace7TakeWin);
DEF_WMKEY(gKeySysWorkspace8TakeWin);
DEF_WMKEY(gKeySysWorkspace9TakeWin);
DEF_WMKEY(gKeySysWorkspace10TakeWin);
DEF_WMKEY(gKeySysWorkspace11TakeWin);
DEF_WMKEY(gKeySysWorkspace12TakeWin);
DEF_WMKEY(gKeySysTileVertical);
DEF_WMKEY(gKeySysTileHorizontal);
DEF_WMKEY(gKeySysCascade);
DEF_WMKEY(gKeySysArrange);
DEF_WMKEY(gKeySysArrangeIcons);
DEF_WMKEY(gKeySysMinimizeAll);
DEF_WMKEY(gKeySysHideAll);
DEF_WMKEY(gKeySysUndoArrange);
DEF_WMKEY(gKeySysShowDesktop);
DEF_WMKEY(gKeySysCollapseTaskBar);

#undef DEF_WMKEY

#endif
