ターミナルプログラムが従う「Rules」ルール
(jvns.ca)-
最近、ターミナルで起きるあらゆることは次の4つの要素の組み合わせだと考えるようになった
- オペレーティングシステムの役割
- シェルの役割
- ターミナルエミュレータの役割
- 実行中のプログラムの役割(
top、vim、catなど)
-
プログラムは驚くほど一貫して動作する
- POSIX は主にターミナルエミュレータ、OS、シェルの動作を規定しているが、個々のプログラムの動作方法に関する標準はない
- それでもターミナルプログラムはおおむね一貫したやり方で動作する
-
これらのルールは記述的であり、規範的ではない
- ターミナルプログラムの作者にこのルールに従うべきだと説得しようとしているわけではない
- 新しいターミナルプログラムを使うときに予想できる基本ルールを知っておくのは有用だ
-
プログラムの責任範囲が明確でない場合がある
- たとえば、
Ctrl-Dを押して REPL を終了するのは、プログラム側が明示的に実装する必要がある
- たとえば、
ルール 1: 非対話型プログラムは Ctrl-C を押すと終了すべき
- 非対話型プログラムは基本的に
Ctrl-Cを押すと終了する - 対話型プログラムでは
Ctrl-Cは別の役割を持つ
ルール 2: TUI は q を押すと終了すべき
lessやhtopのような TUI プログラムはqを押すと終了する
ルール 3: REPL は空行で Ctrl-D を押すと終了すべき
- ほとんどの REPL は空行で
Ctrl-Dを押すと終了する
ルール 4: 16色を超える色を使うべきではない
- ターミナルプログラムは、基本の 16 ANSI カラー以外の色をほとんど使わない
ルール 5: readline のキーバインドをおおむねサポートすべき
- ほとんどのプログラムは
readlineのキーバインドをサポートしている
ルール 5.1: Ctrl-W は最後の単語を削除すべき
Ctrl-Wが最後の単語を削除しないプログラムはほとんどない
ルール 6: パイプへ書き込むときは色を無効化すべき
- ほとんどのプログラムは、パイプへ書き込むときに色を無効化する
ルール 7: - は stdin/stdout を意味する
-
ファイル名の代わりに
-を渡すと、stdin から読み込むか stdout に書き込む -
こうしたルールを身につけるには時間がかかる
- ルールがどこに適用されるかを学び、例外を認識し、パターンを無意識に把握する必要がある
- こうしたルールを明示的に書き出せば、他の人が学ぶ速度を高められる
1件のコメント
Hacker Newsの意見
ユーザーの既定の前景色と背景色を尊重すべき
Command Line Interface Guidelines を推奨
-を受け入れる、パイプでは色を無効化する、といったルールを含むコマンドラインツールに関する追加ルール
sysexits.h終了コードを使うべき--helpとマニュアルページを含めるべきreadline/emacs キーバインドに関する情報
rlwrapプログラムをインストールして行編集機能を追加できる色の使用に関する助言
GHCiで Ctrl-D を使うと発生する問題
:qコマンドで終了すべき~をホームディレクトリとして扱うことに関する説明プログラムがホームディレクトリにファイルを追加しないようにすべき
CLI の一貫性に関する意見
長時間実行されるプロセスは、SIGHUP で設定を再読み込みすべき
SSH 接続で役立つヒント
~.を使って SSH セッションを終了できる