**This is an old revision of the document!**

Term(终端) API

此API提供了向屏幕输出内容和读取用户输入的简便方法。因此你无需再手动操作GPU API实现这些功能。

  • term.isAvailable(): boolean
    返回term API是否可用,即是否存在主GPU和屏幕。换言之,term.readterm.write函数能否起到实际作用。
  • term.getViewport(): number, number, number, number, number, number
    (OpenOS 1.6新加入) 获取宽度、高度、x偏移量、y偏移量、x相对坐标、y相对坐标。
  • term.gpu(): table
    (OpenOS 1.6新加入) 获取term API使用的GPU代理。
  • term.pull([...]): ...
    (OpenOS 1.6新加入) 与event.pull的作用完全一致,接收同样的参数,返回同样的结果。此方法用于在等待事件结果时令光标闪烁。
  • term.getCursor(): number, number
    获取光标的当前位置。
  • term.setCursor(col: number, row: number)
    将光标位置设定为给定坐标。
  • term.getCursorBlink(): boolean
    获取光标闪烁是否启用,即光标是否每隔半秒在其位置实际显示的“像素”和纯白色方块间来回变换。
  • term.setCursorBlink(enabled: boolean)
    设定光标闪烁功能是否启用。
  • term.clear()
    清空整个屏幕,并将光标位置重置为(1, 1)。
  • term.clearLine()
    清空光标所在的行,并将光标的横坐标重置为1。
  • term.read([history: table[, dobreak:boolean[, hint:table or function[, pwchar:string]]]]): string
    从终端读取一些文本,即让用户能够输入一些文本。例如,此函数被shell和Lua解释器用来读取用户输入。此函数会使当前行从光标位置算起的剩余部分变为可编辑区域。在此区域中可以输入、删除文字,还可以使用左右方向键和home/end键移动光标。
    • 自OpenOS 1.6起 此处指定的参数列表已被视为过时。第一个参数为option(选项)参数。其索引值被作为histroy(历史)对待,命名键取代了旧的参数。出于兼容性考虑,OpenOS 1.6尊重了以前的用法,即参数列表。
    • 新的 ops 参数支持新键:nowrapterm.read的默认行为(nowrapfalse)垂直绑定了光标和输入。先前的行为模式下会水平滚动输入,即现在的 term.read({nowrap=true})

    可选的 history 表用于提供预定义文本,这些文本可以通过上下方向键循环选择。文本表必须为序列(即表中键值必须为从1开始的连续不间断的整数)。此功能的使用例为被shell和Lua解释器的命令历史功能。如果有文本输入并且被按下回车键确定,这条文本就会被加入表的末尾。 dobreak 参数在设定为 false设定为nil 默认是 true)时输入完成后(如用户按下回车键)不会换行。 hint 参数用于tab键补全。此参数可以为内容是字符串的表,或者接收两个参数并返回字符串表的函数,函数的参数为当前文本和在此文本中的位置,即回调函数的原型为 function(line:string, pos:number):table.。 pwchar 参数若给定,输入内容将会用给定字符串的第一个字符遮盖。例如,给定 "*" 将会导致输入的字符显示为星号。但返回值当然还是输入的实际内容。 此函数在输入成功后会返回一个字符串,管道关闭(^d)时会返回nil,管道中断(^c)时返回false注1: io.stdin:read() 使用了此函数。 注2:此函数将会把输入的字符串与\n(换行符号)一并返回。如果你只想要输入的字符串,请使用 io.read()

  • term.write(value: string[, wrap: boolean])
    用于将文本输出到终端上光标的当前位置,可选是否自动换行,输出时同时更新光标位置。此函数会自动将tab字符用 text.detab 转换。若 wraptrue ,函数将会对文本自动换行。若光标超出了显示区域底部,则函数会自动滚动显示缓冲区(屏幕内容)。但是在超出显示区域右边界时不会滚动(若wrapfalse)。 注:此方法遵循io重定义。这也就是说term.write 与 io.stdout 写入的是同一个流。
  • term.bind(gpu)

    (OpenOS 1.6新加入)
    将某个 gpu 代理对象(而不是地址)绑定到终端。若gpu与屏幕均可用,此方法在启动时会自动调用。请注意如果手动将终端重新绑定到高度和宽度不同的屏幕,终端绘制区域将会被剪裁,不能最大化显示。此函数改变了所有终端输出使用的gpu,不只是term api使用的,即包含 io.writeprintio.stdout:write以及所有使用同样输出流的函数。term.bind可用于修改上述函数使用的 gpu

  • term.screen(): string
    (OpenOS 1.6新加入)
    为了便利而引入的方法,仅仅是在终端绑定的gpu(参见term.bind)上调用了 getScreen
  • term.keyboard(): string
    (OpenOS 1.6新加入)
    获取终端用于接收按键事件的键盘地址。

目录