在 FreeDOS 中像 Emacs 一样编辑文本

如果您已经熟悉 GNU Emacs,那么您应该会在 Freemacs 中感到宾至如归。
29 位读者喜欢这篇文章。
Typewriter in the grass

原始照片由 jetheriot 拍摄。由 Rikki Endsley 修改。CC BY-SA 2.0。

在 Linux 上,我经常使用 GNU Emacs 编辑器来编写新程序的源代码。我很早以前在读本科时就学会了 GNU Emacs,并且仍然对所有的键盘快捷键有“手指记忆”。

当我在 1994 年开始 FreeDOS 的工作时,我想包含一个类似 Emacs 的文本编辑器。您可以找到许多类似于 Emacs 的编辑器,例如 MicroEmacs,但这些编辑器都采用了一些快捷方式来适应 DOS 上的 16 位地址空间。然而,我很高兴找到了 Russell "Russ" Nelson 编写的 Freemacs。

您可以在 FreeDOS 1.3 RC4 的 Bonus CD 中找到 Freemacs。您可以使用 FDIMPLES 安装该软件包,它将安装到 \APPS\EMACS

installing Freemacs

从 FreeDOS 1.3 RC4 Bonus CD 安装 Freemacs

(Jim Hall, CC-BY SA 4.0)

初始设置

首次运行 Freemacs 时,编辑器需要“编译”所有设置文件,使其成为 Freemacs 可以快速处理的形式。这将需要几分钟才能运行,具体取决于您系统的速度和内存,但幸运的是,您只需要执行一次。

Running Freemacs for the first time

按 Y 构建 Freemacs MINT 文件

(Jim Hall, CC-BY SA 4.0)

Freemacs 实际上分两个阶段处理编辑器文件。当 Freemacs 成功完成第一阶段后,它会提示您重新启动编辑器,以便它可以完成处理。因此,不要对该过程似乎再次启动感到惊讶——这只是编译过程的“第二部分”。

使用 Freemacs

要使用 Freemacs 编辑文件,请使用文本文件作为命令行上的参数启动程序。例如,emacs readme.doc 将打开 Readme 文件以便在 Freemacs 中进行编辑。在命令行中键入 emacs,不带任何选项,将在 Freemacs 中打开一个空的“scratch”缓冲区。

Freemacs

不带任何文件启动 Freemacs 会打开一个“scratch”缓冲区

(Jim Hall, CC-BY SA 4.0)

或者,您可以启动 Freemacs 而不带任何命令行选项,并使用 Emacs 快捷键 C-x C-f(或 M-x find-file)。然后,Freemacs 会提示您输入要加载到编辑器中的新文件。快捷键前缀 C- 表示您应该按住 Ctrl 键和另一个键,因此 C-xCtrlx 键一起按下。而 M-x 是“按下 ‘Meta’ 键(通常是 Esc 键),然后按 x”的简写。

Freemacs

使用 C-x C-f 打开新文件

(Jim Hall, CC-BY SA 4.0)

Freemacs 会自动检测文件类型并尝试加载正确的支持。例如,打开 C 源代码文件也会将 Freemacs 设置为 “C-mode”。

Freemacs

在 Freemacs 中编辑 C 源代码文件

(Jim Hall, CC-BY SA 4.0)

如果您也使用 GNU Emacs(像我一样),那么您可能很想让 Freemacs 与 GNU Emacs 使用的 C 缩进(2 个空格)相匹配。以下是如何将 Freemacs 设置为在 C-mode 中使用 2 个空格

  1. 在 Freemacs 中打开 C 源代码文件。
  2. 输入 M-x edit-options 以编辑 Freemacs 设置。
  3. 使用设置将 “C-brace-offset” 和 “C-indent-level” 都更改为 2。
  4. 保存并退出 Freemacs;系统将提示您保存设置。

一些限制

Freemacs 的其余大部分操作都像 GNU Emacs 一样。如果您已经熟悉 GNU Emacs,那么您应该会在 Freemacs 中感到宾至如归。但是,Freemacs 确实有一些您可能需要知道的限制

扩展语言不是 LISP。 GNU Emacs on Linux 和 FreeDOS 上的 Freemacs 之间最大的区别是 Freemacs 使用不同的扩展语言。GNU Emacs 实现了一个类似 LISP 的解释器,而 Freemacs 实现了一种不同的扩展语言,称为 MINT——基于字符串处理语言 TRAC。“MINT”这个名称是一个首字母缩写词,意思是“MINT Is Not TRAC”。

您不应期望在 Freemacs 中评估 LISP 代码。MINT 语言与 LISP 完全不同。有关 MINT 的更多信息,请参阅参考手册。我们通过 Ibiblio 上的 FreeDOS 文件存档提供完整的文档,网址为 /freedos/files/edit/emacs/docs。特别是,MINT 语言在 mint.txtmint2.txt 中定义。

Freemacs 无法打开大于 64 KB 的文件。 这是许多程序中的常见限制。64kb 是不利用扩展内存的程序的数据空间的最大大小。

没有“撤消”功能。 编辑时要小心。如果您犯了错误,您将必须重新编辑您的文件才能将其恢复到旧版本。此外,尽早且经常保存。对于非常大的错误,您最好的方法可能是放弃您在 Freemacs 中编辑的版本,并加载上次保存的版本。

剩下的就看您的了!您可以在 Ibiblio 上找到有关 Freemacs 的更多信息,网址为 /freedos/files/edit/emacs/docs。有关 Freemacs 的快速入门指南,请阅读 quickie.txt。完整的说明书在 tutorial.txt 中。

接下来阅读什么

FreeDOS 入门

它看起来像复古计算,但它是一个现代操作系统,您可以用来完成工作。

(通讯员)
2021 年 6 月 1 日

如何将 FreeDOS 用作嵌入式系统

如今,许多嵌入式系统都在 Linux 上运行。但在很久以前,嵌入式系统要么在自定义的专有平台上运行,要么在 DOS 上运行。

(通讯员)
2021 年 6 月 16 日

为什么 FreeDOS 有 16 种颜色

为什么文本只有这个有限的调色板,以及为什么 FreeDOS 使用这些颜色和色调,而不是其他颜色?答案就像技术中的许多事物一样,是……

(通讯员)
2021 年 6 月 17 日
photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发人员,以 GNOME 中的可用性测试以及作为 FreeDOS 的创始人 + 项目协调员而闻名。

1 条评论

64K 文档限制不是“扩展”内存的功能(“扩展”内存是 DOS PC 访问超过 640K RAM 的几种机制之一,“扩展”是使用 286+ 处理器的保护模式的一种),而是 x86 处理器“实模式”中运行的软件使用的各种内存模型的功能。

在实模式下,内存使用段和偏移量进行管理。段是 64K 的内存区域。段寄存器是一个 16 位值,表示除以 16 的物理内存位置。偏移量是从段开始处的 16 位偏移量。是的,64K 个可能的段之间存在大量重叠。这也是定义 1MB 传统地址空间的原因。

任何内存指针可能是“近”指针,这意味着它是 CPU 段寄存器之一(代码段和数据段)的 16 位偏移量,也可能是“远”指针,这意味着它是包含段地址和从该段开始的偏移量的 32 位值。

DOS 和实模式的编译器定义了内存模型,这些模型指定应用程序默认使用哪种类型的指针(应用程序始终可以显式声明指针是近指针还是远指针)。

“tiny”模型意味着所有指针都是近指针,而且代码段寄存器和数据段寄存器具有相同的值。因此,整个应用程序必须适合 64K RAM 内。

“small”模型的所有指针都是近指针,但具有不同的代码段和数据段。因此,应用程序限制为 64K 代码和 64K 数据。

“compact”模型具有近代码指针但远数据指针。因此,应用程序最多可以有 64K 代码,但可以使用所有可用的 RAM 用于数据。

“medium”模型具有远代码指针和近数据指针。因此,应用程序可以使用所有可用的 RAM 用于代码,但最多可以使用 64K 数据。

“large”模型具有远代码指针和远数据指针。因此,应用程序可以使用所有可用的 RAM 用于代码和数据。但标准库(如 C 运行时库)会将任何单个内存对象限制为 64K。

“huge”模型类似于 large 模型,但标准库包含允许单个对象与可用 RAM 一样大的代码,但代价是访问对象时指针算术更复杂(因此性能更低)。

Freemacs 可能使用 large 模型编写,并且正在使用单个内存缓冲区对象来处理文档,因此文档大小限制为 64K。这是 DOS 应用程序最流行的内存模型,因此我对 Freemacs 使用它并不感到惊讶。

另请参阅 https://devblogs.microsoft.com/oldnewthing/20200728-00/?p=104012

© . All rights reserved.