为了更好的显示打开的文本的内容,我们抽象出一个叫做View的struct,该结构体有一个pub的render()方法,我们可以要把Editor中的draw_rows()函数的代码逻辑放到render()中,以及将一些必要的辅助函数从Editor移入View中。
以下是我们在本章中要构建的内容:
Editor:此组件主要在不同的 UI 组件之间进行协调,在它们之间传递焦点和信息。目前,我们只有View。
View:此组件从 Editor接收所有与文本相关的事件,例如字符按键、换行符等等。
View使用此信息来增强其渲染效率,并将修改事件传递给Buffer。
Buffer:此组件将保存我们的文本。我们将从简单的纯文本表示开始,并在本教程中逐步扩展它,以根据需要容纳更多数据。
一个Buffer通用结构体,包含文本编辑器修改和显示文本文件所需的所有内容。一个视图,interacts用于Buffer将文本文件渲染到屏幕上。在许多文本编辑器中,您可以轻松地从一个编辑器切换Buffer到另一个编辑器,从而可以并行打开多个文件。
前面章节只是显示了我们预设在代码中的字符串,现在我们要从本地本机文件中读取并查看文件的内容:
如果hecto在没有任何命令行参数的情况下调用,它应该显示之前的欢迎屏幕:左列填充
,包名称和版本位于屏幕中央。
Editor应该检查文件名并将其传递给View,例如传递给名为load的方法
。此方法应该打开文件并将其内容加载到Buffer中。(删除硬编码的“Hello, World!”)。
您Buffer应该有一个名为is_empty的pub方法,如果缓冲区为空则返回 true,否则返回 false。
如果Buffer为空,则应显示欢迎信息,否则应隐藏。
空行仍应呈现为~。
现在我们可以显示文档的行了,但任何宽度超过终端宽度的行都可能会换行。