在Golang,如何使终端输入始终处于底部?
我试图创建一个程序,将有一些数据源的实时更新。我还想像普通终端一样等待用户输入。现在,每当有更新时,我都会打印内容并再次打印输入提示消息,这会创建如下内容:在Golang,如何使终端输入始终处于底部?,go,terminal,Go,Terminal,我试图创建一个程序,将有一些数据源的实时更新。我还想像普通终端一样等待用户输入。现在,每当有更新时,我都会打印内容并再次打印输入提示消息,这会创建如下内容: Enter command > This is a live update message Enter command > This is a multi-line li...... ......ve update message Enter command > quit Bye bye! 问题是,对于我收到的每
Enter command >
This is a live update message
Enter command >
This is a multi-line li......
......ve update message
Enter command > quit
Bye bye!
问题是,对于我收到的每一条实时消息,我都会打印它,并且“Enter command>”会一次又一次地显示出来,这是不需要的。我希望在终端的主要部分更新实时更新,而“Enter command>”始终保持在底部
我能在Github上找到的最接近的包是,但里面的大多数示例都试图显示文本、仪表和图形。所以我不太确定如何开始
是否有任何termui包或示例可以实现这一点?谢谢你。你正朝着正确的方向前进
去理解为什么你不能得到它
我希望在终端的主要部分更新实时更新,而“Enter command>”始终保持在底部
部分整理完毕后,我们将对计算的历史进行一次小小的回顾。;-)
问题是,终端仿真器的默认工作模式是
在计算机将如何与操作员进行通信的时代
字母数字显示器-他们将使用行打印机打印他们的响应。现在想想看:行式打印机的工作原理是这样的:它在一卷纸上打印发送给它的任何东西。什么是输出,什么是输出。
新的输出在物理上始终显示在旧输出的下方
当字母数字显示器(屏幕)出现时
自然继续支持这种模式:
要输出的行文本在屏幕底部呈现
上面的文字向上滚动。
当您在emulator窗口运行的shell(例如bash
)的命令行中工作时,您在典型的终端仿真器中始终可以看到这一点。
默认情况下,终端的工作模式称为“规范”或“熟食”
随后出现了更先进的显示器,可以对其进行更改
屏幕上的各个位置-通过其列和
行号。
这改变了信息输出的范式:概念
一种所谓的“全屏应用程序”诞生了。
典型的例子是文本编辑器,比如Vim和Emacs
为了支持全屏文本输出,终端(和终端模拟器)
通过对其协议进行某些扩展进行调整
全屏应用程序首先请求终端切换到另一个
一种称为“原始”的模式,在这种模式下,终端发送用户输入的大部分内容
用户直接访问终端上运行的程序。
该程序处理该输入,并命令终端在何处和做什么
画。
你可以阅读
两种模式之间的区别
正如你现在所怀疑的那样,能够保留一些街区
在终端文本屏幕的某个固定位置显示信息,
您希望您的程序是一个全屏程序,并使用终端的
原始模式及其特殊命令,允许您直接修改
某些字符单元格中的文本
现在的问题是不同的终端(和终端模拟器)
有不同的命令来执行此操作,因此存在要隔离的库
从这些血淋淋的细节中删除程序。他们依靠特殊的“终端”
“信息数据库”,以确定终端具有哪些功能
以及如何让它按照程序的要求去做。
有关更多背景信息,请参见man terminfo
最广为人知的此类库(用C编写)称为ncurses
,
而且,对于Go,存在着本机解决方案,这些解决方案被认为是最明显的
一个人
github.com/gizak/termui
使用了termboxgo
,但对您来说可能是这样
直接使用后者就足够了
➣你坐不住的几率非常高 A. 连接到UNIX®计算机,但在GUI应用程序中工作 例如GNOME终端或
xterm
或termal.app等。
这些本身不是“终端”,而是
—
也就是说,模拟硬件终端的软件片段。看看:但是,如果终端的默认行为不符合您的期望,那么可能使用不同的UI(例如web、桌面)可以做得更好?只是一个想法。