终端仿真器中当前行的中心

终端仿真器中当前行的中心

我真正喜欢的emacs 缓冲区(甚至ansi-termshell和)的一项功能是能够将终端中的当前行“居中”,以便屏幕的上半部分仍然包含一些先前的输出。eshellC-l

似乎标准(不确定标准的名称是什么)终端在C-l按下时会将当前行移动到窗口顶部。有没有通用的方法将当前行移动到屏幕中心?如果没有,有没有办法专门针对 iterm2、终端或某些已移植到 OS X 的终端仿真器执行此操作?

答案1

大多数终端模拟器都可以“做到”这一点,但这需要一些工作:

  • 假设您要移动的行位于屏幕底部。
  • 如果您想向上移动该行,您可以通过向底行发送转义序列来滚动(或“索引”)该行,然后(计数!)将行向上移动您想要滚动的行数。
  • 滚动会移动屏幕上的所有行。您可以通过设置滚动区域来限制移动的行数。通过这样做,您可以防止屏幕上半部分的线条消失。但是线的原始位置和目标之间的线将会消失。

这只会使队伍向上移动。同样,您可以使用“反向索引”向下移动一行。顺便说一句,这些操作不在标准ECMA-48,但是类似于 xterm(基于 DEC vt100)。 ansi-term支持滚动/索引。

最后,这只是向上或向下。要向左/向右移动一行,您可以发送转义序列,以便在光标位于行开头时插入或删除字符。

这些转义序列记录在terminfo(5)手册页中。我已经提到过这些:

csr(设置滚动区域)
ind(索引)
rin(反向索引)
cup(光标位置)
ich(插入字符)
dch(删除字符)

进一步阅读:

相关内容