diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 343a6a7427..7ae1a68311 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -6613,6 +6613,7 @@ inline void gcode_M999() { * T0-T3: Switch tool, usually switching extruders * * F[mm/min] Set the movement feedrate + * S1 Don't move the tool in XY after change */ inline void gcode_T(uint8_t tmp_extruder) { if (tmp_extruder >= EXTRUDERS) { @@ -6639,8 +6640,9 @@ inline void gcode_T(uint8_t tmp_extruder) { #if HOTENDS > 1 if (tmp_extruder != active_extruder) { + bool no_move = code_seen('S') && code_value_bool(); // Save current position to return to after applying extruder offset - set_destination_to_current(); + if (!no_move) set_destination_to_current(); #if ENABLED(DUAL_X_CARRIAGE) if (dual_x_carriage_mode == DXC_AUTO_PARK_MODE && IsRunning() && (delayed_move_time || current_position[X_AXIS] != x_home_pos(active_extruder))) { @@ -6744,7 +6746,7 @@ inline void gcode_T(uint8_t tmp_extruder) { #endif // Move to the "old position" (move the extruder into place) - if (IsRunning()) prepare_move_to_destination(); + if (!no_move && IsRunning()) prepare_move_to_destination(); } // (tmp_extruder != active_extruder)