Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
ターミナル出力の色付け / Terminal output coloring
Yoichi NAKAYAMA
September 08, 2020
Programming
0
56
ターミナル出力の色付け / Terminal output coloring
Yoichi NAKAYAMA
September 08, 2020
Tweet
Share
More Decks by Yoichi NAKAYAMA
See All by Yoichi NAKAYAMA
小さなOSS貢献の実践例 / A practical example of a small contribution to OSS
yoichi
0
46
パイプの話 / on pipe
yoichi
0
290
バイナリリーディング / Binary Reading
yoichi
0
140
OSS開発を楽しく続けてきた話
yoichi
0
510
Other Decks in Programming
See All in Programming
Quarto Tips for Academic Presentation
nicetak
0
890
WordPress(再)入門 - 基礎知識・環境編
oleindesign
1
120
新卒2年目がデータ分析API開発に挑戦【Stapy#88】/data-science-api-begginer
matsuik
0
330
Rによる大規模データの処理
s_uryu
2
620
AWS App Runnerがそろそろ本番環境でも使い物になりそう
n1215
PRO
0
870
Remote SSHで行うVS Codeリモートホスト開発とトラブルシューティング
smt7174
1
420
%q is for Quine
koic
0
400
【DevFest & ADS JP 22】チームで導入する
[email protected]
おいしい健康
kako351
0
210
Felteで作る簡単フォームバリデーション
kubotak
1
140
Hasura の Relationship と権限管理
karszawa
0
160
なぜRubyコミュニティにコミットするのか?
luccafort
0
300
SHOWROOMの分析目的を意識した伝え方・コミュニケーション
hatapu
0
230
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
87
12k
Side Projects
sachag
451
37k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
Adopting Sorbet at Scale
ufuk
65
7.8k
Visualization
eitanlees
128
12k
Become a Pro
speakerdeck
PRO
6
3.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
338
18k
The Mythical Team-Month
searls
210
40k
Robots, Beer and Maslow
schacon
154
7.3k
Keith and Marios Guide to Fast Websites
keithpitt
407
21k
How GitHub Uses GitHub to Build GitHub
holman
465
280k
Building Flexible Design Systems
yeseniaperezcruz
314
35k
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 •
...