基于终端的阅读器开发

mebiusashan · · 1128 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
原文链接:[https://ashan.org/archives/950](https://ashan.org/archives/950) 我相对比较喜欢读书,但只读两种书,至少现在如此。一类是用于吃饭的书,编程类书籍,一类是供我休闲的书籍,各类小说。当然,在小说的种类上我也是有一定偏好的,例如,同事安利我的王小波的书,则安安静静的躺在书架上。 言归正传,前几日同事分享给我一些电子书,怎奈mac系统中没有让我心仪的阅读器,虽然ibook已经接近完美,但并不支持txt文本文件,借此机会用golang实现了一个基于终端的阅读器,方便自己读小说使用。 先来看一下最终的界面样式: ![](http://www.ashan.org/2017/04/1572837517839279940.png) ![](http://www.ashan.org/2017/04/2064372705462031638.png) 考虑到易用性问题,我必须寻找一款方便的终端绘图库,让界面开发起来更加容易一些。在C语言应用中,我们可以选择`ncurses`库,该库可以方便我们开发基于简单图形的终端程序,而该库并没有golang实现,在github一桶寻找后,我最终锁定了一个名为`termui`的第三方库,大家可以在[termui的github主页](https://github.com/gizak/termui)中找到该库。 我将该工具分为两部分,界面绘图部分,与配置记录部分。先来说说配置相关的一些情况。 ### 全部配置文件 上次编写博客系统的时候,发现一个比较不错的配置文件格式:toml,该格式的好处在于方便的映射为golang中的结构,同时配置信息无二义性,配置起来比较准确。在这个阅读器中,我们无需使用如此复杂的结构,仅需要告诉工具,我们的电子书文件所存放的路径。然后工具会扫描此路径下的所有文件(不包含子目录)。这些文件应该全部为文本文件。 而配置文件的内容,则仅有一句话,内容如下: ``` /Users/mebius/Documents/story/ ``` 该目录为电子书所存放的路径。 在业务逻辑中,我们需要在启动时,先行读取配置文件内容,然后进行后续逻辑操作。 ### 进度配置信息 在读取全部配置信息后,我们要记录不同书籍阅读的进度。但如何记录唯一电子书文件?可以使用文件名称,但一旦文件名发生变化,则所对应的进度则丢失。如果记录路径,也会发生问题。最终,我将每个图书文件生成对应的MD5值,这样即使文件名称和路径发生变化,都不会丢失进度信息,只要文件内容不发生变化。你也可以选取其他编码形式,只要唯一对应即可。 与之对应的还有一个记录文件进度的值,该值则记录阅读的位置,使用一个`int`来进行记录即可。 ### 界面逻辑 借助`termui`库,开发界面相对就容易很多,你可以借助该库搭建自己的控件,同时绑定对应的键盘相应事件,针对不同界面,对不同键盘事件进行交互操作。 在界面部分,我封装了一个`UIBar`的控件,用于显示操作提示,也是在画面最下方的工具条。同时两个界面,列表界面和阅读界面分别放到了两个界面封装中。最终的界面切换操作则由`UI`封装进行管理。 ### 开源代码 如果大家需要,或者有兴趣可以在我们的[command-book项目仓](https://github.com/mebiusashan/command-book)中拉取代码并编译为自己的工具使用。
1128 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传