此版本仍在开发中,尚未被认为是稳定版。请使用最新稳定版 Spring Shell 4.0.1spring-doc.cadn.net.cn

终端界面

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

创建TerminalUI

您可以手动构建 `0`,但推荐的方式是使用 `1`,它会为您自动配置并设置所需的各项服务。spring-doc.cadn.net.cn

@Autowired
TerminalUIBuilder builder;

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

配置视图

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

TerminalUI ui;

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

运行 UI 循环

运行TerminalUI执行循环是一个阻塞操作。你需要一种方式退出循环,例如退出应用spring-doc.cadn.net.cn

TerminalUI ui;

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

退出应用程序

如果您想使用正常的CTRL-Q键组合退出应用,那么您需要注册一个事件监听器并请求中断执行。spring-doc.cadn.net.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.cadn.net.cn

TerminalUI ui;

void sample() {
	DialogView dialog = new DialogView();
	// set modal
	ui.setModal(dialog);
	// clear modal
	ui.setModal(null);
}
作为视图不应直接了解关于TerminalUi的任何内容,并且接口ViewService暴露了与模态相关的功能。