此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Shell 3.3.3spring-doc.cn

终端用户界面

TerminalUI是驱动 UI 执行逻辑的主要实现。spring-doc.cn

创建 TerminalUI

您可以手动构建,但推荐的方法是使用 build 自动为您配置,并将设置所需的服务。TerminalUITerminalUIBuilderspring-doc.cn

@Autowired
TerminalUIBuilder builder;

void sample() {
	TerminalUI ui = builder.build();
	// do something with ui
}

配置视图

TerminalUI有一个辅助方法 configure(View),可用于设置 需要集成到 EventLoop 和其他服务中。spring-doc.cn

TerminalUI ui;

void sample() {
	BoxView view = new BoxView();
	ui.configure(view);
}

运行 UI 循环

运行执行循环是一个阻塞操作。您将需要 一种退出循环的方法,例如 Exiting AppTerminalUIspring-doc.cn

TerminalUI ui;

void sample() {
	ui.run();
}

正在退出应用程序

如果您想使用普通的 CTRL-Q 组合键退出应用程序,请监听 事件和请求中断spring-doc.cn

@Autowired
Terminal terminal;

void sample() {
	TerminalUI ui = new TerminalUI(terminal);
	BoxView view = new BoxView();
	ui.configure(view);
	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();
}

模态视图

TerminalUI支持拥有一个活动的模态视图。放置模态视图 并获取所有输入事件。spring-doc.cn

TerminalUI ui;

void sample() {
	DialogView dialog = new DialogView();
	// set modal
	ui.setModal(dialog);
	// clear modal
	ui.setModal(null);
}
由于 views 不应该直接了解 和 interface 公开了 modal 相关函数。TerminalUiViewService