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
490
バイナリリーディング / Binary Reading
yoichi
0
360
OSS開発を楽しく続けてきた話
yoichi
0
820
Other Decks in Programming
See All in Programming
Cursor/Devin全社導入の理想と現実
saitoryc
16
12k
地域ITコミュニティの活性化とAWSに移行してみた話
yuukis
0
240
Being an ethical software engineer
xgouchet
PRO
0
210
趣味全開のAITuber開発
kokushin
0
200
Amazon CloudWatchの地味だけど強力な機能紹介!
itotsum
0
180
スモールスタートで始めるためのLambda×モノリス(Lambdalith)
akihisaikeda
2
290
PHPで書いたAPIをGoに書き換えてみた 〜パフォーマンス改善の可能性を探る実験レポート〜
koguuum
0
170
Vibe Codingをせずに Clineを使っている
watany
17
6.3k
API for docs
soutaro
2
1.4k
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
410
RuboCop: Modularity and AST Insights
koic
2
1.5k
AIコーディングワークフローの試行 〜AIエージェント×ワークフローでの自動化を目指して〜
rkaga
3
3.7k
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
329
38k
Music & Morning Musume
bryan
47
6.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.4k
Making Projects Easy
brettharned
116
6.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.2k
Optimising Largest Contentful Paint
csswizardry
36
3.2k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Scaling GitHub
holman
459
140k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
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 •
...