% Goと端末制御シーケンス % haru % 2018/12/03
- @uobikiemukot
- 業務
- Ruby (サーバーサイド)
- 趣味の開発
- 端末エミュレータ 「yaft」
(元々は) Linux framebuffer用 端末エミュレータ
課題3-2 「分割ダウンロードを行う」
$ ./rget https://blog.golang.org/gopher/header.jpg > header.jpg
$ echo $?
0
…地味 🤔
ダウンロードの進捗を表示したい!
var aa = []string{"-", "\\", "|", "/"}
...
for {
select {
case <-tick:
if counter > 0 {
fmt.Printf("\x08")
}
fmt.Printf("%s", aa[counter%len(aa)])
counter++
...
}
}
https://gist.github.com/uobikiemukot/c769f4ce1d3683bc16893b0bbb455a21#file-lt1-gif
var aa = []string{"-", "\\", "|", "/"}
...
for {
select {
case <-tick:
if counter > 0 {
fmt.Printf("\x08") // Backspaceで一文字消している
}
fmt.Printf("%s", aa[counter%len(aa)])
counter++
...
}
}
man ascii
- Bell:
\x07
- ビープを鳴らす
- BackSpace:
\x08
- 直前の1文字を削除
- Tab:
\x09
- タブ
- Newline:
\x0A
- 改行
- ESC:
\x1B
- より複雑な端末の制御 (後述)
if counter > 0 {
fmt.Printf("\x1b[G")
fmt.Printf("\x1b[K")
}
for i := 0; i < 10; i++ {
if i <= counter {
fmt.Printf("=")
} else {
fmt.Printf("-")
}
}
fmt.Printf(" %d%%", (counter + 1) * 10)
counter++
https://gist.github.com/uobikiemukot/c769f4ce1d3683bc16893b0bbb455a21#file-lt2-gif
if counter > 0 {
fmt.Printf("\x1b[G") // 行の先頭へ移動
fmt.Printf("\x1b[K") // 1行削除
}
for i := 0; i < 10; i++ {
if i <= counter {
fmt.Printf("=")
} else {
fmt.Printf("-")
}
}
fmt.Printf(" %d%%", (counter + 1) * 10)
counter++
http://uobikiemukot.github.io/yaft/escape.html
\x1b [ G
- カーソルを行の先頭へ移動
\x1b [ Pl ; Pc H
- カーソルを (Pl 行, Pc 列) へ移動
\x1b [ K
- 行を削除
\x1b [ J
- 画面を削除
...
fmt.Printf("\x1b[3%dm", counter%8)
for i := 0; i < 10; i++ {
if i <= counter {
fmt.Printf("=")
} else {
fmt.Printf("-")
}
}
fmt.Printf(" %d%%", (counter + 1) * 10)
fmt.Printf("\x1b[0m")
counter++
https://gist.github.com/uobikiemukot/c769f4ce1d3683bc16893b0bbb455a21#file-lt3-gif
...
fmt.Printf("\x1b[3%dm", counter%8) // 文字色を指定
for i := 0; i < 10; i++ {
if i <= counter {
fmt.Printf("=")
} else {
fmt.Printf("-")
}
}
fmt.Printf(" %d%%", (counter + 1) * 10)
fmt.Printf("\x1b[0m") // 色を解除
counter++
\x1b [ Ps m
- Ps =
0
- 全ての属性を解除
- Ps =
21
- ボールド
- Ps =
31
- 文字色を赤に
- Ps =
41
- 背景色を赤に
- Ps =
38;5;Ps
- xterm 256色拡張
- Ps =
- termbox
- https://github.com/nsf/termbox-go
- ncurse的なライブラリ
- color
- https://github.com/fatih/color
- 文字色を扱うライブラリ
- pb
- https://github.com/cheggaaa/pb
- プログレスバーの表示
http://web.archive.org/web/20130125000058/http://www.frexx.de/xterm-256-notes/
https://gist.github.com/uobikiemukot/c769f4ce1d3683bc16893b0bbb455a21#file-xterm256-gif
https://github.com/mattn/go-sixel
https://gist.github.com/uobikiemukot/c769f4ce1d3683bc16893b0bbb455a21#file-gosr-gif
ありがとうございました 🙇♀️
https://gist.github.com/uobikiemukot/c769f4ce1d3683bc16893b0bbb455a21#file-lt4-gif