我是编程新手,但我想知道诸如 vim、emacs、nano 等 shell 文本编辑器是如何控制命令行窗口的。我主要是一名 Windows 程序员,所以在 *nix 上可能有所不同。据我所知,只能将文本打印到控制台并要求输入。文本编辑器如何在命令行环境中创建可导航、可编辑的窗口?
8 回答
通过使用以下库,而这些库又使用转义字符序列
姓名 ncurses - CRT 屏幕处理和优化包 概要 #包括 描述 ncurses 库例程为用户提供了一个独立于终端的 合理优化更新人物画面的方法。这 实施是“新诅咒”(ncurses)并且是批准的替代品 用于 4.4BSD 经典的 curses,已停产。 [……剪断……] ncurses 包支持:整体屏幕、窗口和垫 操纵;输出到 windows 和 pads;阅读终端输入;控制 通过终端和诅咒输入和输出选项;环境查询 例行公事;颜色处理;使用软标签键;terminfo 能力; 并访问低级终端操作例程。
简短的回答:有它的库(如诅咒,俚语)。
更长的答案:通过打印特殊字符序列(称为转义序列,因为它们以 ESC 字符开头)来完成诸如用光标跳转或更改颜色之类的操作。
了解ncurses可能是一个很好的起点。
有一个基于“VT100”终端的称为 vt100 的旧协议。它使用以 escape 开头的代码来控制光标位置、颜色、清除屏幕等。
这也是您获得彩色提示的方式。
Google VT100 或“终端转义码”
编辑:我为你搜索了它:http ://www.termsys.demon.co.uk/vtansi.htm
如果您在 Windows 命令行控制台中键入“edit”,您也会注意到这一点。这个“特性”并不是类unix系统所独有的,尽管以这种方式操作windows控制台的概念与unix中的完全不同。
在 Unix 系统上,控制台窗口模拟一个古老的串行终端(通常是VT100)。您可以打印特殊控制字符和转义序列来移动光标、更改颜色和执行其他特殊效果。有一些库可以帮助处理细节;ncurses是最受欢迎的。
在 Windows 上,[Win32 控制台 API]( http://msdn.microsoft.com/en-us/library/ms682073(VS.85%29.aspx)提供了类似的功能,但方式却截然不同。
在命令行输入“c:\winnt\system32\edit”或“c:\windows\system32\edit”,您将看到一个命令行文本编辑器。
人们对用于控制命令屏幕的 ESC 字符大多是正确的,但一些较旧的程序也将字符直接写入 Windows 命令行屏幕使用的内存空间。
为了控制命令行窗口,您过去必须编写自己的窗口窗体、输入框、菜单等。您还必须将所有这些封装在一个大循环中以处理事件。
更具体的 Windows 命令行,该应用程序通常调用执行相同操作的 DOS 或 BIOS 函数。有时 ANSI 命令代码支持可用,有时则不可用(取决于确切的 MS 操作系统版本以及是否配置为加载它)。