Created
October 17, 2023 10:39
-
-
Save tompng/571959391c84087a5380be04c43d8b86 to your computer and use it in GitHub Desktop.
ステータス下に出すやつ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'io/console' | |
num_status_lines = 4 | |
$SYMBOLS = Symbol.all_symbols | |
def status | |
bold = "\e[1m" | |
red = "\e[31m" | |
green = "\e[32m" | |
reset = "\e[m" | |
[ | |
"#{bold}[#{Time.now.to_i % 1234}/#{1234}]#{reset}", | |
*3.times.map do |i| | |
"#{$$ + i}=#{[red, green].sample}mtest_#{$SYMBOLS.sample}#{reset} (#{$SYMBOLS.sample(rand 1..3).join(' ')})" | |
end | |
] | |
end | |
Thread.new do | |
(1..).each do |i| | |
print "log: #{i}#{rand < 0.8 ? ' ' : "\n"}" | |
sleep 0.02 | |
end | |
end | |
# カーソルの下にステータス行分の空きを確保(ステータスの行数分改行、カーソルを上移動) | |
STDOUT.print "#{"\n" * num_status_lines}\e[#{num_status_lines}A" | |
height = nil | |
begin | |
loop do | |
height, width = IO.console.winsize rescue [24, 80] | |
# カーソルを下に移動して上に移動することで、ステータス領域にカーソルがないことを保証する(ウィンドウサイズを変えた時などにステータス行にあることがある) | |
output = +'' | |
output << "\e[#{num_status_lines}B\e[#{num_status_lines}A" | |
output << "\e7" # カーソル位置を保存 | |
output << "\e[1;#{height - num_status_lines}r" # スクロール範囲を設定 (winsize変わってるかもしれないので都度設定) | |
output << "\e[#{height - num_status_lines + 1};1H" # カーソルをステータス行に移動 | |
output << status.map { "\e[K#{_1[0, width]}" }.join("\n") | |
output << "\e8" # カーソル位置を復元 | |
STDOUT.print output # 割り込まれないように一気に出力 | |
sleep 0.5 | |
end | |
ensure | |
STDOUT.print "\e[r" # スクロール範囲を解除 | |
STDOUT.print "\e[#{height}H\n" if height # 画面下にカーソルを移動しておく | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment