diff --git a/spring-shell-docs/modules/ROOT/nav.adoc b/spring-shell-docs/modules/ROOT/nav.adoc index 2746bab5..c260be16 100644 --- a/spring-shell-docs/modules/ROOT/nav.adoc +++ b/spring-shell-docs/modules/ROOT/nav.adoc @@ -54,6 +54,7 @@ *** xref:components/ui/multiselect.adoc[] * xref:tui/index.adoc[] ** xref:tui/intro/index.adoc[] +*** xref:tui/intro/terminalui.adoc[] ** xref:tui/views/index.adoc[] *** xref:tui/views/box.adoc[] *** xref:tui/views/button.adoc[] diff --git a/spring-shell-docs/modules/ROOT/pages/tui/intro/terminalui.adoc b/spring-shell-docs/modules/ROOT/pages/tui/intro/terminalui.adoc new file mode 100644 index 00000000..c80f56d9 --- /dev/null +++ b/spring-shell-docs/modules/ROOT/pages/tui/intro/terminalui.adoc @@ -0,0 +1,17 @@ += TerminalUI +:page-section-summary-toc: 1 + +ifndef::snippets[:snippets: ../../../../../src/test/java/org/springframework/shell/docs] + +`TerminalUI` is a main implementation to drive ui execution logic. +Running `TerminalUI` execution loop is a blocking operation. + +== Exiting App + +If you want to exit from an app using normal _CTRL-Q_ key combination listen +events and request _interrupt_. + +[source, java, indent=0] +---- +include::{snippets}/TerminalUiSnippets.java[tag=snippet3] +---- diff --git a/spring-shell-docs/src/test/java/org/springframework/shell/docs/TerminalUiSnippets.java b/spring-shell-docs/src/test/java/org/springframework/shell/docs/TerminalUiSnippets.java index d25f054f..18ecd9d0 100644 --- a/spring-shell-docs/src/test/java/org/springframework/shell/docs/TerminalUiSnippets.java +++ b/spring-shell-docs/src/test/java/org/springframework/shell/docs/TerminalUiSnippets.java @@ -20,8 +20,11 @@ import org.jline.terminal.Terminal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.shell.component.view.TerminalUI; import org.springframework.shell.component.view.control.BoxView; +import org.springframework.shell.component.view.event.EventLoop; +import org.springframework.shell.component.view.event.KeyEvent.Key; import org.springframework.shell.component.view.geom.HorizontalAlign; import org.springframework.shell.component.view.geom.VerticalAlign; +import org.springframework.shell.component.view.message.ShellMessageBuilder; class TerminalUiSnippets { @@ -67,4 +70,26 @@ class TerminalUiSnippets { // end::snippet2[] } + class Sample3 { + + // tag::snippet3[] + @Autowired + Terminal terminal; + + void sample() { + TerminalUI ui = new TerminalUI(terminal); + BoxView view = new BoxView(); + ui.setRoot(view, true); + EventLoop eventLoop = ui.getEventLoop(); + eventLoop.keyEvents() + .subscribe(event -> { + if (event.getPlainKey() == Key.q && event.hasCtrl()) { + eventLoop.dispatch(ShellMessageBuilder.ofInterrupt()); + } + }); + ui.run(); + } + // end::snippet3[] + } + }