Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ターミナル出力の色付け / Terminal output coloring
Search
Yoichi NAKAYAMA
September 08, 2020
Programming
0
150
ターミナル出力の色付け / Terminal output coloring
Yoichi NAKAYAMA
September 08, 2020
Tweet
Share
More Decks by Yoichi NAKAYAMA
See All by Yoichi NAKAYAMA
git-jumpを解放する / loosen editor dependency of git-jump
yoichi
0
1.3k
小さなOSS貢献の実践例 / A practical example of a small contribution to OSS
yoichi
0
130
パイプの話 / on pipe
yoichi
0
480
バイナリリーディング / Binary Reading
yoichi
0
360
OSS開発を楽しく続けてきた話
yoichi
0
810
Other Decks in Programming
See All in Programming
Signal-Based Data FetchingWith the New httpResource
manfredsteyer
PRO
0
140
地域ITコミュニティの活性化とAWSに移行してみた話
yuukis
0
200
「影響が少ない」を自分の目でみてみる
o0h
PRO
1
550
CRE Meetup!ユーザー信頼性を支えるエンジニアリング実践例の発表資料です
tmnb
0
590
Kubernetesで実現できるPlatform Engineering の現在地
nwiizo
3
1.8k
Devinのメモリ活用の学びを自社サービスにどう組み込むか?
itarutomy
0
1.9k
アーキテクトと美学 / Architecture and Aesthetics
nrslib
12
3.3k
AHC045_解説
shun_pi
0
400
snacks.nvim内のセットアップ不要なプラグインを紹介 / introduce_snacks_nvim
uhooi
0
380
The Weight of Data: Rethinking Cloud-Native Systems for the Age of AI
hollycummins
0
240
Going Structural with Named Tuples
bishabosha
0
190
フロントエンドテストの育て方
quramy
11
2.8k
Featured
See All Featured
Producing Creativity
orderedlist
PRO
344
40k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
12
640
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
510
GitHub's CSS Performance
jonrohan
1030
460k
Embracing the Ebb and Flow
colly
85
4.6k
For a Future-Friendly Web
brad_frost
176
9.6k
Unsuck your backbone
ammeep
670
57k
Docker and Python
trallard
44
3.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
A designer walks into a library…
pauljervisheath
205
24k
Transcript
ターミナル出力の色付け Yoichi Nakayama
ターミナル出力 プログラムが標準出力(stdout)や標準エラー出力(stderr)に書き込んだ内容はプログ ラムを実行したターミナル(terminal, 端末)上に出力される
ターミナル出力の例: ls ディレクトリ、実行権限が付いたファイルに色が付く
ターミナル出力の例: git diff ヘッダ、追加行、削除行に色が付く
ターミナル出力の例: git diff with delta シンタックスハイライト+行内の変更箇所にも色が付く https://github.com/dandavison/delta
ターミナル出力の例: emacs -nw モードに応じたシンタックスハイライト
色の付いた出力 普通に文字列を出力したときは単色だった プログラムによってはカラフルな出力がされていた →どうやったら色付けできるんだろう?
ls の出力を見てみる 出力をodにパイプしてバイナリダンプ 文字列と改行(0a)のみで特に変わったものは入ってない 改行?元々は一行の出力だったのに
感づかれてしまった パイプに気づいてlsは出力内容を変える→このままでは調べられない
回避 --color オプションを付けるとパイプしても色が付く→よさそう
色付き出力 色付き文字の手前に esc [ (CSI = Control Sequence Indicator)で始まる何か https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences
試してみる • echo -e で \xNN をバイトの16進表現と解釈してくれる • \x1b =
esc • esc [ 30~37 m 文字色設定 • esc [ 0 m リセット
まとめ • CSI シーケンスを出力してターミナル出力を制御できる • esc [ 30~37 m で文字色を8色から選んで設定できた
• パイプを検出すると色付けをやめる理由:余計なものが付くから ◦ ls | grep ^dir1$ ターミナルの色付け完全に理解した!
色付けの例: emacs -nw M-x list-colors-display → 8色で終わりじゃない
256 colors • 0~7: standard colors (ESC [ 30~37 m
と同じ) • 8~15: high intensity colors (ESC [ 90~97 m と同じ) • 16~231: 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5) • 232~255: grayscale
True Color (24bit) R(0~255), G(0~255), B(0~255) supported terminals: https://gist.github.com/XVilka/8346728#terminals--true-color
応用: longcat -pixterm ▄ (U+2584, LOWER HALF BLOCK) の文字色と背景色を指定している https://yoichi22.hatenablog.com/entry/2020/07/12/110838
おしまい ターミナル出力のさらなるトピック • DA1, DA2, DA3 • Sixel Graphics •
...