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),
