来源:辣条科技站Gamer发布时间: 2024-08-04 10:22:28
从第二章开始,在每个小节的最后都会有一些代码实操作业,你可以选择自己完成(比较推荐),再对照我的实现方式,当然也可以直接看我的代码实现。不过,之后的各个功能实现,我都会基于我先前的代码实现版本,在它的基础上进行扩展。
首先,我们先来解决第一章遗留的第一个问题:输入数据会被stdin缓存,直到遇到换行符(也就是按下 Enter 键)才被发送。
"Raw mode" 是一个终端设置,该设置允许程序直接处理终端的输入数据。在 "raw mode" 中,输入的字符不会被终端缓冲,而会立即发送到程序。这意味着程序可以立即响应用户的每一个按键,而不需要等待用户按下 Enter 键。
此外,在 "raw mode" 中,终端不会处理特殊的控制字符,例如 Ctrl+C(通常用于发送中断信号)或 Ctrl+Z(通常用于挂起程序)。这些字符会直接发送到程序,程序可以自行决定如何处理它们。
需要注意的是,开启 "raw mode" 需要对终端和操作系统有深入的理解,并且可能需要特定的平台相关代码支持。在本次项目中我们决定使用
termbox-go
库来简化这个过程。以下翻译自termbox-go库的介绍:
Termbox是一个库,它提供了一种简洁的API,允许程序员编写基于文本的用户界面。该库是跨平台的,既有*nix操作系统上的基于终端的实现,也有Windows操作系统上基于winapi控制台的实现。基本的想法是以简洁的方式抽象出所有主要终端和其他类似终端API中可用的最大公共子集的特性。小型API意味着它易于实现,测试,维护和学习,这就是使termbox在其领域中成为一个独特库的原因。
通过go get指令引入代码库进入项目
go get -u github.com/nsf/termbox-go
这个库提供的API接口很多,我们需要了解以下三个函数:
termbox.Init()
termbox.Size()
termbox.PollEvent()
你的第一个任务是在屏幕的最左侧绘制一列波浪符(~),就像vim所做的那样。在我们的文本编辑器中,我们将在编辑的文件结束后的任何行的开头绘制一个波浪符,当前你可以使用fmt.Printf来进行绘制。其次当输入
q
的时候,结束程序运行。
Code Review
我的实现
editor
termbox.Size()
termbox.PollEvent()
q
needQuit
true
在这个作业中我们对波浪线~的画法进行优化,使用termbox的api进行绘制,同时展示出光标。
需要注意的是当终端正在绘制屏幕时,光标可能会在屏幕中间的某个地方闪现,。为了确保这个闪烁效果不会发生,我们需要在刷新屏幕之前隐藏光标,并在刷新完成后立即显示出来。你需要完成如下功能:
Code Review
我的实现
热门推荐
七月直播app安卓版
2022-11-03 18:41:45街头竞赛安卓版游戏下载-街头竞赛安卓游戏下载v1.0-圈圈下载
2023-02-06 21:53:36绯红的神约手游安卓版下载-绯红的神约二次元日系科幻风可爱兽娘手游下载v1017031
2023-03-04 10:51:30死亡搁浅error弹窗闪退怎么办-死亡搁浅弹出error的解决方法
2023-04-13 15:54:45挑战大合集游戏下载,挑战大合集游戏官方安卓版 v183.1.0.3018
2023-05-13 07:44:19狙击手特种部队3D游戏下载-狙击手特种部队3D最新版下载v1.5
2023-06-03 11:40:05人气榜