From 36e66bdd9ff22ddfdcaa36ac8a9b9448c78ca44c Mon Sep 17 00:00:00 2001
From: ellensp <530024+ellensp@users.noreply.github.com>
Date: Sat, 18 Nov 2023 09:11:59 +1300
Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Define=20MarlinUI=20axis=20moves?=
 =?UTF-8?q?=20with=20lists=20(#26344)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
---
 Marlin/Configuration.h                        | 10 ++--
 Marlin/Configuration_adv.h                    | 16 ++++++-
 Marlin/src/inc/Changes.h                      |  2 +
 Marlin/src/inc/Conditionals_adv.h             |  5 ++
 .../lcd/extui/anycubic_chiron/chiron_tft.cpp  | 11 ++---
 Marlin/src/lcd/language/language_an.h         |  6 +--
 Marlin/src/lcd/language/language_bg.h         |  6 +--
 Marlin/src/lcd/language/language_ca.h         |  6 +--
 Marlin/src/lcd/language/language_cz.h         |  6 +--
 Marlin/src/lcd/language/language_da.h         |  6 +--
 Marlin/src/lcd/language/language_de.h         | 10 +---
 Marlin/src/lcd/language/language_el.h         |  5 --
 Marlin/src/lcd/language/language_el_gr.h      |  5 --
 Marlin/src/lcd/language/language_en.h         | 13 +-----
 Marlin/src/lcd/language/language_es.h         |  6 +--
 Marlin/src/lcd/language/language_eu.h         |  6 +--
 Marlin/src/lcd/language/language_fi.h         |  6 +--
 Marlin/src/lcd/language/language_fr.h         | 11 +----
 Marlin/src/lcd/language/language_fr_na.h      | 11 +----
 Marlin/src/lcd/language/language_gl.h         |  6 +--
 Marlin/src/lcd/language/language_hr.h         |  6 +--
 Marlin/src/lcd/language/language_hu.h         | 11 +----
 Marlin/src/lcd/language/language_it.h         | 11 +----
 Marlin/src/lcd/language/language_jp_kana.h    |  8 +---
 Marlin/src/lcd/language/language_nl.h         |  5 +-
 Marlin/src/lcd/language/language_pl.h         |  8 +---
 Marlin/src/lcd/language/language_pt.h         |  5 +-
 Marlin/src/lcd/language/language_pt_br.h      |  5 +-
 Marlin/src/lcd/language/language_ro.h         |  5 +-
 Marlin/src/lcd/language/language_ru.h         | 11 +----
 Marlin/src/lcd/language/language_sk.h         | 11 +----
 Marlin/src/lcd/language/language_sv.h         |  8 +---
 Marlin/src/lcd/language/language_tr.h         | 11 +----
 Marlin/src/lcd/language/language_uk.h         |  5 +-
 Marlin/src/lcd/language/language_vi.h         |  6 +--
 Marlin/src/lcd/language/language_zh_CN.h      |  4 --
 Marlin/src/lcd/language/language_zh_TW.h      |  8 +---
 Marlin/src/lcd/menu/menu_motion.cpp           | 46 +++++++++----------
 Marlin/src/lcd/menu/menu_probe_offset.cpp     |  4 +-
 Marlin/src/lcd/menu/menu_x_twist.cpp          |  4 +-
 buildroot/tests/teensy35                      |  7 ++-
 41 files changed, 93 insertions(+), 249 deletions(-)

diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 3509078407..6374760db5 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -950,7 +950,7 @@
   // Distance between bed and nozzle Z home position
   #define DELTA_HEIGHT 250.00             // (mm) Get this value from G33 auto calibrate
 
-  #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
+  #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // (mm) Get these values from G33 auto calibrate
 
   // Horizontal distance bridged by diagonal push rods when effector is centered.
   #define DELTA_RADIUS 124.0              // (mm) Get this value from G33 auto calibrate
@@ -958,11 +958,11 @@
   // Trim adjustments for individual towers
   // tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
   // measured in degrees anticlockwise looking from above the printer
-  #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
+  #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // (mm) Get these values from G33 auto calibrate
 
-  // Delta radius and diagonal rod adjustments (mm)
-  //#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
-  //#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
+  // Delta radius and diagonal rod adjustments
+  //#define DELTA_RADIUS_TRIM_TOWER       { 0.0, 0.0, 0.0 } // (mm)
+  //#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 } // (mm)
 #endif
 
 // @section scara
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 0eddf05713..13205acfdd 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -1518,8 +1518,20 @@
     //#define LCD_PRINTER_INFO_IS_BOOTSCREEN // Show bootscreen(s) instead of Printer Info pages
   #endif
 
-  // Add 50/100mm moves to MarlinUI even with a smaller bed
-  //#define LARGE_MOVE_ITEMS
+  /**
+   * MarlinUI "Move Axis" menu distances. Comma-separated list.
+   * Values are displayed as-defined, so always use plain numbers here.
+   * Axis moves <= 1/2 the axis length and Extruder moves <= EXTRUDE_MAXLENGTH
+   * will be shown in the move submenus.
+   */
+  #define MANUAL_MOVE_DISTANCE_MM                    10, 1.0, 0.1  // (mm)
+  //#define MANUAL_MOVE_DISTANCE_MM         100, 50, 10, 1.0, 0.1  // (mm)
+  //#define MANUAL_MOVE_DISTANCE_MM    500, 100, 50, 10, 1.0, 0.1  // (mm)
+
+  // Manual move distances for INCH_MODE_SUPPORT
+  #define MANUAL_MOVE_DISTANCE_IN                          0.100, 0.010, 0.001  // (in)
+  //#define MANUAL_MOVE_DISTANCE_IN          1.000, 0.500, 0.100, 0.010, 0.001  // (in)
+  //#define MANUAL_MOVE_DISTANCE_IN   5.000, 1.000, 0.500, 0.100, 0.010, 0.001  // (in)
 
   // BACK menu items keep the highlight at the top
   //#define TURBO_BACK_MENU_ITEM
diff --git a/Marlin/src/inc/Changes.h b/Marlin/src/inc/Changes.h
index 3e80fe70cd..f951d76ee7 100644
--- a/Marlin/src/inc/Changes.h
+++ b/Marlin/src/inc/Changes.h
@@ -667,6 +667,8 @@
   #error "BTT_MINI_12864_V1 is now BTT_MINI_12864."
 #elif defined(Z_PROBE_OFFSET_RANGE_MIN) || defined(Z_PROBE_OFFSET_RANGE_MAX)
   #error "Z_PROBE_OFFSET_RANGE_(MIN|MAX) is now PROBE_OFFSET_Z(MIN|MAX)."
+#elif defined(LARGE_MOVE_ITEMS)
+  #error "LARGE_MOVE_ITEMS is obsolete. Instead define MANUAL_MOVE_DISTANCE_MM and MANUAL_MOVE_DISTANCE_IN."
 #endif
 
 // L64xx stepper drivers have been removed
diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h
index b56fa7d3f0..9e4cc0d046 100644
--- a/Marlin/src/inc/Conditionals_adv.h
+++ b/Marlin/src/inc/Conditionals_adv.h
@@ -1303,3 +1303,8 @@
 #if defined(REDUNDANT_PART_COOLING_FAN) && !defined(NUM_REDUNDANT_FANS)
   #define NUM_REDUNDANT_FANS 1
 #endif
+
+// Clean up if only mm units are used
+#if DISABLED(INCH_MODE_SUPPORT)
+  #undef MANUAL_MOVE_DISTANCE_IN
+#endif
diff --git a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp
index 6c8c3aa3a5..df0c4df30d 100644
--- a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp
+++ b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp
@@ -433,14 +433,9 @@ void ChironTFT::sendFileList(int8_t startindex) {
 }
 
 void ChironTFT::selectFile() {
-  if (panel_type <= AC_panel_new) {
-    strncpy(selectedfile, panel_command + 4, command_len - 3);
-    selectedfile[command_len - 4] = '\0';
-  }
-  else {
-    strncpy(selectedfile, panel_command + 4, command_len - 4);
-    selectedfile[command_len - 5] = '\0';
-  }
+  const size_t namelen = command_len - 4 + (panel_type <= AC_panel_new);
+  strncpy(selectedfile, panel_command + 4, namelen);
+  selectedfile[namelen] = '\0';
   #if ACDEBUG(AC_FILE)
     DEBUG_ECHOLNPGM(" Selected File: ", selectedfile);
   #endif
diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h
index d1f7a1d391..110bac2c9a 100644
--- a/Marlin/src/lcd/language/language_an.h
+++ b/Marlin/src/lcd/language/language_an.h
@@ -87,11 +87,7 @@ namespace LanguageNarrow_an {
   LSTR MSG_MOVE_E                         = _UxGT("Extrusor");
   LSTR MSG_MOVE_EN                        = _UxGT("Extrusor *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Mover $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Mover 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Mover 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Mover 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Mover 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Mover 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Mover $in");
   LSTR MSG_SPEED                          = _UxGT("Velocidat");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Base Z");
   LSTR MSG_NOZZLE                         = _UxGT("Boquilla");
diff --git a/Marlin/src/lcd/language/language_bg.h b/Marlin/src/lcd/language/language_bg.h
index ed76dfa48d..f86cf08dff 100644
--- a/Marlin/src/lcd/language/language_bg.h
+++ b/Marlin/src/lcd/language/language_bg.h
@@ -76,11 +76,7 @@ namespace LanguageNarrow_bg {
   LSTR MSG_MOVE_E                         = _UxGT("Екструдер");
   LSTR MSG_MOVE_EN                        = _UxGT("Екструдер *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Премести с $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Премести с 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Премести с 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Премести с 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Премести с 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Премести с 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Премести с $in");
   LSTR MSG_SPEED                          = _UxGT("Скорост");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Bed Z");
   LSTR MSG_NOZZLE                         = " " LCD_STR_THERMOMETER _UxGT(" Дюза");
diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h
index b35ab4084d..37f885540d 100644
--- a/Marlin/src/lcd/language/language_ca.h
+++ b/Marlin/src/lcd/language/language_ca.h
@@ -87,11 +87,7 @@ namespace LanguageNarrow_ca {
   LSTR MSG_MOVE_E                         = _UxGT("Extrusor");
   LSTR MSG_MOVE_EN                        = _UxGT("Extrusor *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Mou $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Mou 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Mou 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Mou 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Mou 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Mou 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Mou $in");
   LSTR MSG_SPEED                          = _UxGT("Velocitat");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Llit Z");
   LSTR MSG_NOZZLE                         = _UxGT("Nozzle");
diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h
index ac1c81580d..5324d56ff2 100644
--- a/Marlin/src/lcd/language/language_cz.h
+++ b/Marlin/src/lcd/language/language_cz.h
@@ -231,11 +231,7 @@ namespace LanguageNarrow_cz {
   LSTR MSG_MOVE_EN                        = _UxGT("Extrudér *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hotend je studený");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Posunout o $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Posunout o 0,1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Posunout o 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Posunout o 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Posunout o 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Posunout o 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Posunout o $in");
   LSTR MSG_SPEED                          = _UxGT("Rychlost");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Výška podl.");
   LSTR MSG_NOZZLE                         = _UxGT("Tryska");
diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h
index 89466f89e5..612e95e986 100644
--- a/Marlin/src/lcd/language/language_da.h
+++ b/Marlin/src/lcd/language/language_da.h
@@ -78,11 +78,7 @@ namespace LanguageNarrow_da {
   LSTR MSG_MOVE_E                         = _UxGT("Flyt E");
   LSTR MSG_MOVE_EN                        = _UxGT("Flyt *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Flyt $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Flyt 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Flyt 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Flyt 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Flyt 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Flyt 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Flyt $in");
   LSTR MSG_SPEED                          = _UxGT("Hastighed");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Plade Z");
   LSTR MSG_NOZZLE                         = _UxGT("Dyse");
diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h
index beb878631f..ea08f2191f 100644
--- a/Marlin/src/lcd/language/language_de.h
+++ b/Marlin/src/lcd/language/language_de.h
@@ -289,15 +289,7 @@ namespace LanguageNarrow_de {
   LSTR MSG_MOVE_EN                        = _UxGT("Bewege Extruder *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hotend zu kalt");
   LSTR MSG_MOVE_N_MM                      = _UxGT(" $ mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("  0,1  mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("  1,0  mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT(" 10,0  mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT(" 50,0  mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("100,0  mm");
-  LSTR MSG_MOVE_0001IN                    = _UxGT("0.001 in");
-  LSTR MSG_MOVE_001IN                     = _UxGT("0.010 in");
-  LSTR MSG_MOVE_01IN                      = _UxGT("0.100 in");
-  LSTR MSG_MOVE_1IN                       = _UxGT("1.000 in");
+  LSTR MSG_MOVE_N_IN                      = _UxGT(" $ in");
   LSTR MSG_SPEED                          = _UxGT("Geschw.");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Bett Z");
   LSTR MSG_NOZZLE                         = _UxGT("Düse");
diff --git a/Marlin/src/lcd/language/language_el.h b/Marlin/src/lcd/language/language_el.h
index 6809b72256..ea9d4f43e7 100644
--- a/Marlin/src/lcd/language/language_el.h
+++ b/Marlin/src/lcd/language/language_el.h
@@ -96,11 +96,6 @@ namespace LanguageNarrow_el {
   LSTR MSG_MOVE_E                         = _UxGT("Εξωθητής");
   LSTR MSG_MOVE_EN                        = _UxGT("Εξωθητής *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Μετακίνηση $μμ");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Μετακίνηση 0,1 μμ");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Μετακίνηση 1 μμ");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Μετακίνηση 10 μμ");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Μετακίνηση 50 μμ");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Μετακίνηση 100 μμ");
   LSTR MSG_SPEED                          = _UxGT("Ταχύτητα");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Επ. Εκτύπωσης Z");
   LSTR MSG_NOZZLE                         = _UxGT("Ακροφύσιο");
diff --git a/Marlin/src/lcd/language/language_el_gr.h b/Marlin/src/lcd/language/language_el_gr.h
index 65d6c194e0..b8d0ceccf8 100644
--- a/Marlin/src/lcd/language/language_el_gr.h
+++ b/Marlin/src/lcd/language/language_el_gr.h
@@ -85,11 +85,6 @@ namespace LanguageNarrow_el_gr {
   LSTR MSG_MOVE_E                         = _UxGT("Εξωθητήρας");
   LSTR MSG_MOVE_EN                        = _UxGT("Εξωθητήρας *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Μετακίνηση $μμ");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Μετακίνηση 0,1 μμ");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Μετακίνηση 1 μμ");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Μετακίνηση 10 μμ");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Μετακίνηση 50 μμ");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Μετακίνηση 100 μμ");
   LSTR MSG_SPEED                          = _UxGT("Ταχύτητα");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Κλίνη Z");
   LSTR MSG_NOZZLE                         = _UxGT("Ακροφύσιο");
diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h
index 1abad83555..03625098ff 100644
--- a/Marlin/src/lcd/language/language_en.h
+++ b/Marlin/src/lcd/language/language_en.h
@@ -316,17 +316,8 @@ namespace LanguageNarrow_en {
   LSTR MSG_MOVE_E                         = _UxGT("Move Extruder");
   LSTR MSG_MOVE_EN                        = _UxGT("Move *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hotend too cold");
-  LSTR MSG_MOVE_N_MM                      = _UxGT("Move $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Move 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Move 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Move 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Move 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Move 100mm");
-  LSTR MSG_MOVE_0001IN                    = _UxGT("Move 0.001in");
-  LSTR MSG_MOVE_001IN                     = _UxGT("Move 0.01in");
-  LSTR MSG_MOVE_01IN                      = _UxGT("Move 0.1in");
-  LSTR MSG_MOVE_05IN                      = _UxGT("Move 0.5in");
-  LSTR MSG_MOVE_1IN                       = _UxGT("Move 1.0in");
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Move $ mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Move $ in");
   LSTR MSG_LIVE_MOVE                      = _UxGT("Live Move");
   LSTR MSG_SPEED                          = _UxGT("Speed");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Bed Z");
diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h
index 1c2269d8d9..147ce7abcf 100644
--- a/Marlin/src/lcd/language/language_es.h
+++ b/Marlin/src/lcd/language/language_es.h
@@ -229,11 +229,7 @@ namespace LanguageNarrow_es {
   LSTR MSG_MOVE_EN                        = _UxGT("Extrusor *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hotend muy frio");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Mover $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Mover 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Mover 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Mover 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Mover 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Mover 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Mover $in");
   LSTR MSG_SPEED                          = _UxGT("Velocidad");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Cama Z");
   LSTR MSG_NOZZLE                         = _UxGT("Boquilla");
diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h
index 5d46b14d50..4ab4bd96dd 100644
--- a/Marlin/src/lcd/language/language_eu.h
+++ b/Marlin/src/lcd/language/language_eu.h
@@ -138,11 +138,7 @@ namespace LanguageNarrow_eu {
   LSTR MSG_MOVE_E                         = _UxGT("Estrusorea");
   LSTR MSG_MOVE_EN                        = _UxGT("Estrusorea *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Mugitu $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Mugitu 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Mugitu 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Mugitu 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Mugitu 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Mugitu 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Mugitu $in");
   LSTR MSG_SPEED                          = _UxGT("Abiadura");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Z Ohea");
   LSTR MSG_NOZZLE                         = _UxGT("Pita");
diff --git a/Marlin/src/lcd/language/language_fi.h b/Marlin/src/lcd/language/language_fi.h
index 9e87bb7578..466ac19fe0 100644
--- a/Marlin/src/lcd/language/language_fi.h
+++ b/Marlin/src/lcd/language/language_fi.h
@@ -73,11 +73,7 @@ namespace LanguageNarrow_fi {
   LSTR MSG_MOVE_E                         = _UxGT("Extruder");
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Liikuta $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Liikuta 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Liikuta 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Liikuta 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Liikuta 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Liikuta 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Liikuta $in");
   LSTR MSG_SPEED                          = _UxGT("Nopeus");
   LSTR MSG_NOZZLE                         = _UxGT("Suutin");
   LSTR MSG_NOZZLE_N                       = _UxGT("Suutin ~");
diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h
index 65b5bbc4b8..79c06b2eca 100644
--- a/Marlin/src/lcd/language/language_fr.h
+++ b/Marlin/src/lcd/language/language_fr.h
@@ -233,16 +233,7 @@ namespace LanguageNarrow_fr {
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Buse trop froide");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Déplacer $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Déplacer 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Déplacer 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Déplacer 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Déplacer 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Déplacer 100mm");
-  LSTR MSG_MOVE_0001IN                    = _UxGT("Déplacer 0.001\"");
-  LSTR MSG_MOVE_001IN                     = _UxGT("Déplacer 0.01\"");
-  LSTR MSG_MOVE_01IN                      = _UxGT("Déplacer 0.1\"");
-  LSTR MSG_MOVE_05IN                      = _UxGT("Déplacer 0.5\"");
-  LSTR MSG_MOVE_1IN                       = _UxGT("Déplacer 1\"");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Déplacer $in");
   LSTR MSG_SPEED                          = _UxGT("Vitesse");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Lit Z");
   LSTR MSG_NOZZLE                         = _UxGT("Buse");
diff --git a/Marlin/src/lcd/language/language_fr_na.h b/Marlin/src/lcd/language/language_fr_na.h
index 6ad854f14c..f125ce7f6b 100644
--- a/Marlin/src/lcd/language/language_fr_na.h
+++ b/Marlin/src/lcd/language/language_fr_na.h
@@ -233,16 +233,7 @@ namespace LanguageNarrow_fr_na {
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Buse trop froide");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Deplacer $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Deplacer 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Deplacer 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Deplacer 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Deplacer 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Deplacer 100mm");
-  LSTR MSG_MOVE_0001IN                    = _UxGT("Deplacer 0.001\"");
-  LSTR MSG_MOVE_001IN                     = _UxGT("Deplacer 0.01\"");
-  LSTR MSG_MOVE_01IN                      = _UxGT("Deplacer 0.1\"");
-  LSTR MSG_MOVE_05IN                      = _UxGT("Deplacer 0.5\"");
-  LSTR MSG_MOVE_1IN                       = _UxGT("Deplacer 1\"");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Deplacer $in");
   LSTR MSG_SPEED                          = _UxGT("Vitesse");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Lit Z");
   LSTR MSG_NOZZLE                         = _UxGT("Buse");
diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h
index f1798748d4..fa4d189de0 100644
--- a/Marlin/src/lcd/language/language_gl.h
+++ b/Marlin/src/lcd/language/language_gl.h
@@ -226,11 +226,7 @@ namespace LanguageNarrow_gl {
   LSTR MSG_MOVE_EN                        = _UxGT("Extrusor *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Bico moi frío");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Mover $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Mover 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Mover 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Mover 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Mover 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Mover 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Mover $in");
   LSTR MSG_SPEED                          = _UxGT("Velocidade");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Cama Z");
   LSTR MSG_NOZZLE                         = _UxGT("Bico");
diff --git a/Marlin/src/lcd/language/language_hr.h b/Marlin/src/lcd/language/language_hr.h
index 678d9c290a..f1e020efaf 100644
--- a/Marlin/src/lcd/language/language_hr.h
+++ b/Marlin/src/lcd/language/language_hr.h
@@ -83,11 +83,7 @@ namespace LanguageNarrow_hr {
   LSTR MSG_MOVE_E                         = _UxGT("Miči E");
   LSTR MSG_MOVE_EN                        = _UxGT("Miči *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Miči $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Miči 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Miči 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Miči 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Miči 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Miči 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Miči $in");
   LSTR MSG_SPEED                          = _UxGT("Brzina");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Bed Z");
   LSTR MSG_NOZZLE                         = _UxGT("Dizna");
diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h
index a371fc5a43..7d4e632bb8 100644
--- a/Marlin/src/lcd/language/language_hu.h
+++ b/Marlin/src/lcd/language/language_hu.h
@@ -261,16 +261,7 @@ namespace LanguageNarrow_hu {
   LSTR MSG_MOVE_EN                        = _UxGT("Adagoló *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("A fej túl hideg");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Mozgás $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Mozgás 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Mozgás 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Mozgás 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Mozgás 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Mozgás 100mm");
-  LSTR MSG_MOVE_0001IN                    = _UxGT("Mozgás 0.025mm");
-  LSTR MSG_MOVE_001IN                     = _UxGT("Mozgás 0.254mm");
-  LSTR MSG_MOVE_01IN                      = _UxGT("Mozgás 2.54mm");
-  LSTR MSG_MOVE_05IN                      = _UxGT("Mozgás 12.7mm");
-  LSTR MSG_MOVE_1IN                       = _UxGT("Mozgáá 25.4mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Mozgás $in");
   LSTR MSG_SPEED                          = _UxGT("Sebesség");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Z ágy");
   LSTR MSG_NOZZLE                         = _UxGT("Fej");
diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h
index 61a572b3b3..2c78a79a3d 100644
--- a/Marlin/src/lcd/language/language_it.h
+++ b/Marlin/src/lcd/language/language_it.h
@@ -310,16 +310,7 @@ namespace LanguageNarrow_it {
   LSTR MSG_MOVE_EN                        = _UxGT("Estrusore *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Ugello freddo");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Muovi di $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Muovi di 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Muovi di 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Muovi di 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Muovi di 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Muovi di 100mm");
-  LSTR MSG_MOVE_0001IN                    = _UxGT("Muovi di 0.001\"");
-  LSTR MSG_MOVE_001IN                     = _UxGT("Muovi di 0.01\"");
-  LSTR MSG_MOVE_01IN                      = _UxGT("Muovi di 0.1\"");
-  LSTR MSG_MOVE_05IN                      = _UxGT("Muovi di 0.5\"");
-  LSTR MSG_MOVE_1IN                       = _UxGT("Muovi di 1\"");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Muovi di $in");
   LSTR MSG_LIVE_MOVE                      = _UxGT("Modalità Live");
   LSTR MSG_SPEED                          = _UxGT("Velocità");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Piatto Z");
diff --git a/Marlin/src/lcd/language/language_jp_kana.h b/Marlin/src/lcd/language/language_jp_kana.h
index e75ebeb123..a87fcf6509 100644
--- a/Marlin/src/lcd/language/language_jp_kana.h
+++ b/Marlin/src/lcd/language/language_jp_kana.h
@@ -95,12 +95,8 @@ namespace LanguageNarrow_jp_kana {
   LSTR MSG_MOVE_N                         = _UxGT("@ジク イドウ"); // "Move @"
   LSTR MSG_MOVE_E                         = _UxGT("エクストルーダー"); // "Extruder"
   LSTR MSG_MOVE_EN                        = _UxGT("* エクストルーダー"); // "En"
-  LSTR MSG_MOVE_N_MM                      = _UxGT("$mm イドウ"); // "Move 0.025mm"
-  LSTR MSG_MOVE_01MM                      = _UxGT("0.1mm イドウ"); // "Move 0.1mm"
-  LSTR MSG_MOVE_1MM                       = _UxGT("  1mm イドウ"); // "Move 1mm"
-  LSTR MSG_MOVE_10MM                      = _UxGT(" 10mm イドウ"); // "Move 10mm"
-  LSTR MSG_MOVE_50MM                      = _UxGT(" 50mm イドウ"); // "Move 50mm"
-  LSTR MSG_MOVE_100MM                     = _UxGT(" 100mm イドウ"); // "Move 100mm"
+  LSTR MSG_MOVE_N_MM                      = _UxGT("$mm イドウ"); // "Move $mm"
+  LSTR MSG_MOVE_N_IN                      = _UxGT("$in イドウ"); // "Move $in"
   LSTR MSG_SPEED                          = _UxGT("ソクド"); // "Speed"
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Zオフセット"); // "Bed Z"
   LSTR MSG_NOZZLE                         = _UxGT("ノズル"); // "Nozzle"
diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h
index 215e5b83ba..72a1668515 100644
--- a/Marlin/src/lcd/language/language_nl.h
+++ b/Marlin/src/lcd/language/language_nl.h
@@ -88,10 +88,7 @@ namespace LanguageNarrow_nl {
   LSTR MSG_MOVE_E                         = _UxGT("Extruder");
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Verplaats $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Verplaats 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Verplaats 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Verplaats 10mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Verplaats 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Verplaats $in");
   LSTR MSG_SPEED                          = _UxGT("Snelheid");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Bed Z");
   LSTR MSG_NOZZLE                         = _UxGT("Nozzle");
diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h
index f9f60ef37c..5fbf0c040a 100644
--- a/Marlin/src/lcd/language/language_pl.h
+++ b/Marlin/src/lcd/language/language_pl.h
@@ -240,13 +240,7 @@ namespace LanguageNarrow_pl {
   LSTR MSG_MOVE_EN                        = _UxGT("Ekstruzja (os E) *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Dysza za zimna");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Przesuń co $ mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Przesuń co .1 mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Przesuń co 1 mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Przesuń co 10 mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Przesuń co 100 mm");
-  LSTR MSG_MOVE_0001IN                    = _UxGT("Przesuń co 0.001 cala");
-  LSTR MSG_MOVE_001IN                     = _UxGT("Przesuń co 0.01 cala");
-  LSTR MSG_MOVE_01IN                      = _UxGT("Przesuń co 0.1 cala");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Przesuń co $ in");
   LSTR MSG_SPEED                          = _UxGT("Predkość");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Stół Z");
   LSTR MSG_NOZZLE                         = _UxGT("Dysza");
diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h
index 3a2329f8ae..2bf0b92a67 100644
--- a/Marlin/src/lcd/language/language_pt.h
+++ b/Marlin/src/lcd/language/language_pt.h
@@ -82,10 +82,7 @@ namespace LanguageNarrow_pt {
   LSTR MSG_MOVE_E                         = _UxGT("Mover Extrusor");
   LSTR MSG_MOVE_EN                        = _UxGT("Mover Extrusor *");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Mover $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Mover 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Mover 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Mover 10mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Mover 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Mover $in");
   LSTR MSG_SPEED                          = _UxGT("Velocidade");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Base Z");
   LSTR MSG_NOZZLE                         = " " LCD_STR_THERMOMETER _UxGT(" Bico");
diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h
index 30459454b7..3dd4c1c9ee 100644
--- a/Marlin/src/lcd/language/language_pt_br.h
+++ b/Marlin/src/lcd/language/language_pt_br.h
@@ -212,10 +212,7 @@ namespace LanguageNarrow_pt_br {
   LSTR MSG_MOVE_EN                        = _UxGT("Mover Extrusor *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Extrus. mto fria");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Mover $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Mover 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Mover 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Mover 10mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Mover 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Mover $in");
   LSTR MSG_SPEED                          = _UxGT("Velocidade");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Base Z");
   LSTR MSG_NOZZLE                         = _UxGT("Bocal");
diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h
index a2a915dd77..e24da73a19 100644
--- a/Marlin/src/lcd/language/language_ro.h
+++ b/Marlin/src/lcd/language/language_ro.h
@@ -225,10 +225,7 @@ namespace LanguageNarrow_ro {
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Capat Prea Rece");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Move $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Move 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Move 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Move 10mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Move 100mm");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Move $in");
   LSTR MSG_SPEED                          = _UxGT("Speed");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Bed Z");
   LSTR MSG_NOZZLE                         = _UxGT("Nozzle");
diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h
index 789af09ab5..ad0e0d3c95 100644
--- a/Marlin/src/lcd/language/language_ru.h
+++ b/Marlin/src/lcd/language/language_ru.h
@@ -264,15 +264,7 @@ namespace LanguageNarrow_ru {
   LSTR MSG_MOVE_EN                          = _UxGT("Экструдер *");
   LSTR MSG_HOTEND_TOO_COLD                  = _UxGT("Сопло не нагрето");
   LSTR MSG_MOVE_N_MM                        = _UxGT("Движение $мм");
-  LSTR MSG_MOVE_01MM                        = _UxGT("Движение 0.1мм");
-  LSTR MSG_MOVE_1MM                         = _UxGT("Движение 1мм");
-  LSTR MSG_MOVE_10MM                        = _UxGT("Движение 10мм");
-  LSTR MSG_MOVE_100MM                       = _UxGT("Движение 100mm");
-  LSTR MSG_MOVE_0001IN                      = _UxGT("Движение 0.001in");
-  LSTR MSG_MOVE_001IN                       = _UxGT("Движение 0.01in");
-  LSTR MSG_MOVE_01IN                        = _UxGT("Движение 0.1in");
-  LSTR MSG_MOVE_05IN                        = _UxGT("Движение 0.5in");
-  LSTR MSG_MOVE_1IN                         = _UxGT("Движение 1.0in");
+  LSTR MSG_MOVE_N_IN                        = _UxGT("Движение $in");
   LSTR MSG_SPEED                            = _UxGT("Скорость");
   LSTR MSG_MESH_Z_OFFSET                    = _UxGT("Z стола");
   LSTR MSG_NOZZLE                           = _UxGT("Сопло, ") LCD_STR_DEGREE _UxGT("C");
@@ -709,7 +701,6 @@ namespace LanguageNarrow_ru {
   LSTR MSG_UBL_MESH_INVALID                 = _UxGT("Негодная сетка");
   LSTR MSG_UBL_INVALID_SLOT                 = _UxGT("Сперва выберите слот сетки");
   LSTR MSG_MESH_ACTIVE                      = _UxGT("Сетка %i активна");
-  LSTR MSG_MOVE_50MM                        = _UxGT("Двигать 50mm");
   LSTR MSG_LIVE_MOVE                        = _UxGT("Живое перемещение");
   LSTR MSG_CUTTER                           = _UxGT("Резак");
   LSTR MSG_PID_CYCLE                        = _UxGT("Циклы PID");
diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h
index fa35352307..b90dfd038a 100644
--- a/Marlin/src/lcd/language/language_sk.h
+++ b/Marlin/src/lcd/language/language_sk.h
@@ -306,16 +306,7 @@ namespace LanguageNarrow_sk {
   LSTR MSG_MOVE_EN                        = _UxGT("Extrudér *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hotend je studený");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Posunúť o $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Posunúť o 0,1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Posunúť o 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Posunúť o 10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("Posunúť o 50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Posunúť o 100mm");
-  LSTR MSG_MOVE_0001IN                    = _UxGT("Posunúť o 0,001in");
-  LSTR MSG_MOVE_001IN                     = _UxGT("Posunúť o 0,01in");
-  LSTR MSG_MOVE_01IN                      = _UxGT("Posunúť o 0,1in");
-  LSTR MSG_MOVE_05IN                      = _UxGT("Posunúť o 0,5in");
-  LSTR MSG_MOVE_1IN                       = _UxGT("Posunúť o 1,0in");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Posunúť o $in");
   LSTR MSG_LIVE_MOVE                      = _UxGT("Živý pohyb");
   LSTR MSG_SPEED                          = _UxGT("Rýchlosť");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Výška podl.");
diff --git a/Marlin/src/lcd/language/language_sv.h b/Marlin/src/lcd/language/language_sv.h
index 9820882b8d..5f74f299bf 100644
--- a/Marlin/src/lcd/language/language_sv.h
+++ b/Marlin/src/lcd/language/language_sv.h
@@ -252,13 +252,7 @@ namespace LanguageNarrow_sv {
   LSTR MSG_MOVE_EN                        = _UxGT("Extruder *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Hetände för kall");
   LSTR MSG_MOVE_N_MM                      = _UxGT("Flytta $mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("Flytta 0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("Flytta 1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("Flytta 10mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("Flytta 100mm");
-  LSTR MSG_MOVE_0001IN                    = _UxGT("Flytta 0.001tum");
-  LSTR MSG_MOVE_001IN                     = _UxGT("Flytta 0.01tum");
-  LSTR MSG_MOVE_01IN                      = _UxGT("Flytta 0.1tum");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Flytta $in");
   LSTR MSG_SPEED                          = _UxGT("Hastighet");
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Bädd Z");
   LSTR MSG_NOZZLE                         = _UxGT("Munstycke");
diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h
index e912885ee8..cdff56f89b 100644
--- a/Marlin/src/lcd/language/language_tr.h
+++ b/Marlin/src/lcd/language/language_tr.h
@@ -292,16 +292,7 @@ namespace LanguageNarrow_tr {
   LSTR MSG_MOVE_EN                        = _UxGT("Ekstruder *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Nozul Çok Soğuk");
   LSTR MSG_MOVE_N_MM                      = _UxGT("$mm");
-  LSTR MSG_MOVE_01MM                      = _UxGT("0.1mm");
-  LSTR MSG_MOVE_1MM                       = _UxGT("1mm");
-  LSTR MSG_MOVE_10MM                      = _UxGT("10mm");
-  LSTR MSG_MOVE_50MM                      = _UxGT("50mm");
-  LSTR MSG_MOVE_100MM                     = _UxGT("100mm");
-  LSTR MSG_MOVE_0001IN                    = _UxGT("0.001in");
-  LSTR MSG_MOVE_001IN                     = _UxGT("0.01in");
-  LSTR MSG_MOVE_01IN                      = _UxGT("0.1in");
-  LSTR MSG_MOVE_05IN                      = _UxGT("0.5in");
-  LSTR MSG_MOVE_1IN                       = _UxGT("1.0in");
+  LSTR MSG_MOVE_N_IN                      = _UxGT("$in");
   LSTR MSG_SPEED                          = _UxGT("Hız");
   LSTR MSG_BED_Z                          = _UxGT("Z Mesafesi");
   LSTR MSG_NOZZLE                         = _UxGT("Nozul");
diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h
index 626eb8979e..4a5e14b6d4 100644
--- a/Marlin/src/lcd/language/language_uk.h
+++ b/Marlin/src/lcd/language/language_uk.h
@@ -263,10 +263,7 @@ namespace LanguageNarrow_uk {
   LSTR MSG_MOVE_EN                          = _UxGT("Екструдер *");
   LSTR MSG_HOTEND_TOO_COLD                  = _UxGT("Сопло дуже холодне");
   LSTR MSG_MOVE_N_MM                        = _UxGT("Рух $мм");
-  LSTR MSG_MOVE_01MM                        = _UxGT("Рух 0.1мм");
-  LSTR MSG_MOVE_1MM                         = _UxGT("Рух 1мм");
-  LSTR MSG_MOVE_10MM                        = _UxGT("Рух 10мм");
-  LSTR MSG_MOVE_100MM                       = _UxGT("Рух 100mm");
+  LSTR MSG_MOVE_N_IN                        = _UxGT("Рух $in");
   LSTR MSG_SPEED                            = _UxGT("Швидкість");
   LSTR MSG_MESH_Z_OFFSET                    = _UxGT("Z Столу");
   LSTR MSG_NOZZLE                           = _UxGT("Сопло, ") LCD_STR_DEGREE _UxGT("C");
diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h
index 038c6864bc..5006ad827f 100644
--- a/Marlin/src/lcd/language/language_vi.h
+++ b/Marlin/src/lcd/language/language_vi.h
@@ -200,10 +200,8 @@ namespace LanguageNarrow_vi {
   LSTR MSG_MOVE_E                         = _UxGT("Máy đùn");                              // Extruder
   LSTR MSG_MOVE_EN                        = _UxGT("Máy đùn *");
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("Đầu nóng quá lạnh");                    // Hotend too cold
-  LSTR MSG_MOVE_01MM                      = _UxGT("Di chuyển 0.1mm");                      // Move 0.1mm
-  LSTR MSG_MOVE_1MM                       = _UxGT("Di chuyển 1mm");                        // Move 1mm
-  LSTR MSG_MOVE_10MM                      = _UxGT("Di chuyển 10mm");                       // Move 10mm
-  LSTR MSG_MOVE_100MM                     = _UxGT("Di chuyển 100mm");                      // Move 100mm
+  LSTR MSG_MOVE_N_MM                      = _UxGT("Di chuyển $mm");                        // Move $mm
+  LSTR MSG_MOVE_N_IN                      = _UxGT("Di chuyển $in");                        // Move $in
   LSTR MSG_SPEED                          = _UxGT("Tốc độ");                               // Speed
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("Z Bàn");
   LSTR MSG_NOZZLE                         = _UxGT("Đầu phun");                             // Nozzle
diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h
index 7432044cdb..d86e2c43e0 100644
--- a/Marlin/src/lcd/language/language_zh_CN.h
+++ b/Marlin/src/lcd/language/language_zh_CN.h
@@ -225,10 +225,6 @@ namespace LanguageNarrow_zh_CN {
   LSTR MSG_MOVE_EN                        = _UxGT("挤出机 *"); // "Extruder"
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("热端太冷");
   LSTR MSG_MOVE_N_MM                      = _UxGT("移动 $ mm"); // "Move 0.025mm"
-  LSTR MSG_MOVE_01MM                      = _UxGT("移动 0.1 mm"); // "Move 0.1mm"
-  LSTR MSG_MOVE_1MM                       = _UxGT("移动 1 mm"); // "Move 1mm"
-  LSTR MSG_MOVE_10MM                      = _UxGT("移动 10 mm"); // "Move 10mm"
-  LSTR MSG_MOVE_100MM                     = _UxGT("移动 100 mm"); // "Move 100mm"
   LSTR MSG_SPEED                          = _UxGT("速率"); // "Speed"
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("热床Z"); // "Bed Z"
   LSTR MSG_NOZZLE                         = _UxGT("喷嘴"); // "Nozzle" 噴嘴
diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h
index 9106487b14..14f37079c7 100644
--- a/Marlin/src/lcd/language/language_zh_TW.h
+++ b/Marlin/src/lcd/language/language_zh_TW.h
@@ -220,12 +220,8 @@ namespace LanguageNarrow_zh_TW {
   LSTR MSG_MOVE_E                         = _UxGT("擠出機"); // "Extruder"
   LSTR MSG_MOVE_EN                        = _UxGT("擠出機 *"); // "Extruder *"
   LSTR MSG_HOTEND_TOO_COLD                = _UxGT("噴嘴溫度不夠"); // "Hotend too cold"
-  LSTR MSG_MOVE_N_MM                      = _UxGT("移動 $ mm"); // "Move 0.025mm"
-  LSTR MSG_MOVE_01MM                      = _UxGT("移動 0.1 mm"); // "Move 0.1mm"
-  LSTR MSG_MOVE_1MM                       = _UxGT("移動 1 mm"); // "Move 1mm"
-  LSTR MSG_MOVE_10MM                      = _UxGT("移動 10 mm"); // "Move 10mm"
-  LSTR MSG_MOVE_50MM                      = _UxGT("移動 50 mm"); // "Move 50mm"
-  LSTR MSG_MOVE_100MM                     = _UxGT("移動 100 mm"); // "Move 100mm"
+  LSTR MSG_MOVE_N_MM                      = _UxGT("移動 $ mm"); // "Move $mm"
+  LSTR MSG_MOVE_N_IN                      = _UxGT("移動 $ in"); // "Move $in"
   LSTR MSG_SPEED                          = _UxGT("速率"); // "Speed"
   LSTR MSG_MESH_Z_OFFSET                  = _UxGT("熱床Z"); // "Bed Z"
   LSTR MSG_NOZZLE                         = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴"); // "Nozzle" 噴嘴
diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp
index 97c5b67598..741b33b084 100644
--- a/Marlin/src/lcd/menu/menu_motion.cpp
+++ b/Marlin/src/lcd/menu/menu_motion.cpp
@@ -28,15 +28,6 @@
 
 #if HAS_MARLINUI_MENU
 
-#define HAS_LARGE_AREA (TERN0(HAS_X_AXIS, (X_BED_SIZE) >= 1000) || TERN0(HAS_Y_AXIS, (Y_BED_SIZE) >= 1000) || TERN0(HAS_Z_AXIS, (Z_MAX_POS) >= 1000))
-#if ENABLED(LARGE_MOVE_ITEMS)
-  #define HAS_LARGE_MOVES true
-#elif ENABLED(SLIM_LCD_MENUS)
-  #define HAS_LARGE_MOVES false
-#else
-  #define HAS_LARGE_MOVES HAS_LARGE_AREA
-#endif
-
 #include "menu_item.h"
 #include "menu_addon.h"
 
@@ -53,6 +44,10 @@
   #include "../../feature/bedlevel/bedlevel.h"
 #endif
 
+constexpr bool has_large_area() {
+  return TERN0(HAS_X_AXIS, (X_BED_SIZE) >= 1000) || TERN0(HAS_Y_AXIS, (Y_BED_SIZE) >= 1000) || TERN0(HAS_Z_AXIS, (Z_MAX_POS) >= 1000);
+}
+
 //
 // "Motion" > "Move Axis" submenu
 //
@@ -88,7 +83,7 @@ void lcd_move_axis(const AxisEnum axis) {
       MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_MOVE_N), ftostr63(imp_pos));
     }
     else
-      MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_MOVE_N), ui.manual_move.menu_scale >= 0.1f ? (HAS_LARGE_AREA ? ftostr51sign(pos) : ftostr41sign(pos)) : ftostr63(pos));
+      MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_MOVE_N), ui.manual_move.menu_scale >= 0.1f ? (has_large_area() ? ftostr51sign(pos) : ftostr41sign(pos)) : ftostr63(pos));
   }
 }
 
@@ -156,23 +151,26 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
   }
 
   BACK_ITEM(MSG_MOVE_AXIS);
+
+  #ifndef EXTRUDE_MAXLENGTH
+    #define EXTRUDE_MAXLENGTH 50
+  #endif
+  #define __MOVE_MM(T,D) if (axis < NUM_AXES                                            /* Linear and rotational axes: */ \
+                           ? (D) > base_max_pos(axis) / 2                               /* XYZIJKUVW limit to half axis length */ \
+                           : TERN0(HAS_EXTRUDERS, (D) <= (EXTRUDE_MAXLENGTH) / 2 + 1)   /* E... limit to ~half max length (or 50mm) */ \
+                         ) SUBMENU_S(F(T), MSG_MOVE_N_MM, []{ _goto_manual_move(D); });
+
   if (parser.using_inch_units()) {
-    if (HAS_LARGE_MOVES) {
-      SUBMENU(MSG_MOVE_1IN, []{ _goto_manual_move(IN_TO_MM(1.000f)); });
-      SUBMENU(MSG_MOVE_05IN, []{ _goto_manual_move(IN_TO_MM(0.500f)); });
-    }
-    SUBMENU(MSG_MOVE_01IN,   []{ _goto_manual_move(IN_TO_MM(0.100f)); });
-    SUBMENU(MSG_MOVE_001IN,  []{ _goto_manual_move(IN_TO_MM(0.010f)); });
-    SUBMENU(MSG_MOVE_0001IN, []{ _goto_manual_move(IN_TO_MM(0.001f)); });
+    #ifdef MANUAL_MOVE_DISTANCE_IN
+      #define _MOVE_IN(I) __MOVE_MM(STRINGIFY(I), IN_TO_MM(I))
+      MAP(_MOVE_IN, MANUAL_MOVE_DISTANCE_IN)
+    #endif
   }
   else {
-    if (HAS_LARGE_MOVES) {
-      SUBMENU(MSG_MOVE_100MM, []{ _goto_manual_move(100); });
-      SUBMENU(MSG_MOVE_50MM, []{ _goto_manual_move(50); });
-    }
-    SUBMENU(MSG_MOVE_10MM, []{ _goto_manual_move(10);    });
-    SUBMENU(MSG_MOVE_1MM,  []{ _goto_manual_move( 1);    });
-    SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move( 0.1f); });
+    #ifdef MANUAL_MOVE_DISTANCE_MM
+      #define _MOVE_MM(M) __MOVE_MM(STRINGIFY(M), M)
+      MAP(_MOVE_MM, MANUAL_MOVE_DISTANCE_MM)
+    #endif
     #if HAS_Z_AXIS
       if (axis == Z_AXIS && (FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f)
         SUBMENU_f(F(STRINGIFY(FINE_MANUAL_MOVE)), MSG_MOVE_N_MM, []{ _goto_manual_move(float(FINE_MANUAL_MOVE)); });
diff --git a/Marlin/src/lcd/menu/menu_probe_offset.cpp b/Marlin/src/lcd/menu/menu_probe_offset.cpp
index 82bf23ca84..13edf0dcff 100644
--- a/Marlin/src/lcd/menu/menu_probe_offset.cpp
+++ b/Marlin/src/lcd/menu/menu_probe_offset.cpp
@@ -61,8 +61,8 @@ void probe_offset_wizard_menu() {
   STATIC_ITEM_F(F("Z"), SS_CENTER, ftostr42_52(current_position.z));
   STATIC_ITEM(MSG_ZPROBE_ZOFFSET, SS_FULL, ftostr42_52(calculated_z_offset));
 
-  SUBMENU(MSG_MOVE_1MM,  []{ _goto_manual_move_z( 1);    });
-  SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move_z( 0.1f); });
+  SUBMENU_S(F("1.0"), MSG_MOVE_N_MM, []{ _goto_manual_move_z( 1.0f); });
+  SUBMENU_S(F("0.1"), MSG_MOVE_N_MM, []{ _goto_manual_move_z( 0.1f); });
 
   if ((FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f)
     SUBMENU_f(F(STRINGIFY(FINE_MANUAL_MOVE)), MSG_MOVE_N_MM, []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); });
diff --git a/Marlin/src/lcd/menu/menu_x_twist.cpp b/Marlin/src/lcd/menu/menu_x_twist.cpp
index f5ceec8f12..c7e588b758 100644
--- a/Marlin/src/lcd/menu/menu_x_twist.cpp
+++ b/Marlin/src/lcd/menu/menu_x_twist.cpp
@@ -96,8 +96,8 @@ void xatc_wizard_menu() {
   STATIC_ITEM_F(F("Z="), SS_CENTER, ftostr42_52(current_position.z));
   STATIC_ITEM(MSG_ZPROBE_ZOFFSET, SS_LEFT, ftostr42_52(calculated_z_offset));
 
-  SUBMENU(MSG_MOVE_1MM,  []{ _goto_manual_move_z( 1);    });
-  SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move_z( 0.1f); });
+  SUBMENU_S(F("1.0"), MSG_MOVE_N_MM, []{ _goto_manual_move_z( 1.0f); });
+  SUBMENU_S(F("0.1"), MSG_MOVE_N_MM, []{ _goto_manual_move_z( 0.1f); });
 
   if ((FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f)
     SUBMENU_f(F(STRINGIFY(FINE_MANUAL_MOVE)), MSG_MOVE_N_MM, []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); });
diff --git a/buildroot/tests/teensy35 b/buildroot/tests/teensy35
index 4a752c7f5a..bba6859432 100755
--- a/buildroot/tests/teensy35
+++ b/buildroot/tests/teensy35
@@ -19,9 +19,12 @@ opt_set MOTHERBOARD BOARD_TEENSY35_36 \
         I2C_SLAVE_ADDRESS 63 \
         GRID_MAX_POINTS_X 16 \
         NOZZLE_CLEAN_START_POINT "{ {  10, 10, 3 }, {  10, 10, 3 } }" \
-        NOZZLE_CLEAN_END_POINT "{ {  10, 20, 3 }, {  10, 20, 3 } }"
+        NOZZLE_CLEAN_END_POINT "{ {  10, 20, 3 }, {  10, 20, 3 } }" \
+        MANUAL_MOVE_DISTANCE_MM "100, 50, 10, 10, 0.1" \
+        MANUAL_MOVE_DISTANCE_IN "1.000, 0.500, 0.100, 0.010, 0.001"
+
 opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT SDCARD_SORT_ALPHA \
-           LCD_INFO_MENU LCD_PRINTER_INFO_IS_BOOTSCREEN LARGE_MOVE_ITEMS TURBO_BACK_MENU_ITEM PREHEAT_SHORTCUT_MENU_ITEM \
+           LCD_INFO_MENU LCD_PRINTER_INFO_IS_BOOTSCREEN TURBO_BACK_MENU_ITEM PREHEAT_SHORTCUT_MENU_ITEM \
            FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY CALIBRATION_GCODE BAUD_RATE_GCODE SOUND_MENU_ITEM \
            FIX_MOUNTED_PROBE Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
            BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET BABYSTEP_GFX_OVERLAY \