This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 7f7834ed211e537254f87ceadd881a351482c030
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Jul 2 21:04:28 2026 +0200

    CAMEL-23831: Move theme toggle from F4 to F2 Actions popup in camel-tui
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../camel/dsl/jbang/core/commands/tui/ActionsPopup.java      | 12 ++++++++++--
 .../camel/dsl/jbang/core/commands/tui/CamelMonitor.java      |  5 -----
 .../camel/dsl/jbang/core/commands/tui/OverviewTab.java       |  3 +--
 .../camel/dsl/jbang/core/commands/tui/TuiMcpServer.java      |  4 ++--
 4 files changed, 13 insertions(+), 11 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java
index a1231aa24502..95cd5c8c9d88 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java
@@ -82,6 +82,7 @@ class ActionsPopup {
         DOCTOR,
         RESET_STATS,
         RESET_SCREEN,
+        TOGGLE_THEME,
         STOP_ALL,
         SCREENSHOT,
         TAPE_RECORDING,
@@ -95,7 +96,7 @@ class ActionsPopup {
         SHELL
     }
 
-    private static final int[] GROUP_SIZES = { 1, 5, 4, 5 };
+    private static final int[] GROUP_SIZES = { 1, 5, 5, 5 };
     private static final int MCP_GROUP_SIZE = 4;
     private static final int SHELL_GROUP_SIZE = 1;
 
@@ -296,7 +297,7 @@ class ActionsPopup {
         flat.addAll(List.of(
                 Action.SEND_MESSAGE, Action.RUN_EXAMPLE, Action.RUN_FOLDER, 
Action.RUN_INFRA, Action.BROWSE_FILES));
         flat.add(null);
-        flat.addAll(List.of(Action.DOCTOR, Action.RESET_STATS, 
Action.RESET_SCREEN, Action.STOP_ALL));
+        flat.addAll(List.of(Action.DOCTOR, Action.RESET_STATS, 
Action.RESET_SCREEN, Action.TOGGLE_THEME, Action.STOP_ALL));
         flat.add(null);
         flat.addAll(List.of(
                 Action.SCREENSHOT, Action.TAPE_RECORDING, 
Action.TAPE_INSTRUCTIONS, Action.CAPTION,
@@ -385,6 +386,7 @@ class ActionsPopup {
         labels.add("Run Doctor");
         labels.add("Reset Stats");
         labels.add("Reset Screen");
+        labels.add("dark".equals(Theme.mode()) ? "Light Theme" : "Dark Theme");
         labels.add("Stop All");
         labels.add("โ”€โ”€โ”€");
         // Group 3: Recording & Presentation
@@ -693,6 +695,9 @@ class ActionsPopup {
                         if (resetScreenAction != null) {
                             resetScreenAction.run();
                         }
+                    } else if (action == Action.TOGGLE_THEME) {
+                        showActionsMenu = false;
+                        Theme.toggle();
                     } else if (action == Action.STOP_ALL) {
                         showActionsMenu = false;
                         stopAllPopup.open();
@@ -964,6 +969,8 @@ class ActionsPopup {
         items.add(ListItem.from("  ๐Ÿฉบ Run Doctor"));
         items.add(ListItem.from("  ๐Ÿ”„ Reset Stats"));
         items.add(ListItem.from("  ๐Ÿงน Reset Screen"));
+        String themeLabel = "dark".equals(Theme.mode()) ? "  ๐ŸŒž Light Theme" : 
"  ๐ŸŒ™ Dark Theme";
+        items.add(ListItem.from(themeLabel));
         items.add(ListItem.from(stopLabel));
         items.add(ListItem.from(divider).style(Style.EMPTY.dim()));
         // Group 3: Recording & Presentation
@@ -2338,6 +2345,7 @@ class ActionsPopup {
                     resetScreenAction.run();
                 }
             }
+            case TOGGLE_THEME -> Theme.toggle();
             case SCREENSHOT -> screenshotAction.run();
             case SHOW_KEYSTROKES -> toggleKeystrokes.run();
             case TAPE_RECORDING -> toggleTapeRecording.run();
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
index 0b45b55c4727..9cf2a2b38a14 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
@@ -641,10 +641,6 @@ public class CamelMonitor extends CamelCommand {
             }
             return true;
         }
-        if (!textEditing && ke.isKey(KeyCode.F4)) {
-            Theme.toggle();
-            return true;
-        }
         if (ke.isKey(KeyCode.F5) && ke.hasShift()) {
             recordingManager.takeScreenshot();
             return true;
@@ -1754,7 +1750,6 @@ public class CamelMonitor extends CamelCommand {
         }
         hint(fKeySpans, "F6", "shell");
         hint(fKeySpans, "F8", "AI");
-        hint(fKeySpans, "F4", "theme");
         spans.addAll(insertPos, fKeySpans);
         // Return total F-key span count. The footer drop loop uses this to 
remove pairs from
         // the tail (F6, then F3, F2), stopping before the first pair (F1 help 
when present).
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java
index 8b859518a76b..66b4ed035447 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java
@@ -947,9 +947,8 @@ class OverviewTab extends AbstractTab {
                 - `Enter` โ€” view routes for selected integration
                 - `s` โ€” cycle sort column
                 - `S` โ€” reverse sort order
-                - `F2` โ€” actions menu
+                - `F2` โ€” actions menu (includes theme toggle, go to tab, etc.)
                 - `F3` โ€” switch integration
-                - `F4` โ€” toggle light/dark theme
                 """;
     }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiMcpServer.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiMcpServer.java
index c3a7436c38c8..f8805af0363d 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiMcpServer.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiMcpServer.java
@@ -399,7 +399,7 @@ class TuiMcpServer {
                 "tui_action",
                 "Invokes a TUI action by name, bypassing fragile key 
sequences. "
                               + "Actions: reset-stats, reset-screen, 
screenshot, show-keystrokes, "
-                              + "tape-recording, doctor, caption, mcp-info, 
mcp-log.",
+                              + "tape-recording, doctor, caption, mcp-info, 
mcp-log, toggle-theme.",
                 Map.of("action", propDef("string", "Action name in kebab-case 
(e.g. 'reset-stats', 'screenshot')")),
                 List.of("action")));
         toolList.add(toolDef(
@@ -1167,7 +1167,7 @@ class TuiMcpServer {
         }
         return "Unknown or unsupported action: " + action
                + ". Available: reset-stats, reset-screen, screenshot, 
show-keystrokes, "
-               + "tape-recording, doctor, caption, mcp-info, mcp-log";
+               + "tape-recording, doctor, caption, mcp-info, mcp-log, 
toggle-theme";
     }
 
     private String callGetLog(Map<String, Object> args) {

Reply via email to