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

davsclaus pushed a commit to branch worktree-happy-tickling-stream
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 87ccff70f0f5b35feecc8e0539bfdf2084281ada
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Jun 5 21:57:06 2026 +0200

    CAMEL-23672: TUI - Show book emoji and direct 'd' key for integration docs
    
    Move doc viewing from F2 menu item to a direct 'd' keybinding in the
    overview tab. Show a book emoji next to integrations that have a
    README file. The footer shows 'd docs' hint when the selected
    integration has documentation.
    
    Co-Authored-By: Claude <[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   | 10 ++++++++++
 .../camel/dsl/jbang/core/commands/tui/OverviewTab.java    | 15 ++++++++++-----
 3 files changed, 26 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 138d0d47ea20..486327e3cb5d 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
@@ -73,7 +73,6 @@ class ActionsPopup {
         RUN_EXAMPLE,
         RUN_FOLDER,
         RUN_INFRA,
-        SHOW_DOCS,
         DOCTOR,
         RESET_STATS,
         RESET_SCREEN,
@@ -87,7 +86,7 @@ class ActionsPopup {
         MCP_LOG
     }
 
-    private static final int[] GROUP_SIZES = { 5, 4, 5 };
+    private static final int[] GROUP_SIZES = { 4, 4, 5 };
     private static final int MCP_GROUP_SIZE = 2;
 
     private final Supplier<Set<String>> runningNames;
@@ -316,7 +315,6 @@ class ActionsPopup {
         labels.add("Run an example...");
         labels.add("Run from folder...");
         labels.add("Run Dev/Infra Service...");
-        labels.add("Show Integration Doc");
         labels.add("───");
         // Group 2: Diagnostics
         labels.add("Run Doctor");
@@ -535,8 +533,6 @@ class ActionsPopup {
                         openExampleBrowser();
                     } else if (action == Action.RUN_FOLDER) {
                         openFolderInput();
-                    } else if (action == Action.SHOW_DOCS) {
-                        openDocPicker();
                     } else if (action == Action.SCREENSHOT) {
                         showActionsMenu = false;
                         screenshotAction.run();
@@ -737,7 +733,6 @@ class ActionsPopup {
         items.add(ListItem.from("  🐪 Run an example..."));
         items.add(ListItem.from("  📂 Run from folder..."));
         items.add(ListItem.from("  🔧 Run Dev/Infra Service..."));
-        items.add(ListItem.from("  📖 Show Integration Doc"));
         items.add(ListItem.from(divider).style(Style.EMPTY.dim()));
         // Group 2: Diagnostics
         items.add(ListItem.from("  🩺 Run Doctor"));
@@ -944,6 +939,11 @@ class ActionsPopup {
         docPickerState.select(0);
     }
 
+    void openDoc(IntegrationInfo info) {
+        showActionsMenu = false;
+        loadDocFromIntegration(info);
+    }
+
     private void loadDocFromSelectedIntegration() {
         Integer sel = docPickerState.selected();
         if (sel == null || docPickerIntegrations == null || sel >= 
docPickerIntegrations.size()) {
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 3d83e8aeed8d..b156d2843b53 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
@@ -758,6 +758,13 @@ public class CamelMonitor extends CamelCommand {
                 restartSelectedProcess();
                 return true;
             }
+            if (tab == TAB_OVERVIEW && ke.isChar('d') && ctx.selectedPid != 
null && !isInfraSelected()) {
+                IntegrationInfo selInfo = findSelectedIntegration();
+                if (selInfo != null && selInfo.readmeFiles != null && 
!selInfo.readmeFiles.isEmpty()) {
+                    actionsPopup.openDoc(selInfo);
+                    return true;
+                }
+            }
             // Delegate remaining keys to active tab
             if (activeTab != null && activeTab.handleKeyEvent(ke)) {
                 return true;
@@ -1748,6 +1755,9 @@ public class CamelMonitor extends CamelCommand {
         if (ctx.selectedPid != null && !isInfraSelected()) {
             IntegrationInfo selInfo = findSelectedIntegration();
             if (selInfo != null) {
+                if (selInfo.readmeFiles != null && 
!selInfo.readmeFiles.isEmpty()) {
+                    hint(spans, "d", "docs");
+                }
                 hint(spans, "p", selInfo.routeStarted > 0 ? "stop routes" : 
"start routes");
             }
         }
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 d5d09d4d3a04..979eae7e9842 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
@@ -215,12 +215,17 @@ class OverviewTab implements MonitorTab {
 
                 String sinceLastDisplay = formatSinceLast(info);
 
+                boolean hasDoc = info.readmeFiles != null && 
!info.readmeFiles.isEmpty();
                 String nameText = "🐪 " + (info.name != null ? info.name : "");
-                Line nameLine = info.devMode
-                        ? Line.from(
-                                Span.styled(nameText, 
Style.EMPTY.fg(Color.CYAN)),
-                                Span.styled(" [dev]", 
Style.EMPTY.fg(Color.YELLOW).dim()))
-                        : Line.from(Span.styled(nameText, 
Style.EMPTY.fg(Color.CYAN)));
+                List<Span> nameSpans = new ArrayList<>();
+                nameSpans.add(Span.styled(nameText, 
Style.EMPTY.fg(Color.CYAN)));
+                if (info.devMode) {
+                    nameSpans.add(Span.styled(" [dev]", 
Style.EMPTY.fg(Color.YELLOW).dim()));
+                }
+                if (hasDoc) {
+                    nameSpans.add(Span.styled(" 📖", Style.EMPTY));
+                }
+                Line nameLine = Line.from(nameSpans);
                 rows.add(Row.from(
                         Cell.from(info.pid),
                         Cell.from(nameLine),

Reply via email to