OS Xterminal线路不进入回滚

当使用Mac OS X的terminal(TERM = xterm)时,我遇到了一个问题:有时它会进入一种状态,在这种状态下,顶部滚动的行不会被添加到回滚缓冲区中。 我没有使用screen或类似的; 这是一个terminal选项卡内的简单的bash shell

打开新选项卡后不会立即执行此操作。 我相信这是我在问题选项卡中运行的一个副作用。 我的猜测是它与xterm仿真有关,可能是滚动区域。

什么没有工作:

  • 通过Shell菜单进行软复位和硬复位
  • 在选项卡中运行reset

有没有可靠的方法来重置terminal和/或xterm状态?

任何人都可以提供解释发生了什么,即使唯一的解决办法是closures选项卡,并打开一个新的?

这意味着terminal正在使用备用屏幕缓冲区。 有一个主屏幕滚动到回滚日志中,另一个屏幕不显示。 “全屏”或“面向屏幕”的程序,例如top,less,emacs,vim和screen,默认将terminal切换到备用屏幕。

每个屏幕都有自己的内容和状态。 有一个替代的屏幕使程序能够接pipe整个显示器,然后通过切换回主屏幕来恢复先前的内容。

从Mac OS X Lion 10.7开始,terminal有一个菜单项可以用来手动切换屏幕:

查看>显示/隐藏备用屏幕

这主要是为了在“全屏”程序退出后,您可以从备用屏幕查看或复制文本。 Xterm有一个类似的命令。

例如,您也可以使用它来手动强制程序使用特定的屏幕,以控制输出是否转到回滚日志。 但是,如果您当前正在使用明确切换到备用屏幕的程序,则可能会在程序运行时将其强制显示在主屏幕上,从而引起意外的结果,因此请谨慎使用。

根据程序的不同,它可能有一个命令行参数或其他方法来configuration它来使用主屏幕。 例如less -X

一些terminfo条目是专门devise用于禁止使用替代屏幕,例如xterm1TERM=xterm1 emacs将在主屏幕上运行Emacs。 我不推荐永久使用xterm1 ,因为它与Lion上的默认xterm-256color相比,禁用了许多其他有用的function。

您也可以使用tput命令来切换屏幕,从shell或脚本中发出转义序列。 tput smcup切换到备用屏幕,然后tput rmcup主屏幕。

要查看当前正在运行哪个程序,请查看“terminal”窗口或选项卡标题中显示的程序名称,或者查看“检查器”窗口( Shell> Show Inspector )。 Inspector列表中的最后一个过程通常是使用屏幕的当前程序。 这是你需要configuration来使用主屏幕,而不是。