all repos — fluxbox @ 15dfe811124e3f1be7d9a802290372427dae5afb

custom fork of the fluxbox windowmanager

added MacroCmd action, thanks Mathias Gumz
fluxgen fluxgen
commit

15dfe811124e3f1be7d9a802290372427dae5afb

parent

75b3606424a27dafeb0958450bffa841ae463c2d

1 files changed, 45 insertions(+), 1 deletions(-)

jump to
M src/FbCommandFactory.ccsrc/FbCommandFactory.cc

@@ -20,7 +20,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: FbCommandFactory.cc,v 1.17 2003/09/29 13:01:01 rathnor Exp $ +// $Id: FbCommandFactory.cc,v 1.18 2003/09/29 14:22:07 fluxgen Exp $ #include "FbCommandFactory.hh"

@@ -32,6 +32,10 @@ #include "fluxbox.hh"

#include "SimpleCommand.hh" #include "Screen.hh" +#include "FbTk/StringUtil.hh" +#include "FbTk/MacroCommand.hh" + +#include <string> #include <sstream> // autoregister this module to command parser

@@ -51,6 +55,7 @@ "iconfiy",

"killwindow", "leftworkspace", "lower", + "macrocmd", "maximize", "maximizehorizontal", "maximizevertical",

@@ -217,5 +222,44 @@ else if (command == "workspacemenu")

return new ShowWorkspaceMenuCmd(); else if (command == "setworkspacename") return new SetWorkspaceNameCmd(); + // + // special commands + // + else if (command == "macrocmd") { + std::string cmd; + int err= 0; + int parse_pos= 0; + FbTk::MacroCommand* macro= new FbTk::MacroCommand(); + + while (true) { + parse_pos+= err; + err= FbTk::StringUtil::getStringBetween(cmd, arguments.c_str() + parse_pos, + '{', '}', " \t\n", true); + if ( err > 0 ) { + std::string c, a; + std::string::size_type first_pos = FbTk::StringUtil::removeFirstWhitespace(cmd); + std::string::size_type second_pos= cmd.find_first_of(" \t", first_pos); + if (second_pos != std::string::npos) { + a= cmd.substr(second_pos); + FbTk::StringUtil::removeFirstWhitespace(a); + cmd.erase(second_pos); + } + c= FbTk::StringUtil::toLower(cmd); + + FbTk::Command* fbcmd= stringToCommand(c,a); + if ( fbcmd ) { + FbTk::RefCount<FbTk::Command> rfbcmd(fbcmd); + macro->add(rfbcmd); + } + } + else + break; + } + + if ( macro->size() > 0 ) + return macro; + + delete macro; + } return 0; }