在终端的第一行显示屏幕字幕


8

当我启动一个新的终端时,提示在第一行。工作了一会儿(或运行产生一些输出的命令)后,提示在最后一行。除非我按Ctrl- l,运行clearreset类似命令,否则它将在剩下的会话中保留下来。

为了获得某种程度的连续性,我使用screen了一个技巧来在标题中显示会话名称(我在中的两个screen命令中使用了最后一个.screenrc)。

为了避免由于工作区域混乱而造成的认知开销,我希望此标题显示在终端的顶部。

Answers:


3

您很幸运,屏幕确实会执行保存并重新执行命令。因此,使用bash即可完成。

说明如何使用特殊的转义序列来移动光标。您可以编写“ Hello World!” 到左上角:

echo -e "\033[s\033[2;0HHello World!            \n                        \033[u"

解释:字符\033[s保存了当前光标位置,这就是我们希望b / c屏幕终端大小可以变化很多的原因。然后\033[2;0将光标移到第三行到第一个字符(我们从左上角开始以0开始计数)。然后是文本和可能的一点说明。最后,代码\033[u将光标放回\033[s被执行的位置。

此示例将光标移动到第二行,因为发出命令时将打印2行换行符,因此当前的第三行将是第一行。

您可以将其与会话标题一起使用,您可以通过已链接的说明获得会话标题。


2
您可以使用tput与终端无关的方式来执行此操作,而无需对那些转义码进行硬编码。例如:echo -n "$(tput sc)$(tput cup 0 0)----Hello, world----$(tput rc)"
Jim Paris

我确定每个外壳程序都可以发出这些字符,但是我只知道bash :-)感谢tput输入,我对此一无所知。
Bananguin 2012年

@ user1129682:我尝试过screen $SHELL -c 'echo -n "$(tput sc)$(tput cup 0 0)${STY}$(tput rc)"'screen $SHELL -c 'screen -X caption always "$(tput sc)$(tput cup 0 0)${STY}$(tput rc)"'但是都没有用。有任何想法吗?
l0b0

取决于您想要什么。如果您只想在屏幕标题中关闭当前会话的标题,则可以screen -X caption always; screen -X caption string "%t"。如果要将当前标题放在左上角,则必须修改PS1环境变量以包含tput魔术。
Bananguin 2012年

@ l0b0:再读一遍,tput cup 0 0很可能会出现双换行符问题,这就是为什么我将文本放在第三行而不是第一行的原因。您是否尝试过tput杯子2 0或0 2 ...仍然没有读过tput杯子...
Bananguin 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.