编辑器 活跃维护

that_editor

bisqwit/that_editor

*那个*编辑。

479
Stars 标星
23
Forks 分支
7
Watchers 关注
2
Open Issues
C++
主要语言
GPL-3.0
开源协议
1.3 MB
仓库大小
7 年前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:bisqwit/that_editor
git clone https://github.com/bisqwit/that_editor.git
git clone git@github.com:bisqwit/that_editor.git
README.md master

机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。

那个编辑

就是那个编辑。

更多信息请访问: https://github.com/bisqwit/compiler_series/tree/master/ep1/dostools

什么

它是一个用于DOS环境的编程编辑器。更具体地说,它是一个看起来像用于DOS环境的编程编辑器的东西。

严格按现状提供,并附有轻微警告:你真的不想使用这个编辑器。说真的。它不会给你带来任何好处。请改用一个真正的编辑器(https://joe-editor.sourceforge.io/)。你可以让它看起来几乎完全相同,如果你想搭配一个窗口驻留工具,可以选择例如 MaCoPiX 。

它为什么存在

我是YouTube的视频制作人。我制作涉及各种主题的编程视频,从贪吃蛇游戏到3D引擎。

我通常使用Joe进行所有的编辑工作——无论是编程还是其他用途。它是一个基于终端的编辑器,所以我在Xterm中运行它。是的,即使在Windows上也是如此。

但在大约2010年左右,当我开始制作这些视频时,我的硬件太慢,无法进行任何实时桌面录制。这种情况一直持续到2016年。然而,DOSBox包含一个功能齐全的模拟环境,内置的视频录制器无论在什么样的电脑上运行都能完美工作。所以我不得不使用DOSBox。顺便说一下,DOS对我来说已经是一个非常熟悉的平台。

我的编辑器之所以被编写出来,是因为Joe无法在DOS上编译。

DOS确实存在其他语法高亮编辑器,我实际上也想并且确实使用过Borland C 3.1 IDE来制作我一些早期的视频。

但是后来我想制作一个更宽屏的视频,尽管我尽了最大努力,我还是无法将Borland C二进制修改得能完美配合非80字符宽的屏幕。所以我陷入了困境,只能自己做编辑器。我已经不记得如何使用Turbo Vision,而且我也懒得去学习,所以我完全从头编写了编辑器。

为什么是16位DOS

我为16位DOS编写了这个编辑器,因为我认为在尝试将16位中断回调与32位保护模式代码混合时会有重大问题。而且我当时可能还不知道DJGPP已经像现在这样现代化了(如果它真的已经现代化的话)。所以我用了Borland C 3.1。

Borland的这个编译器是在C标准化之前创建的,因此我在源代码风格/合理性上做出了很多牺牲。例如,它不支持命名空间或模板。没有STL!因此,这段代码不能代表C编程的良好实践,绝对不能。

顺便说一下,因为它是16位的,它还有严重的内存限制和其他相关的错误。最终这迫使我将它移植到32位DJGPP,尽管我一开始很担心。我在2018-01-12完成了这个移植,只用了几个小时(哈,也许编程风格其实并不是那么糟糕)。它可以在32bit目录中找到。请注意,尽管这个DJGPP移植版是在支持C17的非常现代的GCC 7.2.0上编译的,代码库几乎与Borland C版本完全相同。

如何使用它

你错过了我警告你真的不想使用这个编辑器的部分吗?你看到了?好。这个编辑器使用的大部分输入和我最喜欢的编辑器Joe相同。你可以在doc/子目录中找到键绑定列表。

它是如何工作的

文本存储

它将编辑器缓冲区表示为行向量。每行都是一种元素类型的向量,该类型编码了字符及其当前的颜色属性。这个颜色属性以前是兼容 VGA 的 8 位属性字节,但在提交 7321f15a 和 05eaf3c7 中,我添加了对 xterm-256color 兼容扩展颜色属性的支持,这顺便使编辑器的内存使用量翻倍。这需要 DOSBox 的 特殊支持。

语法高亮

语法高亮操作基于一个状态机,其模型参考了 Joe 中的语法高亮引擎。实际上,该编辑器使用与 Joe 完全相同的 JSF 文件来配置语法高亮。你可以在随 Joe 提供的 JSF 文件中了解更多关于 JSF 系统的信息。

语法高亮通过虚拟回调实时应用,该回调支持两个选项:获取下一个字符,以及使用选择属性重新为某些前一部分上色。源代码文件将从头到尾持续扫描,直到自上次更新以来所有内容至少被扫描过一次。

元素类型(16 位)

1615  1211   8        0
 +-+---+-+---+--------+
 |B|bbb|I|fff|cccccccc|
 +-+---+-+---+--------+
 B   = blink
 bbb = background color (0-7)
 I   = high-intensity
 fff = foreground color (0-7)
 ccc = character code (0-255)

元素类型(32 位)

With extended attribute (requires patched DOSBox):

323130292827262524       1615       8        0
 +-+-+-+-+-+-+-+-+--------+-+-------+--------+
 |1|f|B|v|o|i|d|u|bbbbbbbb|1|fffffff|cccccccc|
 +-+-+-+-+-+-+-+-+--------+-+-------+--------+

1   = Extended attribute flag
fff = foreground color (0-255); note MSB is stored separately
B   = blink
v   = inverse
o   = bold
i   = italic
d   = dim
u   = underline
bbb = background color (0-255)
ccc = character code (0-255)

Without extended attribute (compatible with any DOS system):

32               1615  12    8        0
 +----------------+-+---+----+--------+
 |0000000000000000|B|bbb|ffff|cccccccc|
 +----------------+-+---+----+--------+
 B   = blink
 bbb = background color (0-7)
 fff = foreground color (0-15)
 ccc = character code (0-255)

该属性字存储在视频 RAM 中的方式是,低 16 位存入 B800:0000 页,但高 16 位同时存入 B000:0000 页。DOSBox 被专门修改以处理这些数据并正确渲染。属性位的加倍是为了避免假阳性。

尚不支持的 ANSI 代码的 SGR 功能:

  • 不支持双下划线
  • 不支持删除线
  • JSF 自动转换反向,它不用于 VRAM
  • 不支持真正的 24 位 RGB

颜色

根据此图表: https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit

0=黑色   1=红色      2=绿色   3=黄色/棕色
4=蓝色    5=品红  6=青色    7=白色/浅灰色
8-15    = 0-7 的高强度版本(其中 15=白色)
16-231 = 6x6x6 RGB 立方体
232-255 = 灰阶过渡

具体数值如下:

static unsigned xterm256table[256] =
    { Make(0,0,0), Make(21,0,0), Make(0,21,0), Make(21,5,0),
      Make(0,0,21), Make(21,0,21), Make(0,21,21), Make(21,21,21),
      Make(7,7,7), Make(31,5,5), Make(5,31,5), Make(31,31,5),
      Make(5,5,31), Make(31,5,31), Make(5,31,31), Make(31,31,31) };
静态常量无符号字符 grayramp[24] = { 1,2,3,5,6,7,8,9,11,12,13,14,16,17,18,19,20,22,23,24,25,27,28,29 };
静态常量无符号字符 colormap[6] = { 0,12,16,21,26,31 };
for(unsigned n=0; n<216; ++n) { xterm256table[16+n]  = Make(colorramp[(n/36)%6], colorramp[(n/6)%6], colorramp[(n)%6]); }
for(unsigned n=0; n<24; ++n)  { xterm256table[232+n] = Make(grayramp[n],grayramp[n],grayramp[n]); }

字体

在 8x16、8x14 和 8x8 模式下(以及 9x16、9x14、9x8),字体由主机计算机的 VGA BIOS 提供。编辑器对于这些模式并没有自带字体。假定存在一套字体。这一假设是正确的。

在 8x15、8x10、8x12、4x8、8x19 和 8x32 模式下,编辑器提供自己的字体,这些字体主要是通过对标准 IBM PC 字体进行上下缩放算法生成。你可以在此仓库的 .inc 文件中找到这些字体。不,这些不是 Windows 字体文件。这本身就不是一个 Windows 程序。

温度

温度信息是附加内容。它是编辑器中的硬编码文本。没有进行自动测量。

CPU 速度

编辑器在运行时会定期测量 CPU 速度。如果在 DOSBox 中运行,它也会不断改变 CPU 速度。CPU 速度根据语法高亮在编辑后完成所需的时间长短而进行调节。

人物动画

顶部的 Mario 人物动画使用了 Norton 工具在 DOS 上渲染文本模式下图形鼠标光标的相同原理。

它读取当前位于 Mario 人物下的字符字体,将这些字符视为位图,加入 Mario 人物,然后将修改后的字符安装到字体中,并在屏幕上将该位置的字符索引替换为指向修改后的字符。

编译

16位 DOS

要为16位DOS构建,请启动DOSBox并使用 make.bat。您可能需要先编辑 make.bat 中的路径。

这需要以下程序存在:

  • Borland C 4.52 编译器 (bcc.exe) 已经测试可以使用。版本 3.1 可能可以使用,但你可能需要删除一些命令行选项。
  • Turbo 汇编器,任何版本都可以使用,但已经测试过 5.0 可以工作。TASM 3.1 和 4.1 似乎可以使用,但你必须先删除输出文件。
  • Turbo Link,任何版本,但已经测试 7.0 可用。

32位 DOS (DPMI)

要为32位DOS构建,在Linux中打开终端,进入32bit子目录并运行make。你需要安装DJGPP,当然还需要make。

要在 Debian 上安装 DJGPP,请从 DJGPP 镜像下载以下软件包,例如 ftp://ftp.fu-berlin.de/pc/languages/djgpp/rpms/ :djcrx-(someversion).rpm、djcross-binutils-(someversion).rpm、djcross-gcc-(someversion).rpm 和 djcross-gcc-c++-(someversion).rpm。

然后运行 fakeroot alien dj*.rpm 和 dpkg -i dj*.deb。

示例(以足够小的格式以适应 280 字符推文):

sudo apt-get install fakeroot alien wget make
wget -c http://mirrors.fe.up.pt/pub/djgpp/rpms/djcr{oss-{binutils-2.29.1,gcc-7.3.0/djcross-gcc-{,{c++,info,tools}-}7.3.0}-1ap,x-2.05-5}.x86_64.rpm
fakeroot alien dj*.rpm
sudo dpkg -i dj*.deb

DJGPP 程序需要 32 位 DOS 扩展器(DOS 受保护模式接口,DPMI)才能运行。可以从 https://sourceforge.net/projects/hx-dos/files/ 下载一个示例 DPMI 驱动程序(HDPMI32),例如: https://sourceforge.net/projects/hx-dos/files/2.17/hxrt217.7z/download

Linux

截至2018-10-28,编辑器也可以在Linux上编译。(64位没问题。)进入32bit子目录并运行make e。你需要安装带有开发头文件的SDL2库。

请注意通常的免责声明。此编辑器不适合人类使用。

注意事项:

  • 此版本针对芬兰键盘布局进行了硬编码。
  • 它也使用 8 位 CP437 字体。不支持 Unicode。
  • SDL2 在报告 Ctrl 键的按下事件时相当不稳定。有时它会先报告普通键的按下事件,然后紧接着报告带 Ctrl 修饰符的键按下事件。有时顺序则相反。这在你按下 Ctrl 键组合时会在这个编辑器中表现为恼人的故障。我已经尽力尝试解决,但仍然不稳定。在 DOS 版本中根本不会发生这种情况。
  • 你的窗口管理器可能会吞掉并屏蔽这个程序支持的一半热键,尤其是功能键。
  • 在 Linux 版本上无法运行 DOS-inputter。如果你想使用自动输入,你将不得不寻找其他解决方案。

对不起!

功能

纸糊的布景。这基本上就是好莱坞。

嗯,说实话,这个编辑器确实支持四个同时光标、完整的撤销重做……但是测试和开发都是由我的视频制作决定的。毕竟我只在这些视频中使用这个编辑器。而在那些视频中,我只需要非常基本的一些功能。具体细节请查看 doc/ 目录。

我再次提醒,这个编辑器并不是为人使用而设计的。它的设计目的是看起来像是被人使用的。

本站来源与版权声明
  • 本文标题:that_editor - *那个*编辑
  • 本文链接:https://www.cn121.com/editor/bisqwit-that-editor.html
  • 原项目:bisqwit/that_editor 版权归原作者 bisqwit 及贡献者所有
  • 收录信息:本站于 2026-10-10 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 GPL-3.0(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。基于本页内容形成的衍生作品, 须同样以该协议发布。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 bisqwit/that_editor。
  • 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。