Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Golang,如何使终端输入始终处于底部?_Go_Terminal - Fatal编程技术网

在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、桌面)可以做得更好?只是一个想法。