欢迎光临散文网 会员登陆 & 注册

如何写一个编辑器:绪言

2021-12-28 18:12 作者:clerk_ma  | 我要投稿

在上一篇写完之后,颈椎和背部的肌肉开始出现不太正常的情况。经过几天的休息之后,基本有所缓解。

即使转头太难受,也觉得,得写点东西。就写一个编辑器吧。前一篇提到的一些算法和编辑器,虽然有一些历史遗留,但是大抵上还是能重新构建出来的。而构建出来的东西,实际上是基于TUI的(text-based user interfaces)。这个TUI的典型,就是基于书中提到的VT100终端上面,搞文本操作。


VT100终端

如果举不太久的例子,那大概可以想象一下DOS下面的一些编辑器的样子。实际上,我写完最初版本的,陡然发现TUI上面的一些操作实际上和画GUI是一样的。当然,这种一样,前提是把绘图作为一种抽象的行为来看,而不是拘泥于实际的绘制差异。


虽然,TUI这种东西的复古味道比较浓烈,但是在实现编辑器这一个话题上,却比使用GUI框架还是简单不少。而且,举一反三,把TUI的经验迁移到GUI上也并不复杂。

前几天(12月25号)发布的Ruby 3.1.0里面实现了比较复杂terminal控制(自动补全等)。这里面的东西也算得上是编辑器,但是肯定比本教程要描述的编辑器还是要复杂很多的。

Ruby的命令行模式

熟悉我的读者大概知道我是搞TeX的,还是底层开发的那种。而TeX的概念之中,有一个叫做escape的,通常翻译成转义字符。我们每天使用的键盘上就有个ESC按键。自从ASCII编码创制以来,ESC的作用,多是来发送指令来执行人机交互的。这里面的人机交互比较简单,比如发送指令让程序打开或者保存文件,或者让屏幕上的文本改变一下样式(颜色等)。

我们可以运行下面的例子:

输出大抵如下:

终端输出

实际上,这段代码隐藏了很多细节,我们可以直接简单粗暴地使用:

那么出现的效果实际上是一样的。

这里面的“\x1b”开始的一串字符,就是之后我们要使用的控制终端输出的部分。这一串字符串能够控制的东西很多,比如颜色,鼠标模式,光标位置。

这里只是一个简单的介绍,更详细的控制可以参考维基百科的ANSI escape code词条。

下一篇,讲文件的结构。

如何写一个编辑器:绪言的评论 (共 条)

分享到微博请遵守国家法律