TERM=哑终端必须具备的特性



我希望在golang中实现一个远程客户端,它通过nc连接到Linux并启动bash。所以我需要告诉bash我可以从它发送给我的stdout中解析哪些特征,以及我将如何将键码和其他东西发送给它的stdin,以便它也可以解析它们。

这是用TERM=something环境变量完成的,我需要将其设置为一些值。如果我不设置它,那么各种程序开始抱怨:

$ mc
The TERM environment variable is unset!

我发现我可以将TERM设置为dumb来表示我的客户端确实有限。但我似乎还是错过了什么。

$ export TERM=dumb
$ mc
Your terminal lacks the ability to clear the screen or position the cursor.

从这里看起来dumb终端没有这两个功能,但是它仍然期望有什么功能?有关于它的规范或实际标准吗?

找到源头会有帮助。终端数据库有注释。下面是其中的一个片段:

#### Specials
#
# Special "terminals".  These are used to label tty lines when you don't
# know what kind of terminal is on it.  The characteristics of an unknown
# terminal are the lowest common denominator - they look about like a ti 700.
#
dumb|80-column dumb tty,
        am,
        cols#80,
        bel=^G, cr=^M, cud1=^J, ind=^J,
unknown|unknown terminal type,
        gn, use=dumb,

"dumb"one_answers";unknown"假设终端类型,但很少使用:

  • "dumb"具有自边框(text "wrap ")),假定它有80列,一个ASCII BEL和回车。由于没有更好的选择,cud1(光标向下)是一个ASCII换行符。ind(索引)值是相同的,这意味着当您到达屏幕底部时,文本向上滚动。

    没有游标寻址(cup),也没有替代(例如任意移动一行或列)。

  • "unknown"添加"通用"标志,它将其标记为不适合由诅咒应用程序使用。把它想象成一台打印机。

至于最小需求,这实际上取决于单个应用程序。护士可以在没有cup的情况下在屏幕上移动。它有六种策略。如果您阅读mvcur的源代码,您可以了解它需要什么。

然而,像mc这样的应用程序并不是简单地依赖于护士来决定它是否工作,因为(在这种情况下)它可能与俚语联系在一起(后者不会密切检查)。所以mc自己检查,这可能会增加限制。

在实践中,除非您选择了一个有限的终端描述,如"dumb",否则您可能遇到的大多数终端都可以工作。

进一步阅读:

  • 终端间能力数据库
  • 诅咒到数据库终端的接口(包括mvcur)
  • ncurses/电传/lib_mvcur.c

您最好的信息来源将是终端条目,可以很容易地使用infocmp工具查看:

infocmp dumb
#       Reconstructed via infocmp from file: /lib/terminfo/d/dumb
dumb|80-column dumb tty,
        am,
        cols#80,
        bel=^G, cr=^M, cud1=^J, ind=^J,

相关内容

  • 没有找到相关文章

最新更新