网站首页 > java教程 正文
想知道文本编辑器是如何工作的、shell 脚本如何改变终端文本颜色、在不滚动的情况下更新行或移动光标?在这里,学习如何。
您是否想知道文本编辑器是如何工作的,或者 shell 脚本如何更改终端文本颜色、在不滚动的情况下更新行或移动光标?惊喜,惊喜:即使作为 Java 开发人员,我们也可以做到这一点!
在本系列中,我将引导您使用Java构建基于终端的文本编辑器。
在第 1 部分中,学习如何使用 ANSI 转义码和原生 C 库通过 Java 进行精美的文本输出、与终端交互以及构建文件查看器框架。
视频中有什么
我们将通过解释一般项目设置来开始视频。事实上,要让我们的文本编辑器工作,您唯一需要做的就是安装 Java。我们将从一个空白的 Java 类开始,从那里开始我们将朝着工作文件查看器框架的方向努力。
作为一个简短的说明,该视频侧重于 Unix/macOS 终端。Windows 支持将在以后的剧集中添加。
要了解文本编辑器的工作原理,您首先需要了解ANSI 转义码是什么。它们是您输出到终端的特定字符串,可让您删除屏幕、单行、定位光标、更改文本颜色等等。更好的是,所有现代终端都默认理解它们。
接下来是了解如何将终端设置为“原始模式”。默认情况下,您的终端会逐行处理文本,回显我们键入的每个字符等等。我们不想要所有这些。但是,要进入原始模式,我们需要了解原生Unix API 以及如何使用 Java 访问它们。
Termios API 就是这样一种 API。它可以有效地让您将终端设置为原始模式;因此,我将向您展示如何使用 JNA访问 Termios API — 并执行相当多的按位与运算以使您的终端进入正确的模式。
有了 ANSI 转义码和终端原始模式知识,我们终于可以创建终端编辑器骨架了。当我们启动编辑器时,我们希望看到一个清晰的屏幕。此外,所有空行都应该以“~”符号开头,我们还应该在屏幕底部有一个漂亮的小状态栏——是时候实现了!
然而,为了正确实现状态栏和“~”符号,我们需要终端窗口实际有多少行和多少列的信息。您无法使用 Termios API 获取该信息,因此我们需要为此使用另一个原生 Unix API:IOCTL API。调用 IOCTL 时需要注意一些注意事项,因此我们将重点关注这一点。最终,连接 IOCTL API 后,我们的终端骨架实际上可以按预期工作,使用整个终端的宽度和高度。
我们快到了这一集的结尾,要不是因为一些微小的、讨厌的错误,比如屏幕闪烁和错误的光标定位。因此,我们将优化负责该行为的方法调用。
那是我们刚刚经历的很多概念!这就是为什么我们现在要结束,看看接下来会发生什么:加载和显示文本文件,以及能够移动光标。
https://youtu.be/kT4JYQi9w4w
猜你喜欢
- 2024-09-30 在大公司工作之后才真正领悟到它真的是宇宙级编辑器
- 2024-09-30 前端视角漫谈百度ueditor编辑器前后端分离配置
- 2024-09-30 MarkdownPad2 Pro,typora,atom三款markdown编辑器对比
- 2024-09-30 程序员专属的10个免费编程文本编辑器,哪个是你的最爱?
- 2024-09-30 CKEditor在线编辑器(ckeditor4)
- 2024-09-30 XML 编辑器(xml 编辑器 开源)
- 2024-09-30 程序员最感兴趣的4种编辑器(程序员编辑都是用什么软件)
- 2024-09-30 程序员最喜欢的4个编辑器(程序员用什么文本编辑器)
- 2024-09-30 Java基础——异常处理(异常处理 java)
- 2024-09-30 Java程序员,你会在Eclipse IDE中调试代码吗?
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)