diff --git a/Wrappers.cs b/Wrappers.cs index 443994a7424d5794aaec28165b6d009bdc8e39cc..e24681f90b5631e32f7598396b508fec88d306a4 100644 --- a/Wrappers.cs +++ b/Wrappers.cs @@ -40,8 +40,33 @@ abstract partial class StatusBar if(section.Contains("_color")) module = new WrapperColor(module, section.Mandatory("_color").AsColor()); - if(section.Contains("_exec")) - module = new WrapperExec(module, section.Mandatory("_exec").AsString(), MouseButton.Left, 0); + foreach(var opt in section) + { + MouseButton? button = null; + Modifiers modifiers = 0; + if(opt.KeyAsValue().Tokens()[0] == "_exec") + { + opt.Use(); + foreach(var t in opt.KeyAsValue().Tokens()[1..]) + { + void setButton(MouseButton _button) + { + if(button != null) + throw new ConfigMistake(t, "Duplicit button definition."); + button = _button; + } + if(t=="left") setButton(MouseButton.Left); else + if(t=="right") setButton(MouseButton.Right); else + if(t=="middle") setButton(MouseButton.Middle); else + if(t=="ctrl" || t=="control") modifiers |= Modifiers.Control; else + if(t=="shift") modifiers |= Modifiers.Shift; else + if(t=="alt") modifiers |= Modifiers.Alt; else + if(t=="super" || t=="win" || t=="windows") modifiers |= Modifiers.Super; else + throw new ConfigMistake(t, $"No such modifiers or mouse key \"{t.AsString()}\"."); + } + module = new WrapperExec(module, opt.AsString(), button ?? MouseButton.Left, modifiers); + } + } module.Init(parrent, section); return module; diff --git a/sample.conf b/sample.conf index 5549686368705d00975d059da7cb327214a92a34..4e9906b99297ac4c68665ce8821998ea4b51a9b8 100644 --- a/sample.conf +++ b/sample.conf @@ -306,6 +306,11 @@ _default_color = red # <color> # Set color if module don't set any +#exec [KEY (left (default)/right/middle)] [MODIFIERS (shift/ctlr/alt/super) ...] +_exec right super shift = osdc "Super+Shift+Right pressed" +# <string> +# Command to run + # Parsers: # ========