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
The following commit(s) were added to refs/heads/main by this push:
new a6302efb3bbc CAMEL-26854: camel-jbang - Upgrade TamboUI to 0.7.0
(#29631)
a6302efb3bbc is described below
commit a6302efb3bbc6d45f1a80fc5fdca7872f6ccd586
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Nov 11 15:00:17 2026 +0100
CAMEL-26854: camel-jbang - Upgrade TamboUI to 0.7.0 (#29631)
TamboUI 0.7.0 turns on the Kitty keyboard protocol by default, and then
some keys arrive differently. Stay on the legacy keys for now
(KeyboardProtocol.LEGACY in TuiBackendHelper); switching to Kitty keys and
reviewing the key bindings is a follow-up.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
---
.../dsl/jbang/core/commands/tui/TuiBackendHelper.java | 6 +++++-
.../camel/dsl/jbang/core/commands/tui/NoopBackend.java | 15 +++++++++++++++
.../core/commands/tui/TuiBackendHelperRecordingTest.java | 11 +++++++++++
parent/pom.xml | 2 +-
4 files changed, 32 insertions(+), 2 deletions(-)
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiBackendHelper.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiBackendHelper.java
index 7ac2b6fe7f12..b4af04dc2cbb 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiBackendHelper.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiBackendHelper.java
@@ -18,6 +18,7 @@ package org.apache.camel.dsl.jbang.core.commands.tui;
import dev.tamboui.backend.jline3.JLineBackend;
import dev.tamboui.terminal.Backend;
+import dev.tamboui.terminal.KeyboardProtocol;
import dev.tamboui.tui.TuiConfig;
import dev.tamboui.tui.TuiRunner;
import org.apache.camel.dsl.jbang.core.common.EnvironmentHelper;
@@ -42,7 +43,10 @@ final class TuiBackendHelper {
* itself when {@code --record} configured the {@code tamboui.record*}
system properties.
*/
static TuiRunner createTuiRunner(Backend backend) throws Exception {
+ // TamboUI 0.7 turns on the Kitty keyboard protocol by default, and
then some keys arrive differently
+ // (Ctrl+I vs Tab, Esc and Alt combinations); stay on the legacy keys
until the key bindings are reviewed
return TuiRunner.create(
-
TuiConfig.builder().backend(backend).mouseCapture(true).bracketedPaste(true).build());
+
TuiConfig.builder().backend(backend).mouseCapture(true).bracketedPaste(true)
+ .keyboardProtocol(KeyboardProtocol.LEGACY).build());
}
}
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/NoopBackend.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/NoopBackend.java
index 4090a78aef9b..1778e0e191be 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/NoopBackend.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/NoopBackend.java
@@ -22,6 +22,7 @@ import dev.tamboui.buffer.DiffResult;
import dev.tamboui.layout.Position;
import dev.tamboui.layout.Size;
import dev.tamboui.terminal.Backend;
+import dev.tamboui.terminal.KeyboardProtocol;
/**
* Minimal {@link Backend} stand-in. Only {@link #size()} needs a meaningful
value, so that the test fails if the
@@ -31,6 +32,7 @@ final class NoopBackend implements Backend {
private final int[] input;
private int inputPos;
+ private KeyboardProtocol keyboardProtocol;
/**
* @param input the bytes the terminal sends, read through TamboUI's event
parser by tests of key handling
@@ -103,6 +105,19 @@ final class NoopBackend implements Backend {
return inputPos < input.length ? input[inputPos] : -2;
}
+ @Override
+ public boolean enableKeyboardProtocol(KeyboardProtocol protocol) throws
IOException {
+ keyboardProtocol = protocol;
+ return Backend.super.enableKeyboardProtocol(protocol);
+ }
+
+ /**
+ * @return the keyboard protocol TuiRunner asked for, or null when it did
not ask
+ */
+ KeyboardProtocol keyboardProtocol() {
+ return keyboardProtocol;
+ }
+
@Override
public void writeRaw(byte[] data) throws IOException {
// TuiRunner.create enables bracketed paste through this method
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiBackendHelperRecordingTest.java
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiBackendHelperRecordingTest.java
index d806b3d4fb7d..4dcd75d1cb0b 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiBackendHelperRecordingTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/TuiBackendHelperRecordingTest.java
@@ -22,6 +22,7 @@ import java.nio.file.Path;
import dev.tamboui.internal.record.AnsiTerminalCapture;
import dev.tamboui.layout.Size;
import dev.tamboui.terminal.Backend;
+import dev.tamboui.terminal.KeyboardProtocol;
import dev.tamboui.tui.TuiRunner;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
@@ -70,6 +71,16 @@ class TuiBackendHelperRecordingTest {
}
}
+ @Test
+ void theTerminalStaysOnTheLegacyKeyboardProtocol() throws Exception {
+ // TamboUI 0.7 defaults to the Kitty keyboard protocol, which changes
how some keys arrive
+ NoopBackend backend = new NoopBackend();
+
+ try (TuiRunner runner = TuiBackendHelper.createTuiRunner(backend)) {
+
assertThat(backend.keyboardProtocol()).isEqualTo(KeyboardProtocol.LEGACY);
+ }
+ }
+
@Test
void withRecordOptionTheBackendIsWrappedAndSizedFromTheRecordingConfig()
throws Exception {
Path tape = tempDir.resolve("demo.tape");
diff --git a/parent/pom.xml b/parent/pom.xml
index 4c8dd441046a..4420a7c4d9c7 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -535,7 +535,7 @@
<swagger-ui-version>5.34.1</swagger-ui-version>
<stringtemplate-version>4.3.4</stringtemplate-version>
<tahu-version>1.0.21</tahu-version>
- <tamboui-version>0.6.0</tamboui-version>
+ <tamboui-version>0.7.0</tamboui-version>
<testcontainers-version>2.0.5</testcontainers-version>
<thymeleaf-version>3.1.5.RELEASE</thymeleaf-version>
<tika-version>4.1.0</tika-version>