前言
- 在測試 crystal-lang 的時候需要清空 terminal 的文字,剛好找到相關的方法 [1],順便紀錄。
說明
clear
- 最基本的方式,就是下
clear
指令;但是這實際上沒有清空螢幕:滾輪往上滾還是看得到之前的記錄。
|
|
如果想要完全清空文字呢?也就是連滑鼠滾輪往上滾都沒有東西?
clear 加上 ‘\e[3J’
- 改良一下:
|
|
這代表除了把螢幕清空,還順便把之前的記錄清除了。
Note
-
大部分的 terminal 都認得這種 ANSI escape sequences [2],例如
vt100
、xterm
。(不過我也不搞得很清楚各式各樣的 terminal 就是) -
\e
是ESC
(escape),ASCII 中的第 27 碼。 -
總之,形如
<ESC>[
稱為 Control Sequence Introducer [3,4],代表要對 terminal 做額外的控制。 -
而後面的
3
是參數、J
對應的是ED
(Erase Display) [3]
能不能再簡潔一點?
直接用 ‘\33c\e[3J’
- 一行處理掉!
|
|
Note
-
\33c
:33
是用8
進位表示,也就是十進位的27
、 ASCII 編碼中的第 27 號,表示ESC
(escape),同上面的 NOTE。 -
而
<ESC>c
(後面跟著一個c
),代表的是 reset device [7] -
\e[3J
的說明參考上方
ESC (escape) 自由改寫
從上面的說明,大概會發現 <ESC>
有兩種寫法:
-
\33
(or\033
) -
\e
都是代表 <ESC>
。
所以上面的跳脫符號實際上你可以自由替換,只要符合 <ESC>c<ESC>[3J
即可
|
|
REF
-
https://stackoverflow.com/questions/64396763/clear-terminal-console-in-crystal-cli
-
https://stackoverflow.com/questions/2198377/how-can-i-clear-previous-output-in-terminal-in-mac-os-x
-
https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797
-
https://stackoverflow.com/questions/47503734/what-does-printf-033c-mean