Skip to content

Commit 90c0764

Browse files
committed
🚸 Immediate Buttons and Menu Items (#28180)
1 parent 402aab9 commit 90c0764

File tree

12 files changed

+122
-45
lines changed

12 files changed

+122
-45
lines changed

Marlin/Configuration_adv.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4123,22 +4123,27 @@
41234123
#define MAIN_MENU_ITEM_1_DESC "Home & UBL Info"
41244124
#define MAIN_MENU_ITEM_1_GCODE "G28\nG29 W"
41254125
//#define MAIN_MENU_ITEM_1_CONFIRM // Show a confirmation dialog before this action
4126+
//#define MAIN_MENU_ITEM_1_IMMEDIATE // Skip the queue and execute immediately. Rarely needed.
41264127

41274128
#define MAIN_MENU_ITEM_2_DESC "Preheat for " PREHEAT_1_LABEL
41284129
#define MAIN_MENU_ITEM_2_GCODE "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
41294130
//#define MAIN_MENU_ITEM_2_CONFIRM
4131+
//#define MAIN_MENU_ITEM_2_IMMEDIATE
41304132

41314133
//#define MAIN_MENU_ITEM_3_DESC "Preheat for " PREHEAT_2_LABEL
41324134
//#define MAIN_MENU_ITEM_3_GCODE "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)
41334135
//#define MAIN_MENU_ITEM_3_CONFIRM
4136+
//#define MAIN_MENU_ITEM_3_IMMEDIATE
41344137

41354138
//#define MAIN_MENU_ITEM_4_DESC "Heat Bed/Home/Level"
41364139
//#define MAIN_MENU_ITEM_4_GCODE "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29"
41374140
//#define MAIN_MENU_ITEM_4_CONFIRM
4141+
//#define MAIN_MENU_ITEM_4_IMMEDIATE
41384142

41394143
//#define MAIN_MENU_ITEM_5_DESC "Home & Info"
41404144
//#define MAIN_MENU_ITEM_5_GCODE "G28\nM503"
41414145
//#define MAIN_MENU_ITEM_5_CONFIRM
4146+
//#define MAIN_MENU_ITEM_5_IMMEDIATE
41424147
#endif
41434148

41444149
// @section custom config menu
@@ -4155,22 +4160,27 @@
41554160
#define CONFIG_MENU_ITEM_1_DESC "Wifi ON"
41564161
#define CONFIG_MENU_ITEM_1_GCODE "M118 [ESP110] WIFI-STA pwd=12345678"
41574162
//#define CONFIG_MENU_ITEM_1_CONFIRM // Show a confirmation dialog before this action
4163+
//#define CONFIG_MENU_ITEM_1_IMMEDIATE // Skip the queue and execute immediately. Rarely needed.
41584164

41594165
#define CONFIG_MENU_ITEM_2_DESC "Bluetooth ON"
41604166
#define CONFIG_MENU_ITEM_2_GCODE "M118 [ESP110] BT pwd=12345678"
41614167
//#define CONFIG_MENU_ITEM_2_CONFIRM
4168+
//#define CONFIG_MENU_ITEM_2_IMMEDIATE
41624169

41634170
//#define CONFIG_MENU_ITEM_3_DESC "Radio OFF"
41644171
//#define CONFIG_MENU_ITEM_3_GCODE "M118 [ESP110] OFF pwd=12345678"
41654172
//#define CONFIG_MENU_ITEM_3_CONFIRM
4173+
//#define CONFIG_MENU_ITEM_3_IMMEDIATE
41664174

41674175
//#define CONFIG_MENU_ITEM_4_DESC "Wifi ????"
41684176
//#define CONFIG_MENU_ITEM_4_GCODE "M118 ????"
41694177
//#define CONFIG_MENU_ITEM_4_CONFIRM
4178+
//#define CONFIG_MENU_ITEM_4_IMMEDIATE
41704179

41714180
//#define CONFIG_MENU_ITEM_5_DESC "Wifi ????"
41724181
//#define CONFIG_MENU_ITEM_5_GCODE "M118 ????"
41734182
//#define CONFIG_MENU_ITEM_5_CONFIRM
4183+
//#define CONFIG_MENU_ITEM_5_IMMEDIATE
41744184
#endif
41754185

41764186
// @section custom buttons
@@ -4187,6 +4197,7 @@
41874197
#define BUTTON1_WHEN_PRINTING false // Button allowed to trigger during printing?
41884198
#define BUTTON1_GCODE "G28"
41894199
#define BUTTON1_DESC "Homing" // Optional string to set the LCD status
4200+
//#define BUTTON1_IMMEDIATE // Skip the queue and run the G-code immediately. Rarely needed.
41904201
#endif
41914202

41924203
//#define BUTTON2_PIN -1
@@ -4195,6 +4206,7 @@
41954206
#define BUTTON2_WHEN_PRINTING false
41964207
#define BUTTON2_GCODE "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
41974208
#define BUTTON2_DESC "Preheat for " PREHEAT_1_LABEL
4209+
//#define BUTTON2_IMMEDIATE
41984210
#endif
41994211

42004212
//#define BUTTON3_PIN -1
@@ -4203,6 +4215,7 @@
42034215
#define BUTTON3_WHEN_PRINTING false
42044216
#define BUTTON3_GCODE "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)
42054217
#define BUTTON3_DESC "Preheat for " PREHEAT_2_LABEL
4218+
//#define BUTTON3_IMMEDIATE
42064219
#endif
42074220
#endif
42084221

Marlin/src/HAL/HC32/inc/SanityCheck.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
#error "POSTMORTEM_DEBUGGING requires CORE_DISABLE_FAULT_HANDLER to be set."
8484
#endif
8585

86-
#if defined(PANIC_ENABLE)
86+
#ifdef PANIC_ENABLE
8787
#if defined(PANIC_USART1_TX_PIN) || defined(PANIC_USART2_TX_PIN) || defined(PANIC_USART3_TX_PIN) || defined(PANIC_USART3_TX_PIN)
8888
#error "HC32 HAL uses a custom panic handler. Do not define PANIC_USARTx_TX_PIN."
8989
#endif

Marlin/src/HAL/HC32/sysclock.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ void core_hook_sysclock_init() {
171171
panic("HRC is not 16 MHz");
172172
}
173173

174-
#if defined(BOARD_XTAL_FREQUENCY)
174+
#ifdef BOARD_XTAL_FREQUENCY
175175
#warning "No valid XTAL frequency defined, falling back to HRC."
176176
#endif
177177

Marlin/src/MarlinCore.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -531,11 +531,15 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
531531
constexpr millis_t CUB_DEBOUNCE_DELAY_##N = 250UL; \
532532
static millis_t next_cub_ms_##N; \
533533
if (BUTTON##N##_HIT_STATE == READ(BUTTON##N##_PIN) \
534-
&& (ENABLED(BUTTON##N##_WHEN_PRINTING) || printer_not_busy)) { \
534+
&& (ENABLED(BUTTON##N##_WHEN_PRINTING) || printer_not_busy) \
535+
) { \
535536
if (ELAPSED(ms, next_cub_ms_##N)) { \
536537
next_cub_ms_##N = ms + CUB_DEBOUNCE_DELAY_##N; \
537538
CODE; \
538-
queue.inject(F(BUTTON##N##_GCODE)); \
539+
if (ENABLED(BUTTON##N##_IMMEDIATE)) \
540+
gcode.process_subcommands_now(F(BUTTON##N##_GCODE)); \
541+
else \
542+
queue.inject(F(BUTTON##N##_GCODE)); \
539543
TERN_(HAS_MARLINUI_MENU, ui.quick_feedback()); \
540544
} \
541545
} \

Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/custom_user_menus.cpp

Lines changed: 57 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void CustomUserMenus::onRedraw(draw_mode_t what) {
4242
}
4343

4444
#if ENABLED(TOUCH_UI_PORTRAIT)
45-
#if defined(TOOLHEAD_Legacy_Universal)
45+
#ifdef TOOLHEAD_Legacy_Universal
4646
#define GRID_ROWS 10
4747
#else
4848
#define GRID_ROWS 7
@@ -72,42 +72,42 @@ btn_colors thcolor[8] = {normal_btn};
7272
.tag(0).text(TOOLHEAD_LABL_POS, GET_TEXT_F(MSG_CUSTOM_MENU_MAIN_TITLE));
7373
cmd.colors(accent_btn)
7474
.font(Theme::font_medium)
75-
#if defined(MAIN_MENU_ITEM_1_DESC)
75+
#ifdef MAIN_MENU_ITEM_1_DESC
7676
//_USER_ITEM(1)
7777
.tag(_ITEM_TAG(11)).button(USER_ITEM_POS(1), MAIN_MENU_ITEM_1_DESC)
7878
#endif
7979
.colors(thcolor[1])
80-
#if defined(MAIN_MENU_ITEM_2_DESC)
80+
#ifdef MAIN_MENU_ITEM_2_DESC
8181
//_USER_ITEM(2)
8282
.tag(_ITEM_TAG(12)).button(USER_ITEM_POS(2), MAIN_MENU_ITEM_2_DESC)
8383
#endif
8484
.colors(thcolor[2])
85-
#if defined(MAIN_MENU_ITEM_3_DESC)
85+
#ifdef MAIN_MENU_ITEM_3_DESC
8686
//_USER_ITEM(3)
8787
.tag(_ITEM_TAG(13)).button(USER_ITEM_POS(3), MAIN_MENU_ITEM_3_DESC)
8888
#endif
8989
.colors(thcolor[3])
90-
#if defined(MAIN_MENU_ITEM_4_DESC)
90+
#ifdef MAIN_MENU_ITEM_4_DESC
9191
//_USER_ITEM(4)
9292
.tag(_ITEM_TAG(14)).button(USER_ITEM_POS(4), MAIN_MENU_ITEM_4_DESC)
9393
#endif
9494
.colors(thcolor[4])
95-
#if defined(MAIN_MENU_ITEM_5_DESC)
95+
#ifdef MAIN_MENU_ITEM_5_DESC
9696
//_USER_ITEM(5)
9797
.tag(_ITEM_TAG(15)).button(USER_ITEM_POS(5), MAIN_MENU_ITEM_5_DESC)
9898
#endif
9999
.colors(thcolor[5])
100-
#if defined(MAIN_MENU_ITEM_6_DESC)
100+
#ifdef MAIN_MENU_ITEM_6_DESC
101101
//_USER_ITEM(6)
102102
.tag(_ITEM_TAG(16)).button(USER_ITEM_POS(6), MAIN_MENU_ITEM_6_DESC)
103103
#endif
104104
.colors(thcolor[6])
105-
#if defined(MAIN_MENU_ITEM_7_DESC)
105+
#ifdef MAIN_MENU_ITEM_7_DESC
106106
//_USER_ITEM(7)
107107
.tag(_ITEM_TAG(17)).button(USER_ITEM_POS(7), MAIN_MENU_ITEM_7_DESC)
108108
#endif
109109
.colors(thcolor[7])
110-
#if defined(MAIN_MENU_ITEM_8_DESC)
110+
#ifdef MAIN_MENU_ITEM_8_DESC
111111
//_USER_ITEM(8)
112112
.tag(_ITEM_TAG(18)).button(USER_ITEM_POS(8), MAIN_MENU_ITEM_8_DESC)
113113
#endif
@@ -125,39 +125,70 @@ btn_colors thcolor[8] = {normal_btn};
125125

126126
bool CustomUserMenus::onTouchEnd(uint8_t tag) {
127127
switch (tag) {
128-
#if defined(MAIN_MENU_ITEM_1_DESC)
128+
#ifdef MAIN_MENU_ITEM_1_DESC
129129
//_USER_ACTION(1)
130-
case _ITEM_TAG(11): injectCommands_P(PSTR(MAIN_MENU_ITEM_1_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break;
130+
case _ITEM_TAG(11):
131+
TERN(MAIN_MENU_ITEM_1_IMMEDIATE, executeCommands, injectCommands)(F(MAIN_MENU_ITEM_1_GCODE));
132+
sound.play(chimes, PLAY_ASYNCHRONOUS);
133+
GOTO_SCREEN(StatusScreen);
134+
break;
131135
#endif
132-
#if defined(MAIN_MENU_ITEM_2_DESC)
136+
#ifdef MAIN_MENU_ITEM_2_DESC
133137
//_USER_ACTION(2)
134-
case _ITEM_TAG(12): injectCommands_P(PSTR(MAIN_MENU_ITEM_2_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break;
138+
case _ITEM_TAG(12):
139+
TERN(MAIN_MENU_ITEM_2_IMMEDIATE, executeCommands, injectCommands)(F(MAIN_MENU_ITEM_2_GCODE));
140+
sound.play(chimes, PLAY_ASYNCHRONOUS);
141+
GOTO_SCREEN(StatusScreen);
142+
break;
135143
#endif
136-
#if defined(MAIN_MENU_ITEM_3_DESC)
144+
#ifdef MAIN_MENU_ITEM_3_DESC
137145
//_USER_ACTION(3)
138-
case _ITEM_TAG(13): injectCommands_P(PSTR(MAIN_MENU_ITEM_3_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break;
146+
case _ITEM_TAG(13):
147+
TERN(MAIN_MENU_ITEM_3_IMMEDIATE, executeCommands, injectCommands)(F(MAIN_MENU_ITEM_3_GCODE));
148+
sound.play(chimes, PLAY_ASYNCHRONOUS);
149+
GOTO_SCREEN(StatusScreen);
150+
break;
139151
#endif
140-
#if defined(MAIN_MENU_ITEM_4_DESC)
152+
#ifdef MAIN_MENU_ITEM_4_DESC
141153
//_USER_ACTION(4)
142-
case _ITEM_TAG(14): injectCommands_P(PSTR(MAIN_MENU_ITEM_4_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break;
154+
case _ITEM_TAG(14):
155+
TERN(MAIN_MENU_ITEM_4_IMMEDIATE, executeCommands, injectCommands)(F(MAIN_MENU_ITEM_4_GCODE));
156+
sound.play(chimes, PLAY_ASYNCHRONOUS);
157+
GOTO_SCREEN(StatusScreen);
158+
break;
143159
#endif
144-
#if defined(MAIN_MENU_ITEM_5_DESC)
160+
#ifdef MAIN_MENU_ITEM_5_DESC
145161
//_USER_ACTION(5)
146-
case _ITEM_TAG(15): injectCommands_P(PSTR(MAIN_MENU_ITEM_5_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break;
162+
case _ITEM_TAG(15):
163+
TERN(MAIN_MENU_ITEM_5_IMMEDIATE, executeCommands, injectCommands)(F(MAIN_MENU_ITEM_5_GCODE));
164+
sound.play(chimes, PLAY_ASYNCHRONOUS);
165+
GOTO_SCREEN(StatusScreen);
166+
break;
147167
#endif
148-
#if defined(MAIN_MENU_ITEM_6_DESC)
168+
#ifdef MAIN_MENU_ITEM_6_DESC
149169
//_USER_ACTION(6)
150-
case _ITEM_TAG(16): injectCommands_P(PSTR(MAIN_MENU_ITEM_6_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break;
170+
case _ITEM_TAG(16):
171+
TERN(MAIN_MENU_ITEM_6_IMMEDIATE, executeCommands, injectCommands)(F(MAIN_MENU_ITEM_6_GCODE));
172+
sound.play(chimes, PLAY_ASYNCHRONOUS);
173+
GOTO_SCREEN(StatusScreen);
174+
break;
151175
#endif
152-
#if defined(MAIN_MENU_ITEM_7_DESC)
176+
#ifdef MAIN_MENU_ITEM_7_DESC
153177
//_USER_ACTION(7)
154-
case _ITEM_TAG(17): injectCommands_P(PSTR(MAIN_MENU_ITEM_7_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen);break;
178+
case _ITEM_TAG(17):
179+
TERN(MAIN_MENU_ITEM_7_IMMEDIATE, executeCommands, injectCommands)(F(MAIN_MENU_ITEM_7_GCODE));
180+
sound.play(chimes, PLAY_ASYNCHRONOUS);
181+
GOTO_SCREEN(StatusScreen);
182+
break;
155183
#endif
156-
#if defined(MAIN_MENU_ITEM_8_DESC)
184+
#ifdef MAIN_MENU_ITEM_8_DESC
157185
//_USER_ACTION(8)
158-
case _ITEM_TAG(18): injectCommands_P(PSTR(MAIN_MENU_ITEM_8_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen);break;
186+
case _ITEM_TAG(18):
187+
TERN(MAIN_MENU_ITEM_8_IMMEDIATE, executeCommands, injectCommands)(F(MAIN_MENU_ITEM_8_GCODE));
188+
sound.play(chimes, PLAY_ASYNCHRONOUS);
189+
GOTO_SCREEN(StatusScreen);
190+
break;
159191
#endif
160-
161192
case 1: GOTO_PREVIOUS(); break;
162193
#ifdef PARKING_COMMAND_GCODE
163194
case 20: injectCommands(F(PARKING_COMMAND_GCODE)); break;

Marlin/src/lcd/extui/ui_api.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ namespace ExtUI {
132132
inline void injectCommands(FSTR_P const fstr) { injectCommands_P(FTOP(fstr)); }
133133
void injectCommands(char * const);
134134
bool commandsInQueue();
135+
inline void executeCommands(FSTR_P const fstr) { gcode.process_subcommands_now(fstr); }
136+
inline void executeCommands(char * const cstr) { gcode.process_subcommands_now(cstr); }
135137

136138
#if ENABLED(HOST_KEEPALIVE_FEATURE)
137139
GcodeSuite::MarlinBusyState getHostKeepaliveState();

Marlin/src/lcd/menu/menu.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,3 +269,7 @@ inline void clear_menu_history() { screen_history_depth = 0; }
269269
#if ANY(PROBE_MANUALLY, MESH_BED_LEVELING, X_AXIS_TWIST_COMPENSATION)
270270
extern uint8_t manual_probe_index;
271271
#endif
272+
273+
#if ANY(CUSTOM_MENU_MAIN, CUSTOM_MENU_CONFIG)
274+
template<bool> void _lcd_custom_menu_gcode(FSTR_P const fstr);
275+
#endif

Marlin/src/lcd/menu/menu_configuration.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -464,12 +464,6 @@ void menu_advanced_settings();
464464

465465
#if ENABLED(CUSTOM_MENU_CONFIG)
466466

467-
void _lcd_custom_menus_configuration_gcode(FSTR_P const fstr) {
468-
queue.inject(fstr);
469-
TERN_(CUSTOM_MENU_CONFIG_SCRIPT_AUDIBLE_FEEDBACK, ui.completion_feedback());
470-
TERN_(CUSTOM_MENU_CONFIG_SCRIPT_RETURN, ui.return_to_status());
471-
}
472-
473467
void custom_menus_configuration() {
474468
START_MENU();
475469
BACK_ITEM(MSG_MAIN_MENU);
@@ -481,7 +475,7 @@ void menu_advanced_settings();
481475
#else
482476
#define _DONE_SCRIPT ""
483477
#endif
484-
#define GCODE_LAMBDA_CONF(N) []{ _lcd_custom_menus_configuration_gcode(F(CONFIG_MENU_ITEM_##N##_GCODE _DONE_SCRIPT)); }
478+
#define GCODE_LAMBDA_CONF(N) []{ _lcd_custom_menu_gcode<ENABLED(CONFIG_MENU_ITEM_##N##_IMMEDIATE)>(F(CONFIG_MENU_ITEM_##N##_GCODE _DONE_SCRIPT)); }
485479
#define _CUSTOM_ITEM_CONF(N) ACTION_ITEM_F(F(CONFIG_MENU_ITEM_##N##_DESC), GCODE_LAMBDA_CONF(N));
486480
#define _CUSTOM_ITEM_CONF_CONFIRM(N) \
487481
SUBMENU_F(F(CONFIG_MENU_ITEM_##N##_DESC), []{ \

Marlin/src/lcd/menu/menu_item.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
#include "menu.h"
2525
#include "../marlinui.h"
26+
#include "../../gcode/gcode.h" // for process_subcommands_now
2627
#include "../../gcode/queue.h" // for inject
2728

2829
#include "../../inc/MarlinConfigPre.h"
@@ -70,6 +71,12 @@ class MenuItem_gcode : public MenuItem_button {
7071
static void action(FSTR_P const fstr, const uint8_t, FSTR_P const fgcode) { action(fstr, fgcode); }
7172
};
7273

74+
class MenuItem_command : public MenuItem_gcode {
75+
public:
76+
static void action(FSTR_P const, FSTR_P const fgcode) { gcode.process_subcommands_now(fgcode); }
77+
static void action(FSTR_P const fstr, const uint8_t, FSTR_P const fgcode) { action(fstr, fgcode); }
78+
};
79+
7380
////////////////////////////////////////////
7481
///////////// Edit Menu Items //////////////
7582
////////////////////////////////////////////
@@ -479,6 +486,15 @@ class MenuItem_bool : public MenuEditItemBase {
479486
#define GCODES_ITEM_F(FLABEL, GCODES) MENU_ITEM_F(gcode, FLABEL, GCODES)
480487
#define GCODES_ITEM(LABEL, GCODES) GCODES_ITEM_F(GET_TEXT_F(LABEL), GCODES)
481488

489+
#define COMMAND_ITEM_N_S_F(N, S, FLABEL, GCODES) MENU_ITEM_N_S_F(command, N, S, FLABEL, GCODES)
490+
#define COMMAND_ITEM_N_S(N, S, LABEL, GCODES) COMMAND_ITEM_N_S_F(N, S, GET_TEXT_F(LABEL), GCODES)
491+
#define COMMAND_ITEM_S_F(S, FLABEL, GCODES) MENU_ITEM_S_F(command, S, FLABEL, GCODES)
492+
#define COMMAND_ITEM_S(S, LABEL, GCODES) COMMAND_ITEM_S_F(S, GET_TEXT_F(LABEL), GCODES)
493+
#define COMMAND_ITEM_N_F(N, FLABEL, GCODES) MENU_ITEM_N_F(command, N, FLABEL, GCODES)
494+
#define COMMAND_ITEM_N(N, LABEL, GCODES) COMMAND_ITEM_N_F(N, GET_TEXT_F(LABEL), GCODES)
495+
#define COMMAND_ITEM_F(FLABEL, GCODES) MENU_ITEM_F(command, FLABEL, GCODES)
496+
#define COMMAND_ITEM(LABEL, GCODES) COMMAND_ITEM_F(GET_TEXT_F(LABEL), GCODES)
497+
482498
#define SUBMENU_N_S_F(N, S, FLABEL, DEST) MENU_ITEM_N_S_F(submenu, N, S, FLABEL, DEST)
483499
#define SUBMENU_N_S(N, S, LABEL, DEST) SUBMENU_N_S_F(N, S, GET_TEXT_F(LABEL), DEST)
484500
#define SUBMENU_S_F(S, FLABEL, DEST) MENU_ITEM_S_F(submenu, S, FLABEL, DEST)

Marlin/src/lcd/menu/menu_main.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,24 @@ void menu_configuration();
116116
void menu_language();
117117
#endif
118118

119-
#if ENABLED(CUSTOM_MENU_MAIN)
119+
#if ANY(CUSTOM_MENU_MAIN, CUSTOM_MENU_CONFIG)
120120

121-
void _lcd_custom_menu_main_gcode(FSTR_P const fstr) {
122-
queue.inject(fstr);
121+
FORCE_INLINE void _lcd_custom_menu_gcode_done() {
123122
TERN_(CUSTOM_MENU_MAIN_SCRIPT_AUDIBLE_FEEDBACK, ui.completion_feedback());
124123
TERN_(CUSTOM_MENU_MAIN_SCRIPT_RETURN, ui.return_to_status());
125124
}
125+
template<> void _lcd_custom_menu_gcode<true>(FSTR_P const fstr) {
126+
gcode.process_subcommands_now(fstr);
127+
_lcd_custom_menu_gcode_done();
128+
}
129+
template<> void _lcd_custom_menu_gcode<false>(FSTR_P const fstr) {
130+
queue.inject(fstr);
131+
_lcd_custom_menu_gcode_done();
132+
}
133+
134+
#endif
135+
136+
#if ENABLED(CUSTOM_MENU_MAIN)
126137

127138
void custom_menus_main() {
128139
START_MENU();
@@ -135,7 +146,7 @@ void menu_configuration();
135146
#else
136147
#define _DONE_SCRIPT ""
137148
#endif
138-
#define GCODE_LAMBDA_MAIN(N) []{ _lcd_custom_menu_main_gcode(F(MAIN_MENU_ITEM_##N##_GCODE _DONE_SCRIPT)); }
149+
#define GCODE_LAMBDA_MAIN(N) []{ _lcd_custom_menu_gcode<ENABLED(MAIN_MENU_ITEM_##N##_IMMEDIATE)>(F(MAIN_MENU_ITEM_##N##_GCODE _DONE_SCRIPT)); }
139150
#define _CUSTOM_ITEM_MAIN(N) ACTION_ITEM_F(F(MAIN_MENU_ITEM_##N##_DESC), GCODE_LAMBDA_MAIN(N));
140151
#define _CUSTOM_ITEM_MAIN_CONFIRM(N) \
141152
SUBMENU_F(F(MAIN_MENU_ITEM_##N##_DESC), []{ \
@@ -482,7 +493,7 @@ void menu_main() {
482493
ACTION_ITEM(MSG_SWITCH_PS_OFF, ui.poweroff);
483494
#endif
484495
else
485-
GCODES_ITEM(MSG_SWITCH_PS_ON, F("M80"));
496+
COMMAND_ITEM(MSG_SWITCH_PS_ON, F("M80"));
486497
#endif
487498

488499
// SD Card / Flash Drive

0 commit comments

Comments
 (0)