終端仿真器中目前行的中心

終端仿真器中目前行的中心

我真正喜歡的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(刪除字元)

延伸閱讀:

相關內容