12 parser::parser(keytree *kt)
13 : _kt(kt), _mask(0), _action(Action::noaction), _key(""), _arg("")
19 // nothing to see here. move along.
22 void parser::parse(string rc_file)
24 extern int yyparse(void *);
27 yyin = fopen(rc_file.c_str(), "r");
35 void parser::setAction(string act)
39 Action::ActionType act;
42 { "noaction", Action::noaction },
43 { "execute", Action::execute },
44 { "iconify", Action::iconify },
45 { "raise", Action::raise },
46 { "lower", Action::lower },
47 { "close", Action::close },
48 { "toggleshade", Action::toggleshade },
49 { "toggleomnipresent", Action::toggleomnipresent },
50 { "moveWindowUp", Action::moveWindowUp },
51 { "moveWindowDown", Action::moveWindowDown },
52 { "moveWindowLeft", Action::moveWindowLeft },
53 { "moveWindowRight", Action::moveWindowRight },
54 { "resizeWindowWidth", Action::resizeWindowWidth },
55 { "resizeWindowHeight", Action::resizeWindowHeight },
56 { "toggleMaximizeFull", Action::toggleMaximizeFull },
57 { "toggleMaximizeVertical", Action::toggleMaximizeVertical },
58 { "toggleMaximizeHorizontal", Action::toggleMaximizeHorizontal },
59 { "sendToWorkspace", Action::sendToWorkspace },
60 { "nextWindow", Action::nextWindow },
61 { "prevWindow", Action::prevWindow },
62 { "nextWindowOnAllWorkspaces", Action::nextWindowOnAllWorkspaces },
63 { "prevWindowOnAllWorkspaces", Action::prevWindowOnAllWorkspaces },
64 { "nextWindowOnAllScreens", Action::nextWindowOnAllScreens },
65 { "prevWindowOnAllScreens", Action::prevWindowOnAllScreens },
66 { "nextWindowOfClass", Action::nextWindowOfClass },
67 { "prevWindowOfClass", Action::prevWindowOfClass },
68 { "nextWindowOfClassOnAllWorkspaces", Action::nextWindowOfClassOnAllWorkspaces },
69 { "prevWindowOfClassOnAllWorkspaces", Action::prevWindowOfClassOnAllWorkspaces },
70 { "changeWorkspace", Action::changeWorkspace },
71 { "nextWorkspace", Action::nextWorkspace },
72 { "prevWorkspace", Action::prevWorkspace },
73 { "nextScreen", Action::nextScreen },
74 { "prevScreen", Action::prevScreen },
75 { "showRootMenu", Action::showRootMenu },
76 { "showWorkspaceMenu", Action::showWorkspaceMenu },
77 { "stringChain", Action::stringChain },
78 { "keyChain", Action::keyChain },
79 { "numberChain", Action::numberChain },
80 { "cancel", Action::cancel },
81 { "", Action::noaction }
86 for (int i = 0; actions[i].str != ""; ++i) {
87 if (actions[i].str == act) {
88 _action = actions[i].act;
94 _action = Action::noaction;
97 void parser::addModifier(string mod)
104 { "Mod1", Mod1Mask },
105 { "Mod2", Mod2Mask },
106 { "Mod3", Mod3Mask },
107 { "Control", ControlMask },
108 { "Shift", ShiftMask },
112 for (int i = 0; modifiers[i].str != ""; ++i) {
113 if (modifiers[i].str == mod)
114 _mask |= modifiers[i].mask;
118 void parser::endAction()
120 _kt->addAction(_action, _mask, _key, _arg);
124 void parser::startChain()
126 _kt->advanceOnNewNode();
131 void parser::endChain()
137 void parser::setChainBinding()
139 if (_mask != 0 && _key != "") {
140 _kt->setCurrentNodeProps(Action::noaction, _mask, _key, "");
148 _action = Action::noaction;