diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2020-02-12 20:34:20 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2020-02-12 20:42:03 -0500 |
commit | 9818055ac3fa0accdf117a9523a93abe0b2073ea (patch) | |
tree | fb8553c043a488817de93f62a03bf3b61837a7f7 /klippy | |
parent | 0cfab84e1accf144a3844b602fcfb3e437ca3ef0 (diff) | |
download | kutter-9818055ac3fa0accdf117a9523a93abe0b2073ea.tar.gz kutter-9818055ac3fa0accdf117a9523a93abe0b2073ea.tar.xz kutter-9818055ac3fa0accdf117a9523a93abe0b2073ea.zip |
gcode_macro: Support overriding of builtin g-code commands
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r-- | klippy/extras/gcode_macro.py | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/klippy/extras/gcode_macro.py b/klippy/extras/gcode_macro.py index e5e69c7e..2d4ebc75 100644 --- a/klippy/extras/gcode_macro.py +++ b/klippy/extras/gcode_macro.py @@ -92,11 +92,22 @@ class GCodeMacro: def __init__(self, config): name = config.get_name().split()[1] self.alias = name.upper() - printer = config.get_printer() + self.printer = printer = config.get_printer() gcode_macro = printer.try_load_module(config, 'gcode_macro') self.template = gcode_macro.load_template(config, 'gcode') self.gcode = printer.lookup_object('gcode') - self.gcode.register_command(self.alias, self.cmd, desc=self.cmd_desc) + self.rename_existing = config.get("rename_existing", None) + if self.rename_existing is not None: + if (self.gcode.is_traditional_gcode(self.alias) + != self.gcode.is_traditional_gcode(self.rename_existing)): + raise config.error( + "G-Code macro rename of different types ('%s' vs '%s')" + % (self.alias, self.rename_existing)) + printer.register_event_handler("klippy:connect", + self.handle_connect) + else: + self.gcode.register_command(self.alias, self.cmd, + desc=self.cmd_desc) self.gcode.register_mux_command("SET_GCODE_VARIABLE", "MACRO", name, self.cmd_SET_GCODE_VARIABLE, desc=self.cmd_SET_GCODE_VARIABLE_help) @@ -114,6 +125,16 @@ class GCodeMacro: raise config.error( "Option '%s' in section '%s' is not a valid literal" % ( option, config.get_name())) + def handle_connect(self): + prev_cmd = self.gcode.register_command(self.alias, None) + if prev_cmd is None: + raise self.printer.config_error( + "Existing command '%s' not found in gcode_macro rename" + % (self.alias,)) + pdesc = "Renamed builtin of '%s'" % (self.alias,) + self.gcode.register_command(self.rename_existing, prev_cmd, desc=pdesc) + self.gcode.register_command(self.alias, self.cmd, desc=self.cmd_desc) + return dict(self.variables) def get_status(self, eventtime): return dict(self.variables) cmd_SET_GCODE_VARIABLE_help = "Set the value of a G-Code macro variable" |