在bash脚本中使用“备用屏幕”

备用屏幕被诸如vim,htop,screen,alsamixer,less等许多“用户交互式”terminal应用程序所使用。它就像terminal内容的不同缓冲区,当应用程序退出时消失,所以整个terminal得到恢复,它看起来应用程序没有输出任何东西。

我想在我自己的shell(bash)脚本中实现完全相同的事情,除了它不必是便携式的。 我会坚持只有Linux和基于xterm的terminal仿真器; 但如果可能的话,解决scheme应该使用tput之类的东西。 但是,我不想使用一些外部脚本语言(甚至是像C这样的东西)。

尽pipe我不想使用C(因为它应该是一个尽可能less依赖的bash脚本),但我查看了less的源代码。 它似乎使用terminfo作为数据库,并在其初始化过程中查找“ti”terminal能力。 当删除线,它不使用替代sceen,所以我认为我find了负责任的代码行。

但是,我无法在man terminfofind这样的能力。 但是,也许我正在寻找解决scheme的错误path。 也许terminfo / tput不是我的朋友。

那么(如何)可以在bash脚本中使用备用屏幕? 有人知道一个简单的应用程序,其中的源代码,我可能会发现一个提示? (C应用程序或bash脚本或其他…)

Solutions Collecting From Web of "在bash脚本中使用“备用屏幕”"

您可以使用以下命令切换到备用屏幕:

 $ tput smcup 

回来:

 $ tput rmcup 

这些命令只是为您的终端输出适当的转义序列。 如果它是一个XTERM,它们将相当于(更为人所知,但较不雅观或便携):

 $ echo -e "\e[?1049h" 

和:

 $ echo -e "\e[?1049l" 

有关更多终端控制命令,请参阅man 5 terminfo

smcup / rmcup被使用,但仅用于副作用:在正常/替代屏幕之间切换的转义序列通常嵌入在那些terminfo能力中 – 并非总是如此。

一些背景是在xterm常见问题为什么在运行vi时屏幕不清楚?

对于C console应用程序:

ncurses的

维基百科:

ncurses(new curses)是一个编程库,它提供了一个API,允许程序员以独立于终端的方式编写基于文本的用户界面。

less使用这个库。

一个来自这里的 hello世界程序,在gcc中编译它,flag -lncurses是需要的。

 #include <ncurses.h> int main() { initscr(); /* Start curses mode */ printw("Hello World !!!"); /* Print Hello World */ refresh(); /* Print it on to the real screen */ getch(); /* Wait for user input */ endwin(); /* End curses mode */ return 0; }